在Spark中使用Apache Sedona计算地理坐标的方位错误



我正在运行一个Spark应用程序,使用Apache Sedona。

我试图计算两个坐标之间的方位,使用以下脚本:

import org.apache.sedona.sql.utils.SedonaSQLRegistrator
SedonaSQLRegistrator.registerAll(spark)
spark.sql("SELECT DEGREES(ST_AZIMUTH(ST_POINT(9.942731, 57.042649), ST_POINT(9.940315, 57.04348))) AS azimuth").show

产生288度:

scala> spark.sql("SELECT DEGREES(ST_AZIMUTH(ST_POINT(9.942731, 57.042649), ST_POINT(9.940315, 57.04348))) AS azimuth").show
+-----------------+
|          azimuth|
+-----------------+
|288.9810116333513|
+-----------------+

问题是,当我尝试使用几个在线工具(例如https://www.sunearthtools.com/tools/distance.php)验证轴承时,它们都将角度计算为302度。所有的网络工具都同意,我猜Sedona计算的角度错了。

所以,我期望结果是302度,但得到288。

谁能看到如果我犯了一个错误,如何修复它,或者如果有一个问题与塞多娜的计算?

版本:Scala: 2.11火花:2.4塞多纳:1.2.1-incubatingjts-core: 1.19.0geotools-wrapper: 1.1.0-25.2

Sedona假设欧几里德几何(即二维坐标的平面)。因此,它提供了网格方位角,即坐标差的反正切(也进行了一些调整,以避免产生负面结果):

ST_AZIMUTH(ST_POINT(9.942731, 57.042649), ST_POINT(9.940315, 57.04348)) == ATAN2(57.04348 - 57.042649, 9.940315 - 9.942731)

你发布的参考网站计算大地方位角(与一个完美的球体)。该功能目前在Sedona中没有提供。

:

  1. 你可能犯的唯一错误是大地测量方位角和网格方位角的比较。
  2. 您可以从您提供的链接实现大地测量计算。会很混乱,但是很简单。我可能会分阶段进行:首先为X和Y创建列,然后进行最后的计算。我看Sedona的计算没有问题。这是最近一次提交时的当前计算方法:link

此外,这里有一个参考,有一些很好的插图说明大地测量和网格方位角之间的区别:https://www.e-education.psu.edu/geog862/node/1816

相关内容

  • 没有找到相关文章

最新更新