查找 LineString 与 turfjs 中的多边形边界相交的坐标

Find co-ordinates where LineString intersects a Polygon border in turfjs

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

有很多方法可以判断一个点是否在多边形内,还有很多方法可以判断一个点是否在一条直线上等等,但我似乎想不出一个办法问"at what point does this line intersect this polygon's border".

我可以使用线相交算法枚举多边形中的点来找到那个点,但我想知道是否有更多 "turf" 方法来做到这一点。

对于上下文,我已经加载了一个 GPX 轨道并想要估计轨道 enters/exits 定义区域的 location/time。

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

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

你可以:

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

确实不优雅。 :)

编辑

试过了。结果表明,如果其中一个多边形的面积为零,则 Turf-intersect 不会 return 相交。

最终,turfjs 似乎没有 API 来执行此操作。

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