2012-04-20 14 views
17

मेरे पास एक leaflet.js नक्शा है जिसमें बाहरी JSON फ़ाइल से आने वाले बिंदु और linestrings हैं।Leaflet.js - फिट geoJSON नक्शा दृश्य पर समन्वय

यदि मैं जोड़ता हूं: map.setView (नया L.LatLng (0,0), 10);

यह अक्षांश और देशांतर 0,0 पर मानचित्र को केंद्रित करेगा। मैं इसे कैसे सेट कर सकता हूं ताकि मानचित्र केंद्र और ज़ूम उस पर JSON से सभी बिंदुओं को फिट कर सके?

उत्तर

20

आप अपनी सभी परतों को फ़ीचर समूह में जोड़ सकते हैं जिसमें getBounds विधि है। तो आपको बस myMap.fitBounds(myFeatureGroup.getBounds());

एल.फेचर समूह के लिए गेटबाउंड विधि केवल मास्टर शाखा (नवीनतम संस्करण, 0.3.1 नहीं) में उपलब्ध है, कम से कम अब तक।

+0

ठीक है, मदद के लिए धन्यवाद। तो अगर मिनट में मेरा कोड जो geoJSON परत जोड़ता है, जैसे दिखता है: geojsonLayer.addGeoJSON (jsonData); map.addLayer (geojsonLayer); map.fitBounds (jsonGroup.getBounds()); मैं इसे बदल दूंगा: geojsonLayer.addGeoJSON (jsonData); map.addLayer (geojsonLayer); var jsonGroup = नया एल। फीचर समूह (जेसनडाटा); map.fitBounds (jsonGroup.getBounds()); और यह काम करना चाहिए? – James

+0

क्षमा करें, इसने उपरोक्त पोस्ट के सभी स्वरूपण को हटा दिया है और मुझे यकीन नहीं है कि जब मैं टिप्पणी को सहेजता हूं तो इसे कैसे संरक्षित किया जाए। – James

+0

टिप्पणियों में डीबग करना बहुत मुश्किल है। क्या आप मुझे अपना कोड दिखाने के लिए http://jsfiddle.net पर अपना कोड पेस्ट कर सकते हैं (या कम से कम इसका हिस्सा)? – Jason

1

मुझे अपनी उत्पत्ति से गंतव्य तक उपयोगकर्ता निर्देश दिखाते समय ऐसा करने की आवश्यकता थी। मैं directionLatLngs बुलाया L.LatLng की एक सरणी में दिए गए निर्देशों की मेरी सूची की दुकान तो आप बस

map.fitBounds(directionLatLngs); 

यह काम करता है कॉल कर सकते हैं क्योंकि map.fitBounds एक L.LatLngBounds वस्तु जो सिर्फ L.LatLng

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

5

इसी प्रकार की एक सरणी है लेता है मेरे साथ मामला मैंने GeoJson डेटा से मार्कर खींचा। तो मैंने फ़ंक्शन लिखा, जिसे बटन क्लिक पर बार-बार कहा जाता है। बस कोशिश करें कि यह आपकी आवश्यकताओं के अनुरूप है या नहीं।

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

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

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