使用turf.js与周围的测地线字符串不匹配来绘制线弧

时间:2018-10-04 09:25:30

标签: google-maps geospatial gml turfjs

背景

我们提供了一些AIXM数据(基于XML的GML超集),该数据将GeodesicStrings(坐标列表)和ArcByCentrePoints(具有半径,起始方位角和端轴承)。我们正在获取这些数据,并将其转换为简单的坐标列表,然后使用Google地图折线显示。

问题

当我们绘制带有弧形的形状时,弧的起点和终点通常 与前一条线的终点和后一条线的起点不匹配。看起来径向距离超出了与半径不成比例的数量。参见屏幕截图:有趣的是,顶部的较小弧似乎很好,但内插图却较大。

Bad arc

我们非常确定数据是正确的,因为当使用第三方工具对其进行可视化时,它看起来不错,所以我们做错了。

实施

我们正在使用 turf.js 库,通过其lineArc函数将弧描述转换为一组点。在内部使用了destination函数,该函数“使用Haversine公式解释整体曲率” 。我们以正确的顺序将这些生成的点与直接从先前和后续GeodesicString元素中获取的点进行组合,以提供最终多边形。

数据

帮助!

我知道此问题仅取决于代码,但我希望我已充分描述了该问题,并且某个具有比我更多(> 0)的GIS知识的友善的人可能会指出正确的方向。谢谢:)

1 个答案:

答案 0 :(得分:0)

我已经给出了一些有关调试的演示,我说的一件事是,您应该保持开放的态度,并且不要过于关注可能的错误原因,因为这会浪费很多时间追踪错误的线索。

在这种情况下,我没有接受我的建议。我被这样的想法深深地迷住了:问题源于复杂的原因,例如Haversine公式的实施问题,以至于我忽略了更简单的答案。我的代码是使用半径的字符串表示形式,包括单位(例如海里或米),并将其转换为公里。可悲的是,我使用的是 parseInt 而不是 parseFloat ,因此立即失去了精度。就这么简单-一个小学生错误。

非常感谢Turf JS的维护者Stefano Borghi在此方面的所有帮助,并帮助我看到了树木的木材。