2012-08-15 35 views
7

Trong tài liệu cho tờ rơi tại đây: http://leafletjs.com/reference-1.2.0.html#circlemarker nó nói rằng CircleMaker mở rộng Vòng kết nối và cũng giống như vậy, ngoại trừ bán kính được chỉ định bằng pixel thay vì tính bằng mét. kích thước không đổi ngay cả khi bạn phóng to bản đồ.Tờ rơi: Vòng tròn hoạt động khác với CircleMarker

Tuy nhiên, tôi cần có Vòng kết nối vì tôi đang cố gắng vẽ vòng tròn bán kính 100m trên bản đồ. Để làm điều này, tôi sử dụng đoạn mã sau:

var geojsonLayer = new L.GeoJSON(null,{ 
pointToLayer: function (latlng){ 
    return new L.CircleMarker(latlng, { 
     radius: 5, 
     fillColor: "#ff7800", 
     color: "#000", 
     weight: 1, 
     opacity: 1, 
     fillOpacity: 0.8, 
    }); 
}}); 

map.addLayer(osm); 
map.addLayer(geojsonLayer); 
geojsonLayer.addGeoJSON(jsonExample); 

này hoạt động hoàn hảo, tuy nhiên, nếu tôi thay đổi mã để sử dụng "Circle" thay vì CircleMaker toàn bộ bản đồ không tải, và tôi nhận được một lỗi javascript:

Error: Error: Invalid LatLng object: (56.229917, NaN) 

tôi có thể sửa lỗi này bằng tiền lọc GeoJSON để loại bỏ những điểm mà thiếu cả độ và vĩ độ, nhưng tôi đang bối rối: Circle và CircleMaker cả xác định rằng họ mất một LatLng-đối tượng như đặc điểm kỹ thuật của điểm trung tâm, tôi không hiểu làm thế nào một đối tượng LatLng nhất định có thể hợp lệ làm điểm trung tâm cho một CircleMarker, nhưng không hợp lệ nếu được sử dụng làm điểm trung tâm cho một Vòng tròn.

Tôi có nhìn thấy một cái gì đó hiển nhiên, hoặc đây chỉ là một điểm yếu và/hoặc lỗi trong Leaflet mà tôi sẽ phải làm việc xung quanh?

Trả lời

4

Tôi đã sửa lỗi này bằng cách thay đổi phương thức _getLngRadius() của leaflet.js trong L.circle. Trong tờ rơi phiên bản 0.4.4, nó nằm quanh dòng 4913.

Phương pháp này khác với phương pháp trong vòng trònMarker, vì nó tính toán bán kính của vòng tròn động. Nếu bạn thay đổi dòng có

this._mRadius/hLength

để

this._mRadius.radius/hLength

nó cần được ok.

+0

Tuyệt vời! Cảm ơn bạn. Điều này có vẻ đáng giá, vì vậy tôi đoán rằng bản vá đó nên được gửi đến các nhà phát triển Leaflet. – Agrajag

+0

Điều gì đã xảy ra với điều này? –

+0

Mọi cập nhật về điều này? – kuanb

1

Bạn có thể thêm if (k.độ & v.độ & & latlng.lat & & latlng.lng) vào đầu chức năng của bạn (k.độ & v.độ)

rằng sẽ bỏ qua các datas bị lỗi.

+0

Vâng, tôi biết, như tôi đã viết: Tôi biết rằng tôi có thể lọc những điểm cần đưa vào để tránh vấn đề. Tôi đã không tìm cách tránh nó, nhưng để hiểu nó, mặc dù. Không có gì trong tài liệu chỉ ra rằng có sự khác biệt giữa "Vòng tròn" và "CircleMarker" về khía cạnh này. – Agrajag

4

Không còn vấn đề với mã nữa. Mặc dù vấn đề này tương tự có thể xảy ra một cách dễ dàng vì các nhà thầu khác nhau:

L.CircleMarker(<LatLng> latlng, <Path options> options?) 

L.Circle(<LatLng> latlng, <Number> radius, <Path options> options?) 

Hãy chắc chắn để vượt qua bán kính vòng tròn mới của bạn.

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