Я запускаю приложение 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.
Может ли кто-нибудь увидеть, сделал ли я ошибку, как ее исправить, или есть ли проблема с вычислениями Sedona?
Версии: Скала: 2.11 Искра: 2,4 Седона: 1.2.1-инкубационный jts-ядро: 1.19.0 геоинструменты-обертка: 1.1.0-25.2
Седона предполагает евклидову геометрию (т.е. плоскую плоскость для двумерных координат). Таким образом, он предоставляет азимут сетки, который является арктангенсом разницы координат (также внесены некоторые корректировки, чтобы не иметь отрицательных результатов):
ST_AZIMUTH(ST_POINT(9.942731, 57.042649), ST_POINT(9.940315, 57.04348)) == ATAN2(57.04348 - 57.042649, 9.940315 - 9.942731)
Размещенный вами справочный веб-сайт вычисляет геодезический азимут (с идеальной сферой). Эта функциональность в настоящее время не предоставляется в Sedona.
Чтобы ответить на ваши вопросы:
Кроме того, вот ссылка с некоторыми хорошими иллюстрациями разницы между геодезическим азимутом и азимутом сетки: https://www.e-education.psu.edu/geog862/node/1816
Спасибо за ваше объяснение! Это имеет смысл. Я попытаюсь найти другой модуль, который может выполнять нужные мне вычисления.