2012-08-15 16 views
7

Buradaki Broşürün belgelerinde: http://leafletjs.com/reference-1.2.0.html#circlemarker, CircleMaker'ın Circle'ı uzattığını ve bunun aynı şey olduğunu, yani radiusun metre cinsinden değil piksel olarak belirtildiğini, yani dairelerin kalmasını sağladığını haritayı yakınlaştırsanız bile sabit boyut.Broşür: CircleMarker'den farklı davranan daire

Ancak, Çevreler'e ihtiyacım var çünkü bir harita üzerinde 100m yarıçap daireler çizmeye çalışıyorum.

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

Ben tüm harita yüklenmemesi yerine CircleMaker ait "Çemberi" kullanmaya kodunu değiştirmek durumunda Ancak bu mükemmel çalışıyor ve ben bir javascript hata alıyorum: Bunu yapmak için, aşağıdaki kodu kullanın:

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

Ben enlem ve boylam hem yoksun bu noktaları kaldırmak için GeoJSON'a ön filtreleme bu sorunu giderebilirsiniz ama kafam karıştı: Çember ve CircleMaker hem onlar belirtim olarak bir EnlBoy-nesne almak belirtmek orta nokta, belirli bir LatLng nesnesinin bir CircleMarker için merkez noktası olarak nasıl geçerli olabileceğini anlamıyorum, ancak bir Çember için merkez noktası olarak kullanıldığında geçersiz.

Açık bir şeye bakıyor muyum, yoksa bu sadece broşürde çalışmak zorunda olduğum bir zayıflık ve/veya hata mı? (EnlBoy) sizin işlevi hatalı veriler göz ardı eder

başında (& latlng.lat & & latlng.lng & LatLng) eğer

cevap

4

Bunu, L.circle içindeki leaflet.js dosyasının _getLngRadius() yöntemini değiştirerek düzelttim. Broşür sürümü 0.4.4'te, 4913 çizgisi civarındadır.

Bu yöntem, dairenin yarıçapını dinamik olarak hesapladığından, circleMarker'daki birinden farklıdır. Eğer sahip çizgiyi değiştirirseniz

this._mRadius/hLength

this._mRadius.radius/hLength

için Tamam olmalıdır.

+0

Awesome! Teşekkür ederim. Bu genel olarak faydalı gibi görünüyor, bu yüzden bu yamanın broşür geliştiricilere de gönderilmesi gerektiğini düşünüyorum. – Agrajag

+0

Buna ne oldu zaten? –

+0

Bu konuda herhangi bir güncelleme var mı? – kuanb

1

ekleyebilir.

+0

Evet, şunu yazıyormuşum gibi: Sorunu önlemek için hangi noktaların ekleneceğini filtreleyebileceğimin farkındayım. Bunu önlemek istemedim, ama anlamak için. Dokümanlardaki hiçbir şey "Circle" ve "CircleMarker" arasında bu açıdan bir fark olması gerektiğini belirtmez. – Agrajag

4

Artık kodla ilgili bir sorun yok. Bu aynı sorunu nedeniyle farklı inşaatçı kolayca ortaya çıkabilir rağmen:

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

ve

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

yeni çevrelere yarıçapı geçtiğine emin olun.

İlgili konular