Я хотел бы заполнить слой 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 Layer
//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);