Javascript: 高效发现两个GeoJSON特征是否重叠?
Javascript: Efficiently find whether two GeoJSON features overlap?
我需要构建一个 JavaScript 函数,它将两个 GeoJSON 特征作为输入:特征 A 将是一个多边形或圆形;要素 B 将是点、多边形、圆或椭圆。
函数应该return,尽可能快速高效,无论是B "touches" A任何方式(它们是否重叠,一个是否包含在另一个中,例如)
极度精确并不重要(即我不关心由地球曲率等引起的问题);我也不需要知道关于如何这两个功能相互接触的任何细节,只是关于它们是否相互接触的布尔值 TRUE 或 FALSE。
如果有一个需要模块的好解决方案,那很好——唯一重要的是实际功能尽可能快。例如。看起来 Turf 可以做到这一点,但需要执行一些单独的功能(相交、包含等),其中一些功能过于繁重。
幸运的是,有一个 JTS 的脚本端口(Java 拓扑套件)- 空间谓词和函数库,用于处理符合简单特征规范(来自开放地理空间联盟的标准)的几何)
它的名字是 JSTS(包括 GeoJSON 支持)
https://github.com/bjornharrtell/jsts
- 典型例子:
A 和 B 的交叉点
var intersection = a.intersection(b)
A 和 B 的区别
var difference = a.difference(b)
A 和 B 的结合
var union = a.union(b)
检查所有用例的测试套件,包括 Point in Polygon 测试
https://github.com/bjornharrtell/jsts/tree/master/test
另外,与Openlayers集成的可视化示例(附源代码):
https://openlayers.org/en/master/examples/jsts.html
编辑 1:
如果您只需要一个功能,可以这样做:
var intersection = (a.intersection(b) !== null) ? true : false;
我需要构建一个 JavaScript 函数,它将两个 GeoJSON 特征作为输入:特征 A 将是一个多边形或圆形;要素 B 将是点、多边形、圆或椭圆。
函数应该return,尽可能快速高效,无论是B "touches" A任何方式(它们是否重叠,一个是否包含在另一个中,例如)
极度精确并不重要(即我不关心由地球曲率等引起的问题);我也不需要知道关于如何这两个功能相互接触的任何细节,只是关于它们是否相互接触的布尔值 TRUE 或 FALSE。
如果有一个需要模块的好解决方案,那很好——唯一重要的是实际功能尽可能快。例如。看起来 Turf 可以做到这一点,但需要执行一些单独的功能(相交、包含等),其中一些功能过于繁重。
幸运的是,有一个 JTS 的脚本端口(Java 拓扑套件)- 空间谓词和函数库,用于处理符合简单特征规范(来自开放地理空间联盟的标准)的几何)
它的名字是 JSTS(包括 GeoJSON 支持)
https://github.com/bjornharrtell/jsts
- 典型例子:
A 和 B 的交叉点
var intersection = a.intersection(b)
A 和 B 的区别
var difference = a.difference(b)
A 和 B 的结合
var union = a.union(b)
检查所有用例的测试套件,包括 Point in Polygon 测试 https://github.com/bjornharrtell/jsts/tree/master/test
另外,与Openlayers集成的可视化示例(附源代码): https://openlayers.org/en/master/examples/jsts.html
编辑 1:
如果您只需要一个功能,可以这样做:
var intersection = (a.intersection(b) !== null) ? true : false;