Leaflet и geojson AJAX-вызовы

Я пытался выяснить, как отобразить около 2200 точек данных в буклете, однако я только что погрузился в мир JS, и есть много новых для меня концепций. В качестве рабочего примера того, как извлекать данные из geojson, и он появится на вашей карте. Однако я не могу заставить его работать с моими собственными данными, и я не знаю, что я делаю неправильно. Я пытался использовать множество различных источников хостинга и использовать как тестовые данные, так и учебные данные (в виде файлов geojson), чтобы устранить неполадки, вызывающие проблемы: хост или файл geojson. Я до сих пор не уверен, что это такое.

Ниже приведен мой код (с использованием тестовых данных и файлов значков из учебника), если кто-нибудь может взглянуть и сказать мне, почему он не загружает данные на мою карту, я был бы очень благодарен! Даже некоторые предложения о том, что я мог бы попробовать сделать, помогли бы. Мой единственный опыт программирования связан с R, так что, вероятно, я что-то упустил, что должно было быть очевидным.

<html>
<head>
  <title>A Leaflet map!</title>
  <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" />
  <script src="https://unpkg.com/[email protected]/dist/leaflet.js"></script>
  <script src="https://raw.githubusercontent.com/leaflet-extras/leaflet-providers/master/leaflet-providers.js"></script>
  <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
  <style>
    #map{ height: 900px;width: 650px }
  </style>
</head>
<body>

  <div id="map"></div>

  <script>

var map = L.map('map').setView([-41.291, -185.229], 6);

var OpenMapSurfer_Roads = L.tileLayer('http://korona.geog.uni-heidelberg.de/tiles/roads/x={x}&y={y}&z={z}', {
    maxZoom: 20,
    attribution: 'Imagery from <a href="http://giscience.uni-hd.de/">GIScience Research Group @ University of Heidelberg</a> &mdash; Map data &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}).addTo(map);


$.getJSON("https://bitbucket.org/whalebiologist/website-map/raw/58abf2f24696fef437c294c02e55019d1c6554e4/churches_short.geojson",function(data){
  var ratIcon = L.icon({
    iconUrl: 'http://maptimeboston.github.io/leaflet-intro/rat.png',
    iconSize: [60,50]
  });
  L.geoJson(data,{
    pointToLayer: function(feature,latlng){
  var marker = L.marker(latlng,{icon: ratIcon});
  marker.bindPopup(feature.properties.Location + '<br/>' + feature.properties.OPEN_DT);
  return marker;
}
  }).addTo(map);
});

  </script>
</body>
</html>

Спасибо всем, кто захочет это прочитать!


person Whale Biologist    schedule 20.05.2017    source источник


Ответы (1)


Добро пожаловать в СО!

Удобным способом отладки HTML и JavaScript является консоль вашего браузера, например, Chrome.

Когда вы загружаете свою страницу, в консоли могут быть зарегистрированы сообщения об ошибках. Я вижу ошибку о типах пантомимы для leaflet-providers.js. Исправление для этого состоит в том, чтобы преобразовать URL-адрес с помощью rawgit.com. Подробнее см. здесь.

Новый источник скрипта будет https://rawgit.com/leaflet-extras/leaflet-providers/master/leaflet-providers.js.

Далее оказывается, что $.getJSON не выполняет обратный вызов успеха, что означает, что где-то в запросе может быть ошибка. getJSON jQuery также возвращает Promise (см. Объект jqXHR), что позволяет нам перемещать код вокруг немного, чтобы увидеть, можем ли мы поймать ошибку.

$.getJSON("https://bitbucket.org/whalebiologist/website-map/raw/58abf2f24696fef437c294c02e55019d1c6554e4/churches_short.geojson")
    .then(function (data) {
        var ratIcon = L.icon({
            iconUrl: 'http://maptimeboston.github.io/leaflet-intro/rat.png',
            iconSize: [60, 50]
        });
        L.geoJson(data, {
            pointToLayer: function (feature, latlng) {
                var marker = L.marker(latlng, { icon: ratIcon });
                marker.bindPopup(feature.properties.Location + '<br/>' + feature.properties.OPEN_DT);
                return marker;
            }
        }).addTo(map);
    })
    .fail(function(err){
        console.log(err.responseText)
    });

В нашем fail() мы получаем некоторый текст, зарегистрированный в нашей консоли браузера. Похоже, файл geojson находится за логином на битбакете.

Попробуйте переместить файл geojson из защищенной паролем области.

person Adam Paxton    schedule 20.05.2017