我想用數據填充GeoJson圖層,然後動態地過濾要顯示的功能。宣傳單:更新GeoJson過濾器?
我已經獲得了過濾功能,但我不知道如何更改過濾器,然後刷新圖層。
有沒有什麼辦法可以在我添加數據後更新過濾器?
我想用數據填充GeoJson圖層,然後動態地過濾要顯示的功能。宣傳單:更新GeoJson過濾器?
我已經獲得了過濾功能,但我不知道如何更改過濾器,然後刷新圖層。
有沒有什麼辦法可以在我添加數據後更新過濾器?
我通過將每個要素類型添加到基於特徵屬性的不同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);
}
在GeoJSONaddData
方法中,第一個檢查是數據是否是一個要素集合,在這種情況下,將爲每個要素調用該方法。
然後將過濾器應用於如下:
var options = this.options;
if (options.filter && !options.filter(geojson)) { return; }
因此,如果過濾器過濾掉當你添加它的數據,它不會存儲或任何記憶。更改過濾器不會使數據突然重新出現。
您可以保留對geojson的引用,並在更改過濾器時重新初始化圖層。
查看下面的示例,您有一張地圖和一個myBus圖層。
map.removeLayer(myBus);
...add your data edit something ...
myBus.addTo(map);
謝謝,是不是重新初始化圖層意味着addLayer/removeLayer? – dani 2013-04-22 19:22:26
我懷疑你也可以調用'initialize(newgeojson,options)',但是我還沒有嘗試過。刪除和添加將可以正常工作。 – flup 2013-04-22 20:03:16
實際上'map.removeLayer(gj)'然後'map.addLayer(gj)'不起作用。 – 2016-09-16 05:37:26