如何按坐标过滤 GeoJSON/TopoJSON 数据?

Posted

技术标签:

【中文标题】如何按坐标过滤 GeoJSON/TopoJSON 数据?【英文标题】:How do I filter GeoJSON/TopoJSON data by coordinates? 【发布时间】:2017-06-29 14:58:58 【问题描述】:

我有包含 GeoJSON/TopoJSON 数据的大文件(每个约 100mb)。

这些有州和县的边界。状态层加载得很好,因为它没有太多数据,但是带有县的层只会使 Chrome 中的页面崩溃。

因此,文件本身从网络加载并被正确解析,但是当将它们放在 Leaflet 地图上时,它会冻结并崩溃。

作为一种解决方案,我想知道是否可以按坐标过滤特征? 我可以获取地图的视口边界。

有什么方法可以过滤坐标在某些边界内的特征吗?

这样我可以只过滤那些应该在当前视图中渲染的内容并忽略其余部分,然后在地图/缩放上重复这个例程。

【问题讨论】:

我使用TufJSGeoJSON 进行所有地理空间计算。查看inside 函数:turfjs.org/docs/#inside 【参考方案1】:

首先,Leaflet 有一个 getBounds() 方法,您可以使用它来仅加载边界框内的特征。这可以通过使用 moveend 事件在地图“移动”(缩放、拖动)时触发 getBounds() 方法来完成。

所以,基本上:

map.on('moveend', function() 
map.getBounds()
//erase the features you had on the map
//Then load on the map only the features with coordinates inside the Bounging Box. 

当然,以上只是一种方法。每次地图“移动”时,以前的特征都会被删除并加载新的特征。这可能会导致功能加载缓慢,但您可能不得不忍受这么大的文件。

此外,您可以通过例如加载新功能然后删除旧功能来试验代码。此外,您可以为比边界框更大的框加载特征。

【讨论】:

以上是关于如何按坐标过滤 GeoJSON/TopoJSON 数据?的主要内容,如果未能解决你的问题,请参考以下文章

mysql查询按多个坐标边界过滤

快速方法按距离搜索数百万个坐标

Qt5.5 如何在应用程序级别覆盖 MousePress 事件坐标

Django 仅使用 Sqlite 按距离过滤(无 GeoDjango、PostGres、MySQL、GIS)

WGS84 坐标中的聚类或过滤点

如何在本地反应中获取坐标并按城市名称放置标记?