2014-04-11 8 views
7

मेरे पास कुछ GeoJSON एक कॉल से एक पोस्टजीआईएस डेटाबेस में लौटा है। मैं प्रत्येक सुविधा के लिए एक मार्कर जोड़ने में सक्षम होना चाहता हूं, और विभिन्न प्रकार के मार्कर/फीचर को टॉगल करने में सक्षम होना चाहता हूं। वर्तमान में मैं प्रत्येक सुविधा के लिए मार्कर उत्पन्न करने के लिए जावास्क्रिप्ट का उपयोग कर रहा हूं, उन्हें प्रकार के अनुसार सरणी में जोड़ रहा हूं, और उसके बाद 'परतों' को टॉगल करने के लिए उपयुक्त के रूप में उपयुक्त तीर सेटिंग/छुपाएं जा रहा हूं।Google मानचित्र GeoJSON- टॉगल मार्कर परतें?

यह ठीक काम करता है, लेकिन मुझे आश्चर्य है कि नई GeoJSON कार्यक्षमता ऐसा करने का एक बेहतर तरीका प्रदान करती है। जहां तक ​​मैं देख सकता हूं, सभी सुविधाओं को उसी डातालियर में जोड़ा जाता है और उनमें से टॉगलिंग सेटों में या तो स्टाइल सेटिंग या नए, प्री-फ़िल्टर किए गए जियोज़सन के साथ प्रतिस्थापित किया जाएगा।

तो प्रश्न यह है कि एक से अधिक डेटा परत रखना संभव है, और आसानी से उन्हें मानचित्र से जोड़/हटा दें या क्या मैं ओपनलेयर जैसे कुछ को देखने से बेहतर हूं?

संपादित करें: बिट अधिक शोध से पता चलता है कि यह काफी सरल है।

फ़ीचर संग्रह में प्रत्येक प्रकार की सुविधा के लिए जिसे हम टॉगल करना चाहते हैं, एक नई डेटा ऑब्जेक्ट बनाएं। उस डेटा ऑब्जेक्ट में सभी प्रासंगिक विशेषताएं जोड़ें।

var datalayer = new google.maps.Data(); 
datalayer.addGeoJson(feature); 
datalayer.setMap(mainmap); 

फिर प्रत्येक डेटा ऑब्जेक्ट/फीचर प्रकार को कुंजी-मूल्य जोड़ी के रूप में स्टोर करें। टॉगल पर, उचित रूप में प्रासंगिक डेटा वस्तु और setMap बाहर खींच:

var datalayer= featuretypesobj["feature type to toggle"]; 
datalayer.setMap(mymap); //or 
datalayer.setMap(null); 

उत्तर

10

तुम भी अलग परतों

var layer_1 = new google.maps.Data(); 
var layer_2 = new google.maps.Data(); 

तो यह पॉप्युलेट, उदा बना सकते हैं json डेटा के साथ

layer_1.loadGeoJson('/path/to/data.json'); 
layer_2.loadGeoJson('/path/to/data2.json'); 

तो/जोड़ने के नक्शे पर उन्हें हटाने

layer_1.setMap(map); 
layer_2.setMap(map); 
layer_1.setMap(null); 
2

जोड़े के लिए: वर layer_1 = नए google.maps.Data(); नक्शा प्रारंभिक समारोह के अंदर किया जाना चाहिए, जैसे:

var map; 

    var data_layer_for_ramps; 



    function initialize() { 

      map = new google.maps.Map(document.getElementById('map'), { 
       zoom: 12, 
       center: new google.maps.LatLng(-33.897907, 151.179138),//-33.8151,151.0032 
       mapTypeId: 'roadmap' 
      }); 

      data_layer_for_ramps = new google.maps.Data(); 
     } 
संबंधित मुद्दे