我有一个geoJSON文件,如下所示:
var geoJSON=
{
"type":"FeatureCollection",
"features": [
{"type": "Feature","geometry":{"type":"LineString", "coordinates":[[102.463303,36.447488],[102.514114,36.439755]]},"properties": {"id":"01","points":9}},
{"type": "Feature","geometry":{"type":"LineString", "coordinates":[[102.593765,36.414341],[102.634964,36.402183]]},"properties": {"id":"02","points":8}},
{"type": "Feature","geometry":{"type":"LineString", "coordinates":[[102.880783,36.485038],[102.882156,36.561187]]},"properties":{"id":"03","points":10}}
........
and so on
]};
由此我想创建一个变量filtered_geoJSON,其中只有点> = 9可用,如下所示:
var filtered_geoJSON=
{
"type":"FeatureCollection",
"features": [
{"type": "Feature","geometry":{"type":"LineString", "coordinates":[[102.463303,36.447488],[102.514114,36.439755]]},"properties": {"id":"01","points":9}},
{"type": "Feature","geometry":{"type":"LineString", "coordinates":[[102.880783,36.485038],[102.882156,36.561187]]},"properties":{"id":"03","points":10}}
........
and so on
]};
因为每次我都更新每个Line String的点,如
geoJSON['features'][i]['properties']['points']=data[i].points;
因此,我希望每次都创建filtered_geoJSON变量并将其传递给
L.geoJson(filtered_geoJSON, {
style: style,
onEachFeature: onEachFeature
}).addTo(map);
所以我只画出点数> gt的点数。
所以我尝试了
var top_geoJSON={"type":"FeatureCollection","features": []};
var c=0;
for (i = 0; i<40000; i++) {
if(geoJSON['features'][i]['properties']['score']!=data[i].points){
links['features'][i]['properties']['score']=data[i].score;
}
if(geoJSON['features'][i]['properties']['points']>9){
filtered_geoJSON[c]=geoJSON['features'][i];
c++;
}
filtered_geoJSON在那里,但没有在地图中绘制线条。
感谢任何帮助。
答案 0 :(得分:2)
宣传单L.geoJSON
工厂有一个filter
选项,您可以使用它来提供整个geoJSON
数据,并让Leaflet只保留符合您指定条件的那些(即在你的情况下feature.properties.points >= 9
。
在您更新filtered_geoJSON
后重新构建您的points
变量时,您必须先构建一个新的L.geoJSON
,然后才能获得某些内容你的地图。
此外,即使直接更改geoJSON
数据,Leaflet也不会通过filter
再次对其进行评估,因此,如果某些功能低于9,或者某些新功能超出,则 >不会自动反映在地图上。
最简单的解决方案是删除以前创建的L.geoJSON
图层组,并使用更新的geoJSON
数据(以及相同的过滤器)构建一个新图层,以便Leaflet重新评估您的功能再次。
稍微复杂的解决方案是直接遍历L.geoJSON
图层组子图层(而不是原始的geoJSON
数据),通常使用eachLayer
,更新他们的{{1}在那里确定它现在应该隐藏还是显示回来。您最初需要创建feature.properties.points
图层组而不使用任何过滤器,并手动将子图层添加到地图/从地图中删除它们。当然,您也可以使用中间L.geoJSON
。