3

Turfjs 中有没有办法确定 LineString 与多边形边界相交的坐标?

有很多方法可以找出一个点是否在多边形内,还有很多方法可以找出一个点是否在一条线上等等,但我似乎无法找到一种方法来询问“在什么位置点这条线是否与这个多边形的边界相交"

我可以使用线相交算法枚举多边形中的点以找到该点,但我想知道是否有更“草皮”的方式来做到这一点。

对于上下文,我已经加载了 GPX 轨道,并希望估计轨道进入/离开定义区域的位置/时间。

由于 GPX 轨道仅以特定间隔记录位置,因此通常情况下,在时间 tN 记录的 pN 在区域外,而在时间 tN+1 记录的 pN+1 在区域内。如果我能得到线 (pN, pN+1) 与多边形边界相交的点,我可以估计轨道穿过多边形的确切时间。

4

2 回答 2

2

最终,turfjs 似乎没有用于执行此操作的 API。

通过从 GeoJSON 对象枚举多边形中的点来构造一系列线段,我能够得到我想要的答案,然后我使用maxogden/geojson-js-utils linesIntersect函数来测试交叉点。

于 2015-11-17T16:14:02.667 回答
0

我没有看到完全可以做到这一点的 Turf 函数,但是有intersect,它可以找到两个多边形之间的相交区域。

你可以:

  1. 通过将线连接到自身反转来构造多边形(因此 ABC 变为 ABCBA)
  2. 使用 Intersect找到ABCBA 和 P(原始多边形)的交点
  3. 交点应该是一个面积为零的多边形,它是 P 内 ABCBA 的一部分。以某种方式计算它的长度(奇怪的是没有周长函数)。
  4. 从ABC的原始长度中减去该长度。

不完全优雅,真的。:)

编辑

试过这个。事实证明,如果其中一个多边形的面积为零,则 Turf-intersect 不会返回交点。

于 2015-11-11T10:47:19.110 回答