我想用数据填充GeoJSON的层,然后动态过滤哪些功能显示。
我已经得到了过滤功能工作,但我不知道如何来更换过滤器,然后刷新层。
有什么办法我已经添加了数据后,我可以更新过滤器?
我想用数据填充GeoJSON的层,然后动态过滤哪些功能显示。
我已经得到了过滤功能工作,但我不知道如何来更换过滤器,然后刷新层。
有什么办法我已经添加了数据后,我可以更新过滤器?
我通过将每个要素类型的不同做这个图层组基于特征的属性。 例如
以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);
}
在以GeoJSON addData
方法中,第一检查是如果数据是的特征的集合,在这种情况下,该方法被调用用于每个功能。
然后,将滤波器应用于如下:
var options = this.options;
if (options.filter && !options.filter(geojson)) { return; }
因此,如果过滤器过滤掉当你添加它的数据,它不会存储或任何记忆。 更换过滤器将不会使数据重新出现突然。
你可以保持一个参考GeoJSON的,当你更换过滤器重新初始化层。
见下面的例子,你有一张地图和一个myBus层。
map.removeLayer(myBus);
...add your data edit something ...
myBus.addTo(map);