2013-04-22 68 views
12

我想用數據填充GeoJson圖層,然後動態地過濾要顯示的功能。宣傳單:更新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; } 

因此,如果過濾器過濾掉當你添加它的數據,它不會存儲或任何記憶。更改過濾器不會使數據突然重新出現。

您可以保留對geojson的引用,並在更改過濾器時重新初始化圖層。

+0

謝謝,是不是重新初始化圖層意味着addLayer/removeLayer? – dani 2013-04-22 19:22:26

+0

我懷疑你也可以調用'initialize(newgeojson,options)',但是我還沒有嘗試過。刪除和添加將可以正常工作。 – flup 2013-04-22 20:03:16

+0

實際上'map.removeLayer(gj)'然後'map.addLayer(gj)'不起作用。 – 2016-09-16 05:37:26

0

查看下面的示例,您有一張地圖和一個myBus圖層。

map.removeLayer(myBus); 

...add your data edit something ... 

myBus.addTo(map);