1

确定一个点是否在 GEOJSON 多边形的一定距离内的最佳方法是什么?是否应该使用 TurfJS 缓冲方法(https://github.com/Turfjs/turf-buffer#turf-buffer)?可以对缓冲多边形执行查询吗?

我很清楚可以使用 TurfJS 的内部方法 ( https://github.com/Turfjs/turf-inside ) 来确定一个点是否在多边形内。我只是好奇找出一个点是否在缓冲多边形内的最佳方法是什么。

例如:我有一些作为 GEOJSON 多边形文件提供的社区。我还有一组员工的位置/地址(已经地理编码为纬度/经度坐标)。查看我的员工是否居住在给定邻域多边形 10 英里范围内的最佳方法是什么?

谢谢!

4

2 回答 2

3

是的,您可以将 buffer 与 inside 结合使用来查找距离其他东西 10 英里内的点,例如,扩展现有示例,

var pt = point(14.616599, -90.548630)
var unit = 'miles'
var buffered = buffer(pt, 10, unit)
var ptTest = point(-1, 52)
var bIn = inside (ptIn, buffer)

这显然应该是错误的。

不过,一般来说,缓冲有点昂贵,因此您不一定希望每次运行查询时都这样做。您可以做几件事来加快速度:

1)。预缓冲您的搜索区域

2)。使用某种 R-tree 类型的索引,它会首先检查边界框的相交,并避免在多边形操作中出现大量不必要的点。turfjs,在看到你的帖子之前我才听说过,它在后台使用jsts进行许多操作,包括缓冲。这个库有一个你可能使用的 R-tree 索引的实现。这是一个有趣的例子

通常,在您有空间(R-tree 类型)索引的情况下,例如 Postgres 之上的 Postgis 等启用空间的数据库,您将在 where 中使用类似 ST_Dwithin (geom1, geom2, distance)子句找到另一个几何体一定距离内的所有点,这将非常有效,因为许多候选者会因初始边界框测试失败而被拒绝。

实际上,这取决于您的数据大小和查询频率。原则上,对缓冲区执行包含查询没有任何问题。我希望我没有创造出比答案更多的问题。

于 2014-12-09T09:23:03.660 回答
1

我正在使用GeoScript在 JavaScript 中进行此类计算。它在geom.Geometrydistance类中有一个方法,可以返回两个几何图形之间的最小距离。如果您想推出自己的解决方案,您可以使用它,或者查看GitHub 上的源代码,看看他们是如何做到的。

于 2014-12-08T20:01:07.423 回答