Javascript:高效地发现两个 GeoJSON 特征是否重叠?

标签 javascript node.js geospatial geojson

我需要构建一个 JavaScript 函数,它将两个 GeoJSON 特征作为输入:特征 A 将是多边形或圆;特征 B 将是点、多边形、圆或椭圆。

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

极度精确并不重要(即我不关心由地球曲率等引起的问题);我也不需要知道关于这两个特征如何相互接触的任何细节,只需知道它们是否相互接触的 bool 值 TRUE 或 FALSE。

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

最佳答案

幸运的是,有一个 JTS(Java 拓扑套件)的 JavaScript 端口 - 空间谓词和函数库,用于处理符合简单特征规范(开放地理空间联盟的标准)的几何图形

它的名字是 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 特征是否重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55543002/

相关文章:

mysql - 哪个函数可以很好地检查给定的纬度和经度是否在多边形内部?

r - 计算 SpatialPolygon 内/内部的质心

javascript - 从内部获取函数名称

javascript - 如何使用 jQuery 并行处理动态添加的脚本标签

javascript - jQuery remove() 或 after() 导致空格被删除

node.js - 基于带有值的动态日期键的 Mongoose 过滤器

javascript - 我无法在 Node 中使用 Promise 读取流

node.js - Firebase 功能 - 错误,但控制台中没有事件消息

javascript - Angular 链接 AJAX 调用

postgresql - PostGIS SQL 从一组具有不同 ID 的点生成单独的线段