单张:更新GeoJSON的过滤器?(Leaflet: Update GeoJson filter?)

2019-08-31 18:54发布

我想用数据填充GeoJSON的层,然后动态过滤哪些功能显示。

我已经得到了过滤功能工作,但我不知道如何来更换过滤器,然后刷新层。

有什么办法我已经添加了数据后,我可以更新过滤器?

Answer 1:

我通过将每个要素类型的不同做这个图层组基于特征的属性。 例如

以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);   
}


Answer 2:

在以GeoJSON addData方法中,第一检查是如果数据是的特征的集合,在这种情况下,该方法被调用用于每个功能。

然后,将滤波器应用于如下:

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

因此,如果过滤器过滤掉当你添加它的数据,它不会存储或任何记忆。 更换过滤器将不会使数据重新出现突然。

你可以保持一个参考GeoJSON的,当你更换过滤器重新初始化层。



Answer 3:

见下面的例子,你有一张地图和一个myBus层。

map.removeLayer(myBus);

...add your data edit something ...

myBus.addTo(map);


文章来源: Leaflet: Update GeoJson filter?