2012-04-20 40 views
17

Tengo un mapa de leaflet.js que tiene puntos y cadenas de líneas que provienen de un archivo JSON externo.Leaflet.js - Ajustar las coordenadas geoJSON en la vista de mapa

Si añado: map.setView (nuevo L.LatLng (0,0), 10);

Centrarán el mapa en la latitud y la longitud 0,0. ¿Cómo puedo configurarlo para que el centro del mapa y el zoom se ajusten a todos los puntos del JSON en él?

Respuesta

20

Puede agregar todas sus capas a un FeatureGroup que tiene un método getBounds. Por lo tanto, debería poder decir myMap.fitBounds(myFeatureGroup.getBounds());

El método getBounds para L.FeatureGroup solo está disponible en la rama principal (no la última versión, 0.3.1), al menos por ahora.

+0

Ok, gracias por la ayuda. Entonces, si en el momento mi código que agrega la capa geoJSON se ve así: geojsonLayer.addGeoJSON (jsonData); map.addLayer (geojsonLayer); map.fitBounds (jsonGroup.getBounds()); Lo cambiaría a: geojsonLayer.addGeoJSON (jsonData); map.addLayer (geojsonLayer); var jsonGroup = new L.FeatureGroup (jsonData); map.fitBounds (jsonGroup.getBounds()); Y eso debería funcionar? – James

+0

Lo siento, ha eliminado todo el formato de mi publicación anterior y no estoy seguro de cómo conservarlo cuando guardo el comentario. – James

+0

Es bastante difícil de depurar en los comentarios. ¿Puedes pegar tu código en http://jsfiddle.net para mostrarme lo que tienes (o al menos parte de él)? – Jason

1

Necesitaba hacer esto al mostrar las instrucciones de un usuario desde su origen a un destino. Debo guardar la lista de direcciones en una variedad de L.LatLng llamada directionLatLngs continuación, sólo tiene que llamar

map.fitBounds(directionLatLngs); 

Esto funciona porque map.fitBounds toma un objeto L.LatLngBounds que es sólo un conjunto de L.LatLng

http://leafletjs.com/reference.html#latlngbounds

5

similares caso conmigo Dibujé todos los marcadores de GeoJson datos. Así que escribí la función, que recibe varias llamadas al hacer clic en el botón. Solo prueba si se adapta a tus necesidades.

function bestFitZoom() 
    { 
     // declaring the group variable 
     var group = new L.featureGroup; 

     // map._layers gives all the layers of the map including main container 
     // so looping in all those layers filtering those having feature 
     $.each(map._layers, function(ml){ 

      // here we can be more specific to feature for point, line etc.    
      if(map._layers[].feature) 
      { 
       group.addLayer(this) 
      } 
     }) 

     map.fitBounds(group.getBounds()); 
    } 

El mejor uso de escribir esta función es que incluso estado de mapa/marcadores cambió, se pondrá último estado de marcadores/capas/corriente. Cada vez que se llame a este método, todas las capas serán visibles a un nivel de zoom modesto.

Cuestiones relacionadas