找到LineString与turfjs中的Polygon边框相交的坐标

时间:2015-11-10 11:53:05

标签: leaflet mapbox turfjs

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

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

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

对于上下文,我已经加载了GPX曲目,并且想要估计曲目进入/退出定义区域的位置/时间。

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

2 个答案:

答案 0 :(得分:2)

最终,turfjs似乎没有这样做的API。

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

答案 1 :(得分:0)

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

你可以:

  1. 通过将线连接到自身反转构造多边形(因此ABC变为ABCBA)
  2. 使用Intersect找到ABCBA和P的intersection,原始多边形。
  3. 交叉点应该是零区域多边形,它是ABC内部的ABC的一部分。不知何故计算它的长度(奇怪的是没有周边函数)。
  4. 从ABC的original length中减去该长度。
  5. 不完全优雅,真实。 :)

    修改

    试过这个。如果其中一个多边形为零区域,则Turf-intersect不会返回交叉点。