Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mapbox fitBounds, function bounds map but does not render tiles

Here, my javascript code to render markers in map and after that fitBounds of that map.

Map bounds are get fit according to geojson, but problem is that when there is any marker on map and I try to fit bound, map tiles images are not get render.

In map it display only markers, no tile images.

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);
       }
    }
like image 440
111 Avatar asked Apr 24 '14 05:04

111


People also ask

How to render a map in Mapbox GL JS?

The HTML element in which Mapbox GL JS will render the map, or the element's string id . The specified element must have no children. boolean? If true , scroll zoom will require pressing the ctrl or ⌘ key while scrolling to zoom map, and touch pan will require using two fingers while panning to move the map.

Why does Mapbox GL JS default to 0 for bearings?

If bearing is not specified in the constructor options, Mapbox GL JS will look for it in the map's style object. If it is not specified in the style, either, it will default to 0 .

What are the options in Mapbox?

A string representing the position of the Mapbox wordmark on the map. Valid options are top-left , top-right , bottom-left , bottom-right . If set, the map will be constrained to the given bounds. The maximum pitch of the map (0-85). The maximum number of tiles stored in the tile cache for a given source.

Does Mapbox GL require WebGL support?

Mapbox GL requires WebGL support. Please check that you are using a supported browser and that WebGL is enabled. * the viewport to contain a bounding box that surrounds Kenya. * corners of the specified geographical bounds.


1 Answers

If anyone is still struggling with this, it appears to be a bug in Leaflet: https://github.com/Leaflet/Leaflet/issues/2021

It has been fixed in the latest version, but if you can't update you can work around the race condition by setting a timeout:

setTimeout(function () {
    map.fitBounds(latLongCollection);
}, 0);
like image 108
Corentin S. Avatar answered Sep 17 '22 09:09

Corentin S.