F.18. earthdistance#
F.18. earthdistance
Модуль earthdistance
предоставляет два различных подхода к вычислению расстояний по великому кругу на поверхности Земли. Первый подход зависит от модуля cube
. Второй подход основан на встроенном типе данных point
, использующем долготу и широту в качестве координат.
В этом модуле предполагается, что Земля является идеально сферической. (Если это слишком неточно для вас, вы можете обратить внимание на проект PostGIS .)
Модуль cube
должен быть установлен
перед установкой earthdistance
(хотя вы можете использовать опцию CASCADE
команды CREATE EXTENSION
для установки обоих модулей одной командой).
Предостережение
Рекомендуется установить earthdistance
и cube
в одной схеме, для которой не предоставлены и не будут предоставлены права CREATE ненадежным пользователям.
В противном случае возникают угрозы безопасности при установке, если схема earthdistance
содержит объекты, определенные враждебным пользователем.
Кроме того, при использовании функций earthdistance
после установки, весь поисковый путь должен содержать только доверенные схемы.
F.18.1. Расстояния на основе кубов Земли
Данные хранятся в кубах, которые являются точками (оба угла совпадают) с использованием 3 координат, представляющих расстояние по x, y и z от центра Земли. Предоставляется домен
earth
над типом cube
, который включает проверки ограничений, что значение соответствует этим ограничениям и находится достаточно близко к фактической поверхности Земли.
Радиус Земли получается из функции earth()
. Он указан в метрах. Но, изменив только эту функцию, вы можете изменить модуль для использования других единиц измерения или другого значения радиуса, которое вам кажется более подходящим.
Этот пакет имеет применение к астрономическим базам данных.
Астрономы, вероятно, захотят изменить функцию earth()
, чтобы она возвращала
радиус 180/pi()
, чтобы расстояния были в градусах.
Функции предоставляются для поддержки ввода широты и долготы (в градусах), для поддержки вывода широты и долготы, для вычисления расстояния по большому кругу между двумя точками и для удобного указания ограничивающего прямоугольника, который можно использовать для поиска по индексу.
Все предоставленные функции показаны в Таблица F.5.
Таблица F.5. Функции на основе кубов для определения расстояния между точками на Земле
F.18.2. Расстояния на основе точек на Земле
Вторая часть модуля основана на представлении местоположений на Земле в виде значений типа point
, в котором первый компонент представляет собой долготу в градусах, а второй компонент - широту в градусах. Точки представляются в виде (долгота, широта), а не наоборот, потому что долгота ближе к интуитивной идее оси x, а широта - к оси y.
Вам предоставляется только один оператор, показанный в Таблица F.6.
Таблица F.6. Операторы на основе точек для расстояния между земными точками
Оператор Описание |
---|
Вычисляет расстояние в морских милях между двумя точками на поверхности Земли. |
Обратите внимание, что в отличие от части модуля, основанной на типе cube
, здесь единицы измерения зашиты жестко: изменение функции earth()
не повлияет на результаты этого оператора.
Одним из недостатков представления долготы/широты является необходимость быть осторожным с граничными условиями около полюсов и около +/- 180 градусов долготы. Представление на основе куба
избегает этих разрывов.