Геопространственные функции

GEODIST()

Функция GEODIST(lat1, lon1, lat2, lon2, [...]) вычисляет геосферное расстояние между двумя точками, заданными их координатами. Обратите внимание, что по умолчанию и широты, и долготы должны быть в радианах, а результат будет в метрах. Для любых из четырёх координат можно использовать произвольные выражения. Оптимальный путь будет выбран, если одна пара аргументов напрямую ссылается на пару атрибутов, а другая — является константой.

GEODIST() также принимает необязательный 5-й аргумент, позволяющий легко конвертировать между входными и выходными единицами и выбирать конкретную формулу георасстояния. Полный синтаксис и несколько примеров приведены ниже:

GEODIST(lat1, lon1, lat2, lon2, { option=value, ... })
GEODIST(40.7643929, -73.9997683, 40.7642578, -73.9994565, {in=degrees, out=feet})
GEODIST(51.50, -0.12, 29.98, 31.13, {in=deg, out=mi})

Известные опции и их значения:

  • in = {deg | degrees | rad | radians}, задаёт входные единицы;
  • out = {m | meters | km | kilometers | ft | feet | mi | miles | yd | yards | in | inch | cm | centimeters | mm | millimeters | NM | nmi | nauticalmiles}, задаёт выходные единицы;
  • method = {adaptive | haversine}, задаёт метод вычисления георасстояния.

Метод по умолчанию — "adaptive". Это хорошо оптимизированная реализация, которая во всех случаях точнее и значительно быстрее, чем "haversine".

GEOPOLY2D()

GEOPOLY2D(lat1,lon1,lat2,lon2,lat3,lon3...) создаёт полигон для использования с функцией CONTAINS(). Эта функция учитывает кривизну Земли, разбивая полигон на более мелкие, и должна использоваться для больших территорий. Для небольших областей можно использовать функцию POLY2D(). Функция ожидает пары координат широты/долготы в градусах; если используются радианы, результат будет таким же, как у POLY2D().

POLY2D()

POLY2D(x1,y1,x2,y2,x3,y3...) создаёт полигон для использования с функцией CONTAINS(). Этот полигон предполагает плоскую Землю, поэтому он не должен быть слишком большим; для больших территорий следует использовать функцию GEOPOLY2D(), которая учитывает кривизну Земли.

Last modified: August 28, 2025