2012-08-15 14 views
7

यहां पत्रक के लिए प्रलेखन में: http://leafletjs.com/reference-1.2.0.html#circlemarker यह कहता है कि सर्कलमेकर मंडल का विस्तार करता है, और यह वही बात है, सिवाय इसके कि त्रिज्या मीटर के बजाय पिक्सल में निर्दिष्ट है, ताकि मंडल रहें यदि आप मानचित्र ज़ूम करते हैं तो भी स्थिर आकार।पत्रक: CircleMarker से अलग सर्किल व्यवहार

मुझे मंडलियों की आवश्यकता है, क्योंकि मैं मानचित्र पर 100 मीटर त्रिज्या मंडल खींचने की कोशिश कर रहा हूं।

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

यह पूरी तरह से काम करता है, फिर भी, अगर मैं "सर्कल" CircleMaker के बजाय संपूर्ण नक्शा लोड करने के लिए विफल रहता है उपयोग करने के लिए कोड बदलने के लिए, और मैं एक जावास्क्रिप्ट त्रुटि मिलती है: ऐसा करने के लिए, मैं निम्नलिखित कोड का उपयोग करें:

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

मैं GeoJSON पूर्व छानने उन बिंदुओं जो दोनों अक्षांश और देशांतर की कमी दूर करने के लिए इसे ठीक कर सकते हैं, लेकिन मैं उलझन में हूँ: सर्किल और CircleMaker दोनों निर्दिष्ट है कि वे के विनिर्देश के रूप में एक LatLng-वस्तु ले केंद्र बिंदु, मुझे नहीं पता कि एक निश्चित LatLng ऑब्जेक्ट सर्किलमार्कर के लिए केंद्र-बिंदु के रूप में मान्य कैसे हो सकता है, लेकिन यदि सर्किल के लिए केंद्र बिंदु के रूप में उपयोग किया जाता है तो अमान्य।

क्या मैं कुछ स्पष्ट दिख रहा हूं, या यह सिर्फ एक कमजोरी और/या बग में है कि मुझे बस काम करना होगा?

उत्तर

4

मैंने L.circle में leaflet.js की _getLngRadius() विधि को बदलकर इसे ठीक किया। लीफलेट संस्करण 0.4.4 में, यह चारों ओर लाइन 4913 है।

यह विधि सर्कलमार्कर में से एक से अलग है, क्योंकि यह गतिशील रूप से सर्कल के त्रिज्या की गणना करता है। आप लाइन है कि बदलते हैं तो

this._mRadius/hLength

this._mRadius.radius/hLength

को यह ठीक होना चाहिए।

+0

बहुत बढ़िया! धन्यवाद। यह आम तौर पर सार्थक लगता है, इसलिए मुझे लगता है कि पैच को भी पत्रक-डेवलपर्स को भेजा जाना चाहिए। – Agrajag

+0

इसके साथ क्या हुआ, वैसे भी? –

+0

इस पर कोई अद्यतन? – kuanb

1

यदि आपका समारोह (latlng)

कि दोषपूर्ण datas अनदेखी करेंगे की शुरुआत में (& & latlng.lat & & latlng.lng latlng) जोड़ सकते हैं।

+0

हाँ, मुझे पता है, जैसा मैंने लिखा था: मुझे पता है कि मैं इस मुद्दे से बचने के लिए कौन से अंक शामिल करना फ़िल्टर कर सकता हूं। मैं इससे बचने की कोशिश नहीं कर रहा था, लेकिन इसे समझने के लिए, हालांकि। दस्तावेज़ों में कुछ भी नहीं दर्शाता है कि इस संबंध में "मंडल" और "सर्कलमार्कर" के बीच कोई अंतर होना चाहिए। – Agrajag

4

अब कोड के साथ कोई समस्या नहीं है। हालांकि इस एक ही मुद्दा है क्योंकि विभिन्न निर्माताओं की आसानी पैदा कर सकते:

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

और

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

अपनी नई मंडलियों को त्रिज्या पारित करने के लिए सुनिश्चित करें।

संबंधित मुद्दे