2013-04-22 18 views
12

मैं डेटा के साथ एक जियोज़सन परत को पॉप्युलेट करना चाहता हूं और फिर गतिशील रूप से फ़िल्टर करने के लिए कौन सी फीचर्स दिखाना चाहता हूं।पत्रक: GeoJson फ़िल्टर अद्यतन करें?

मुझे फ़िल्टर फ़ंक्शन काम करने के लिए मिला है लेकिन मुझे नहीं पता कि फ़िल्टर को कैसे बदला जाए और फिर परत को रीफ्रेश करें।

क्या डेटा जोड़ने के बाद फ़िल्टर को अपडेट करने का कोई तरीका है?

उत्तर

13

मैंने सुविधा की एक संपत्ति के आधार पर प्रत्येक सुविधा प्रकार को LayerGroup पर जोड़कर ऐसा किया। जैसे

GeoJSON

var data =[ 
    { 
    type: "Feature", 
    properties: { 
     type: "type1" 
    }, 
    geometry: { 
     type: "Point", 
     coordinates: [-1.252,52.107] 
    } 
    }, 
    { 
    type: "Feature", 
    properties: { 
     type: "type2" 
    }, 
    geometry: { 
     type: "Point", 
     coordinates: [-2.252,54.107] 
    } 
    } 
]; 

GeoJSON लेयर बनाएं

//array to store layers for each feature type 
var mapLayerGroups = []; 

//draw GEOJSON - don't add the GEOJSON layer to the map here 
L.geoJson(data, {onEachFeature: onEachFeature})//.addTo(map); 

/* 
*for all features create a layerGroup for each feature type and add the feature to the layerGroup 
*/ 
function onEachFeature(feature, featureLayer) { 

    //does layerGroup already exist? if not create it and add to map 
    var lg = mapLayerGroups[feature.properties.type]; 

    if (lg === undefined) { 
     lg = new L.layerGroup(); 
     //add the layer to the map 
     lg.addTo(map); 
     //store layer 
     mapLayerGroups[feature.properties.type] = lg; 
    } 

    //add the feature to the layer 
    lg.addLayer(featureLayer);  
} 

तो फिर तुम पत्रक map.addLayer/removeLayer कार्यों जैसे कॉल कर सकते हैं

//Show layerGroup with feature of "type1" 
showLayer("type1"); 

/* 
* show/hide layerGroup 
*/ 
function showLayer(id) { 
    var lg = mapLayerGroups[id]; 
    map.addLayer(lg); 
} 
function hideLayer(id) { 
    var lg = mapLayerGroups[id]; 
    map.removeLayer(lg); 
} 
1

GeoJSONaddData विधि में, पहली जांच यह है कि डेटा सुविधाओं का संग्रह है, इस मामले में विधि प्रत्येक सुविधा के लिए बुलाया जाता है।

फिर फ़िल्टर इस प्रकार लागू किया जाता है:

var options = this.options; 
if (options.filter && !options.filter(geojson)) { return; } 

तो अगर फिल्टर डेटा जब आप इसे जोड़ने के बाहर फिल्टर, यह संग्रहीत नहीं करता है या कहीं भी याद किया। फ़िल्टर को बदलने से डेटा अचानक प्रकट नहीं होगा।

आप जोजसन का संदर्भ रख सकते हैं और जब आप फ़िल्टर बदलते हैं तो परत को फिर से शुरू कर सकते हैं।

+0

धन्यवाद, परत माध्य addLayer/removeLayer को फिर से शुरू करता है? – dani

+0

मुझे संदेह है कि आप 'प्रारंभिक (newgeojson, विकल्प)' भी कॉल कर सकते हैं, लेकिन मैंने इसे आजमाया नहीं है। हटाने और जोड़ने के लिए निश्चित रूप से काम करेंगे। – flup

+0

असल में 'map.removeLayer (gj)' तो 'map.addLayer (gj)' काम नहीं करता है। –

0

नीचे उदाहरण देखें, आपके पास नक्शा और एक MyBus परत है।

map.removeLayer(myBus); 

...add your data edit something ... 

myBus.addTo(map); 
संबंधित मुद्दे