Javascript:有效查找两个GeoJSON功能是否重叠?

时间:2019-04-05 20:35:47

标签: javascript node.js geospatial geojson

我需要构建一个JavaScript函数,该函数接受两个GeoJSON功能作为输入:功能 A 是多边形或圆形;功能 B 将是点,多边形,圆形或椭圆形。

该功能应尽可能快而有效地返回 B 是否以任何方式“触摸” A (它们是否重叠,一个是否包含在另一个中) ,例如)

极端精度并不重要(也就是说,我不在乎地球曲率引起的问题);我也不需要知道有关两个功能如何相互联系的任何详细信息,只需将布尔值确定为TRUE或FALSE即可。

如果有一个好的解决方案需要一个模块,那就太好了-唯一重要的是实际功能要尽可能地快。例如。看起来Turf可以做到这一点,但需要执行一些单独的功能(相交,包含等),其中一些功能过于繁重。

1 个答案:

答案 0 :(得分:1)

幸运的是,这里有一个JavaScript门户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)

检查测试套件的所有用例,包括“多边形中的点”测试 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;