Mapbox fitBounds, функция ограничивает карту, но не отображает плитки

Здесь мой код javascript для визуализации маркеров на карте и после этого fitBounds этой карты.

Границы карты подбираются в соответствии с geojson, но проблема в том, что, когда на карте есть какой-либо маркер, и я пытаюсь соответствовать границе, изображения фрагментов карты не отображаются.

На карте отображаются только маркеры, без мозаичных изображений.

var latLongCollection = [];
    var map;
    $(document).ready(function() {
    map();
    });


    function map() {
      map = L.mapbox.map('DivId', 'ProjectId');
      GetData();
     }

    function GetData() {
       $.ajax({
           type: "GET",
           url: someUrl,
           dataType: "json",
           contentType: "application/json; charset=utf-8",
           success: AjaxSuccess,
           error: function () {
           }
       });
    }

     function AjaxSuccess(data) {
      if (data == null || data.length == 0) {
          return;
      }

      var geoJson = {
          "type": "FeatureCollection",
          "features": []
      };

      $.each(data, function (index, value) {

          var latitude = parseFloat(value.Latitude),
              longitude = parseFloat(value.Longitude);

          if (latitude && longitude) {
              var dataJson = {
                  type: "Feature",
                  geometry: { type: "Point", coordinates: [longitude, latitude] },
                  properties: {
                      someProp: value.SomeProperty,
                      }
              };

              geoJson.features.push(vehicleJson);
          }
      });

      var markerLayer = L.mapbox.featureLayer(geoJson).addTo(map);

      markerLayer.eachLayer(function (marker) {
           var feature = marker.feature;
           var featureProperty = feature.properties;

           if (featureProperty.someProp) {
               marker.setIcon(L.divIcon({
                   html: 'htmlstring',
                   iconSize: [35, 75]
               }));
           }
           else {
               marker.setIcon(L.divIcon({
                   html: 'anotherhtmlstring',
                   iconSize: [35, 75]
               }));
           }

           latLongCollection.push(marker._latlng);
    });

     markerLayer.on('click', function (e) {
         map.panTo(e.layer.getLatLng());
     });

        if (latLongCollection.length > 0) {
           map.fitBounds(latLongCollection);
       }
    }

person 111    schedule 24.04.2014    source источник


Ответы (2)


Если кто-то все еще борется с этим, похоже, это ошибка в Leaflet: https://github.com/Leaflet/Leaflet/issues/2021

Это было исправлено в последней версии, но если вы не можете обновить, вы можете обойти состояние гонки, установив тайм-аут:

setTimeout(function () {
    map.fitBounds(latLongCollection);
}, 0);
person Corentin S.    schedule 15.05.2014
comment
позже я попробую то же самое, что и ты. - person 111; 15.05.2014
comment
Обновление проспекта до v = 0.7.5 (последняя версия) не решает эту проблему. - person Jeevan Roy dsouza; 23.10.2015

Как вы пытались отладить проблему? Что говорит ваша сеть и js-консоль?

Попробуйте уменьшить масштаб, возможно, fitBounds слишком сильно увеличивает масштаб вашей карты. У меня была такая проблема. Решением было использование опции maxSize в fitBounds, см. Листовки.

person promanski    schedule 24.04.2014
comment
Нет, уровень масштабирования карты не является максимальным, и ошибки консоли не возникает. Когда я вижу сеть, mapbox js прервал все запросы на загрузку изображений плитки. поэтому изображения плитки не отображаются. - person 111; 25.04.2014