2012-04-20 3 views
17

У меня есть карта leaflet.js, на которой есть точки и линии Linestrings, которые поступают из внешнего файла JSON.Leaflet.js - Установите координаты geoJSON на карте

Если я добавляю: map.setView (новый L.LatLng (0,0), 10);

Он будет центрировать карту по широте и долготе 0,0. Как я могу установить его так, чтобы центр карты и масштабирование соответствовали всем точкам JSON?

ответ

20

Вы можете добавить все свои слои в FeatureGroup, где есть метод getBounds. Поэтому вы должны просто сказать myMap.fitBounds(myFeatureGroup.getBounds());

Метод getBounds для L.FeatureGroup доступен только в основной ветке (не последняя версия, 0.3.1), на данный момент, по крайней мере.

+0

Хорошо, спасибо за помощь. Так что если в тот же момент мой код, добавляющий слой geoJSON, выглядит так: geojsonLayer.addGeoJSON (jsonData); map.addLayer (geojsonLayer); map.fitBounds (jsonGroup.getBounds()); Я бы поменял его на: geojsonLayer.addGeoJSON (jsonData); map.addLayer (geojsonLayer); var jsonGroup = new L.FeatureGroup (jsonData); map.fitBounds (jsonGroup.getBounds()); И что должно работать? – James

+0

Извините, он разделил все форматирование моего сообщения выше, и я не уверен, как сохранить его, когда я сохраняю комментарий. – James

+0

Очень сложно отлаживать комментарии. Можете ли вы вставить свой код на http://jsfiddle.net, чтобы показать мне, что у вас есть (или, по крайней мере, часть его)? – Jason

1

Мне нужно было сделать это, показывая указания пользователя от его источника до места назначения. Я храню список направлений в массиве L.LatLng под названием directionLatLngs, то вы можете просто позвонить

map.fitBounds(directionLatLngs); 

Это работает, потому что map.fitBounds принимает L.LatLngBounds объект, который просто массив L.LatLng

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

5

Похожие случай со мной. Я нарисовал все маркеры от GeoJson данные. Поэтому я написал функцию, которая вызывается повторно при нажатии кнопки. Просто попробуйте, если это соответствует вашим требованиям.

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()); 
    } 

Лучшее использование написания этой функции является то, что даже состояние отображения/маркеров изменилось, она получит последнее/текущее состояние маркеров/слоев. Всякий раз, когда этот метод вызывается, все слои будут видны до скромного уровня масштабирования.

Смежные вопросы