2012-11-09 25 views
26

पर सरल लेबल मैं क्या मैं एक पत्रक multipolygon वस्तु के साथ एक बहुत ही आम यूज-केस होने की कल्पना का प्रयास कर रहा हूँ।एक पत्रक (GeoJSON) बहुभुज

var layer = L.GeoJSON(g, style_opts); 

मैं चाहता क्या प्रत्येक बहुभुज के केंद्र में एक साधारण पाठ लेबल डाल करने के लिए है:

मैं MultiPolygon का उपयोग कर GeoJSON पैदा करते हैं। (उदाहरण के लिए, प्रत्येक राज्य के केंद्र में राज्य का नाम डालने जैसा कुछ)। https://groups.google.com/forum/?fromgroups=#!topic/leaflet-js/sA2HnU5W9Fw

कौन वास्तव में पाठ ओवरले, लेकिन जब मैं बहुभुज का एक समूह जोड़ने के लिए, यह लेबल ऑफ सेंटर अजीब तरीके में डाल करने के लिए प्रकट होता है, और मैं वर्तमान में असमर्थ हूं:

मैं देखा है समस्या को ट्रैक करने के लिए।

मैं भी देखा है: https://github.com/jacobtoye/Leaflet.label

लेकिन यह है कि केवल बहुभुज पर लेबल लगाने के लिए प्रकट होता है जब आप बहुभुज पर माउस, और बहुभुज पर स्थिर नहीं रहता।

मुझे लगता है कि मेरा सबसे अच्छा तरीका उस पहले लिंक का उपयोग करना है, और यह ट्रैक करना है कि यह स्थान क्यों बदल रहा है, लेकिन इस बीच, अगर किसी को पुस्तिका में बहुभुज पर लेबल रखने का एक त्वरित और आसान तरीका पता है , मैं बहुत बाध्य होगा।

इसके अलावा, अगर मैं ऊपर दो लिंक के बारे में कोई दोषपूर्ण मान्यताओं है, मुझे बाहर सीधा करने के लिए संकोच न करें।

अग्रिम धन्यवाद।

उत्तर

22

पत्रक लेबल प्लगइन भी अनुमति देता है स्थिर लेबल, demo देखते हैं। पॉलीलाइन लेबल स्थिर नहीं होने का एकमात्र कारण यह है कि जब आप पॉलीलाइन के साथ आगे बढ़ते हैं तो यह चारों ओर घूमता है।

आप शायद इस से बेहतर कर सकते, बहुभुज के लिए bindLabel() अधिभावी द्वारा, लेकिन यह एक बहुभुज के केंद्र के लिए एक स्थिर लेबल जोड़ने के लिए एक आसान तरीका है:

label = new L.Label() 
label.setContent("static label") 
label.setLatLng(polygon.getBounds().getCenter()) 
map.showLabel(label); 

http://jsfiddle.net/CrqkR/6/

+1

जवाब के लिए धन्यवाद। काम करने के लिए इसे प्रबंधित करने के लिए प्रबंधित। 'ShowLabel()' को कॉल करने से पहले आपको मानचित्र में लेबल जोड़ने की आवश्यकता है: 'label.addTo (map)' – Ben

+0

@ बेन मैंने कोशिश की है और यह लिखित के रूप में काम करता है। Http://jsfiddle.net/CrqkR/6/ – flup

+0

मुझे कुछ गलत कर रहा होगा ... अद्यतन – Ben

12

आप प्रत्येक बहुभुज के लिए एक नया L.divIcon बनाने के लिए L.geoJson के onEachFeature विकल्प का उपयोग कर सकते हैं।

L.geoJson(geoJsonData, { 
    onEachFeature: function(feature, layer) { 
    var label = L.marker(layer.getBounds().getCenter(), { 
     icon: L.divIcon({ 
     className: 'label', 
     html: feature.properties.NAME, 
     iconSize: [100, 40] 
     }) 
    }).addTo(map); 
    } 
); 
+1

यदि आप 'geoJsonData' को मानचित्र पर फीचर लेयर के रूप में टॉगल करते हैं तो आप यह कैसे काम करेंगे? आपकी वर्तमान विधि लेबल को लेबल में शुरू में जोड़ती है। किसी भी सुझाव के लिए धन्यवाद। – redshift

+0

अपने 'L.geoJson' परत एक चर बुलाया' geojson' आप 'geojson.clearLayers()' और उसके बाद 'geojson.addData (newGeoJsonData)' – clhenrick

+0

@redshift .. फोन जाँच मेरा उत्तर यहाँ http सकते में सहेजा जाता है, तो://stackoverflow.com/questions/31691297/how-to-remove-a-leaflet-label-when-a-topojson-layer-containing-it-is-removed/31695242#31695242 – muzaffar

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