确定一个点是否在GEOJSON多边形的某个距离内的最佳方法是什么?应该使用TurfJS缓冲方法(https://github.com/Turfjs/turf-buffer#turf-buffer)吗? 可以对缓冲的多边形执行查询吗?
我很清楚,我们可以通过TurfJS的内部方法(https://github.com/Turfjs/turf-inside)确定一个点是否在多边形内。我只是好奇最好的方法是找出一个点是否在缓冲多边形内部。
例如: 我有许多作为GEOJSON多边形文件提供的邻域。我还有一组员工的位置/地址(已经地理编码为纬度/经度坐标)。看看我的员工是否住在给定邻域多边形10英里范围内的最佳方法是什么?
谢谢!
答案 0 :(得分:3)
是的,您可以将缓冲区与内部结合使用,以找到距其他地方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树类型索引,它将首先检查边界框交叉点,并避免多边形操作中的许多不必要的点。 turfjs,在我看到你的帖子之前我没有听说过,在引擎盖下使用jsts进行了许多操作,包括缓冲。该库具有您可能使用的R树索引的实现。这是一个有趣的example。
通常,在您具有空间(R树类型)索引的情况下,例如Postgres之上的Postgis等空间启用的数据库,您将使用类似ST_Dwithin的运算符(geom1,geom2,distance)在where子句中找到另一个几何体的某个距离内的所有点,这将非常有效,因为许多候选者因初始边界框测试失败而被拒绝。
实际上,这取决于您的数据大小和查询频率。原则上,在缓冲区中包含查询时没有任何错误。我希望我没有创造更多问题而不是答案。
答案 1 :(得分:0)
我正在使用GeoScript在JavaScript中进行这种计算。它在geom.Geometry类中有一个distance
方法,可以返回两个几何之间的最小距离。你可以使用它,或者在GitHub上查看the source,看看如果你想推出自己的解决方案,他们会怎么做。