如何解决在反应中过滤geojson的最佳方法?
我希望过滤 geojson 像这样,通过向它提供与我要过滤的特定属性相对应的 id 数组。我正在使用 React 和传单,基本上想过滤掉我的地图。
所以假设在我上面链接的 geojson 中有一系列多边形。我想使用以下索引 let ids = [0,1,5,6]
进行过滤,以便仅显示具有该 ID(在本例中为 object_id)的多边形。不知道如何处理这个。我试图使用传单提供的 geojson 过滤器功能,但不确定如何实现。以下是我迄今为止基于此 post 的内容:
import L from 'react-leaflet';
geoFilter = (feature,id) => {
if (feature.properties.index_right === id) return true;
};
//FILTER GEOJSON
sliceGeo = async () => {
let ids = [0,6];
ids.map(id => {
//FOR EACH INDEX ITEM FILTER
let data = L.geoJson(myJson,{ filter: sliceGeo((id = id)) }).addTo(map);
return data;
});
};
我想我这样做的方式可能非常低效且不正确,所以希望有人能将我推向正确的方向。
解决方法
制作返回过滤器函数的函数是很好的。像这样:
const filterByIds = (ids) => {
return futures => ids.every(id => feature.properties.index_right === id)
}
此函数接受一个 ID 数组,并返回专门用于 ID 的过滤器函数。例如,给予 [1,2,3]
,返回 features => [1,3].every(id => feature.properties.index_right === id
。此过滤器函数检查 includes index_right
中是否有 [1,3]
。
添加:
我检查并发现了更多有用的功能。
const filterByIds = (ids) => {
return futures => ids.includes(feature.properties.index_right)
}
用法:
const ids = [0,1,5,6];
const data = L.geoJson(myJson,{ filter: filterByIds(ids) }).addTo(map);
Filter 接受函数所以倾向于认为应该给它去掉括号,但如果函数返回函数,通常用括号调用函数。上面是这样。
,试试这个:
let ids = [0,6];
geoFilter = (feature) => {
return ids.includes(feature.properties.index_right)
};
L.geoJson(myJson,{ filter: geoFilter }).addTo(map);
geoJson 过滤器选项需要一个带有一个参数(特征)的函数,我用 Array.prototype includes() 函数更改您的回调,如果 ids 数组包含 feature.properties.index_right 则返回 true。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。