【发布时间】:2021-02-07 00:15:39
【问题描述】:
我希望答案不是太明显,但我对 Javascript 和 Leaflet 都很陌生。
我已经解决这个问题几天了。我有一个 geoJSON 文件,我已将它作为点图层添加到地图中——现在我想根据 OBJECTID 字段中的要素值是否显示在我定义的数组中来选择要显示的这些点的子集.
到目前为止,我已经能够通过将 OBJECTID 值硬编码到我的函数中来选择要显示的单个点,如下所示:
L.geoJSON(co_schools,{filter: schoolFilter}).addTo(mymap);
function schoolFilter (layer) {
if (layer.properties.OBJECTID===3955) return true;
};
如果我在函数内定义我的数组,我已经能够选择多个点来显示,就像这样:
L.geoJSON(co_schools,{filter: schoolFilter}).addTo(mymap);
function schoolFilter (layer) {
idlist = [3955, 5298, 5299];
for (i=0; i<idlist.length; i++) {
if (layer.properties.OBJECTID===idlist[i]) return true;
}
};
但是当我尝试将数组作为参数传递时出现以下错误:Uncaught TypeError: Cannot read property 'length' of undefined at Object.schoolFilter [as filter]
L.geoJSON(co_schools,{filter: schoolFilter}).addTo(mymap);
idlist = [3955, 5298, 5299];
schoolFilter(layer, idlist);
function schoolFilter (layer, list) {
for (i=0; i<list.length; i++) {
if (layer.properties.OBJECTID===list[i]) return true;
}
};
如果我在运行 L.geoJSON 命令(如下)之前定义数组,我可以传入该数组,但随后我收到以下错误消息:Cannot read property 'OBJECTID' of undefined at schoolFilter
function schoolFilter (layer, list) {
for (i=0; i<list.length; i++) {
console.log(list);
if (layer.properties.OBJECTID===list[i]) return true;
}
};
idlist = [3955, 5298, 5299];
L.geoJSON(co_schools,{filter: schoolFilter(co_schools, idlist)}).addTo(mymap);
我很乐意为您提供任何帮助或建议——谢谢!
【问题讨论】:
标签: javascript arrays function filter leaflet