2012-04-20 33 views
17

Tôi có một bản đồ leaflet.js có các điểm và đường kẻ trên đó xuất phát từ một tệp JSON bên ngoài.Leaflet.js - Phối hợp tọa độ geoJSON trên chế độ xem bản đồ

Nếu tôi thêm: map.setView (new L.LatLng (0,0), 10);

Nó sẽ căn giữa bản đồ trên vĩ độ và kinh độ 0,0. Làm thế nào tôi có thể thiết lập nó để trung tâm bản đồ và zoom phù hợp với tất cả các điểm từ JSON trên nó?

Trả lời

20

Bạn có thể thêm tất cả các lớp của mình vào một Nhóm đối tượng có phương thức getBounds. Vì vậy, bạn có thể chỉ cần nói myMap.fitBounds(myFeatureGroup.getBounds());

Phương pháp getBounds cho L.FeatureGroup chỉ có sẵn trong nhánh chính (không phải phiên bản mới nhất, 0.3.1), ít nhất là bây giờ.

+0

Ok, cảm ơn sự giúp đỡ. Vì vậy, nếu vào phút, mã của tôi thêm lớp geoJSON trông giống như: geojsonLayer.addGeoJSON (jsonData); map.addLayer (geojsonLayer); map.fitBounds (jsonGroup.getBounds()); Tôi sẽ đổi thành: geojsonLayer.addGeoJSON (jsonData); map.addLayer (geojsonLayer); var jsonGroup = new L.FeatureGroup (jsonData); map.fitBounds (jsonGroup.getBounds()); Và điều đó có hiệu quả không? – James

+0

Xin lỗi, nó đã loại bỏ tất cả các định dạng ra khỏi bài viết của tôi ở trên và tôi không chắc chắn làm thế nào để bảo tồn nó khi tôi lưu bình luận. – James

+0

Rất khó để gỡ lỗi trong các nhận xét. Bạn có thể dán mã của bạn qua tại http://jsfiddle.net để chỉ cho tôi những gì bạn đã có (hoặc ít nhất một phần của nó)? – Jason

1

Tôi cần thực hiện việc này khi hiển thị chỉ đường người dùng từ nguồn gốc của mình đến đích. Tôi lưu trữ danh sách các hướng dẫn trong một loạt các L.LatLng gọi directionLatLngs sau đó bạn chỉ có thể gọi

map.fitBounds(directionLatLngs); 

này hoạt động vì map.fitBounds mất một đối tượng L.LatLngBounds mà chỉ là một mảng của L.LatLng

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

5

tương tự trường hợp với tôi. Tôi đã vẽ tất cả các điểm đánh dấu từ GeoJson dữ liệu. Vì vậy, tôi đã viết hàm, được gọi nhiều lần khi nhấp vào nút. Chỉ cần thử nếu nó phù hợp với yêu cầu của bạn.

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

Việc sử dụng tốt nhất chức năng này là trạng thái/điểm đánh dấu mới nhất/hiện tại. Bất cứ khi nào phương pháp này được gọi là tất cả các lớp sẽ được hiển thị ở mức thu phóng khiêm tốn.

Các vấn đề liên quan