earthdistance. Вычисление расстояния между точками на поверхности Земли#
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты:
cube.Схема размещения:
ext.
Модуль реализует два разных варианта вычисления ортодромии:
первый вариант зависит от модуля
cube;второй вариант основан на встроенном типе данных
point, в котором в качестве координат задаются широта и долгота.
Примечание:
Ортодромия – расстояние между точками на поверхности Земли, кратчайшее расстояние между двумя точками на поверхности земного шара, наименьший из отрезков дуги большого круга, проходящей через эти точки.
В этом модуле планета Земля считается идеальной сферой.
В модуле реализованы функции земных расстояний по кубам:
для ввода данных, выражающих широту и долготу в градусах;
для вывода ширины и долготы, для вычисления ортодромии между двумя точками и простого указания окружающего прямоугольника, что полезно для поиска по индексу.
Предоставляемые функции:
Функция |
Результат |
Описание |
|---|---|---|
|
|
Возвращает предполагаемый радиус Земли в метрах |
|
|
Переводит расстояние по обычной прямой (по секущей) между двумя точками на поверхности Земли в расстояние между ними по сфере |
|
|
Переводит расстояние по сфере между двумя точками на поверхности Земли в расстояние по обычной прямой (по секущей) между ними |
|
|
Возвращает положение точки на поверхности Земли по заданной широте (первый аргумент) и долготе (второй аргумент) в градусах |
|
|
Возвращает широту точки на поверхности Земли в градусах |
|
|
Возвращает долготу точки на поверхности Земли в градусах |
|
|
Возвращает расстояние по сфере между двумя точками на поверхности Земли |
|
|
Выдает охватывающий куб, подходящий для поиска по индексу с применением реализованного для типа |
В модуле реализованы операторы земных расстояний по точкам.
Эта часть модуля основана на представлении точек на Земле в виде значений типа point, в которых первый компонент представляет долготу в градусах, а второй — широту. Точки воспринимаются как (долгота, широта), а не наоборот, так как долгота ближе к интуитивному представлению как оси X, а широта — оси Y.
В модуле реализован один оператор:
Оператор |
Результат |
Описание |
|---|---|---|
|
|
Вычисляет расстояние в сухопутных милях между точками на поверхности Земли |
Изменение функции earth() не повлияет на результат этого оператора.
Доработка#
Доработка не проводилась.
Ограничения#
Ограничения отсутствуют.
Установка#
При наличии прав администратора СУБД включение модуля возможно выполнить вручную:
CREATE EXTENSION earthdistance CASCADE SCHEMA ext;
Расширения earthdistance и cube настоятельно рекомендуется устанавливать в одну схему. В этой схеме недоверенные пользователи не должны иметь право CREATE. Если в схеме окажутся объекты, созданные злонамеренным пользователем, возможна угроза безопасности.
При использовании функции earthdistance следует ограничивать путь поиска только доверенными схемами.
Настройка#
Настройка не требуется.
Использование модуля#
Функция earth_distance расчета расстояния между двумя точками земли, с функцией ll_to_earth определением координат при помощи широты и долготы:
SELECT earth_distance(ll_to_earth(39.9042, 116.4074), ll_to_earth(31.2304, 121.4737)) AS distance_meters;
Пример вывода:
distance_meters
-----------------
1067260
(1 row)
Ссылки на документацию разработчика#
Дополнительно поставляемый модуль earthdistance: https://www.postgresql.org/docs/15/earthdistance.html.