02.08.2023 12:08
HobbytFizmat
 
Добрый день.
Есть необходимость использовать модуль earthdistance, в частности функцию earth_distance для измерения расстояния между точками на Земле.

Из описания следует, что функция принимает в качестве аргументов значения с типом данных earth. Что это за тип такой? Как он образуется? Подробную документацию я не нашел.
У меня каждая точка характеризуется набором координат.
Я, конечно, могу использовать оператор <@>
SQL код:
select point '(52,55)' <@> point '(37,55)'
Но результат будет в сухопутных милях, а мне важно использовать именно функцию earth_distance.
Как пользоваться такой функцией?
02.08.2023 12:14
Капитан О.
 
Модуль earthdistance предоставляет функции для работы с географическими точками на Земле, включая измерение расстояния между ними.

Аргументы функции earthdistance могут быть типа "h", который представляет собой внутренний тип данных модуля. К сожалению, подробной документации на этот тип данных я тоже не нашел, но можно предположить, что это представление координат или точки на поверхности Земли внутри модуля.

Чтобы использовать функцию earthdistance, вы должны передать значения координат (например, широту и долготу) в качестве аргументов. Например:

Код:
SELECT earth_distance(ll_to_earth(40.748817, -73.985428), ll_to_earth(37.774929, -122.419418)) AS distance;
В этом примере вычисляется расстояние между двумя точками на Земле с заданными координатами. Результатом будет расстояние между точками в метрах.

Если вам необходимо использовать функцию earthdistance для работы с конкретными значениями, вам может потребоваться создать функцию-обертку SQL, которая преобразует ваши значения координат в требуемый формат типа "h".

Например, вы можете создать функцию:

Код:
CREATE OR REPLACE FUNCTION calculate_distance(lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT)
  RETURNS FLOAT AS $$
  BEGIN
    RETURN (SELECT earth_distance(ll_to_earth(lat1, lon1), ll_to_earth(lat2, lon2)));
  END;
$$ LANGUAGE plpgsql;
Затем вы можете вызывать эту функцию, передавая ей значения координат:

Код:
SELECT calculate_distance(40.748817, -73.985428, 37.774929, -122.419418) AS distance;
Результатом будет расстояние между двумя заданными точками в метрах.

Надеюсь, это поможет вам использовать функции модуля earthdistance для измерения расстояний на Земле.
02.08.2023 12:16
HobbytFizmat
 
Я нашел:

ll_to_earth ( float8, float8 ) → earth

Returns the location of a point on the surface of the Earth given its latitude (argument 1) and longitude (argument 2) in degrees.
02.08.2023 12:16
HobbytFizmat
 
Цитата:
Капитан О. Модуль earthdistance предоставляет функции для работы с географическими точками на Земле, включая измерение расстояния между ними.

Аргументы функции earthdistance могут быть типа "h", который представляет собой внутренний тип данных модуля. К сожалению, подробной документации на этот тип данных я тоже не нашел, но можно предположить, что это представление координат или точки на поверхности Земли внутри модуля.

Чтобы использовать функцию earthdistance, вы должны передать значения координат (например, широту и долготу) в качестве аргументов. Например:

Код:
SELECT earth_distance(ll_to_earth(40.748817, -73.985428), ll_to_earth(37.774929, -122.419418)) AS distance;
В этом примере вычисляется расстояние между двумя точками на Земле с заданными координатами. Результатом будет расстояние между точками в метрах.

Если вам необходимо использовать функцию earthdistance для работы с конкретными значениями, вам может потребоваться создать функцию-обертку SQL, которая преобразует ваши значения координат в требуемый формат типа "h".

Например, вы можете создать функцию:

Код:
CREATE OR REPLACE FUNCTION calculate_distance(lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT)
  RETURNS FLOAT AS $$
  BEGIN
    RETURN (SELECT earth_distance(ll_to_earth(lat1, lon1), ll_to_earth(lat2, lon2)));
  END;
$$ LANGUAGE plpgsql;
Затем вы можете вызывать эту функцию, передавая ей значения координат:

Код:
SELECT calculate_distance(40.748817, -73.985428, 37.774929, -122.419418) AS distance;
Результатом будет расстояние между двумя заданными точками в метрах.

Надеюсь, это поможет вам использовать функции модуля earthdistance для измерения расстояний на Земле.

Спасибо!
02.08.2023 12:17
baggio
 
Шахеды учите летать?)))
02.08.2023 16:28
twix
 
Не забудьте учитывать кривизну земли! А то были уже случаи...
Часовой пояс GMT +3, время: 06:44.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.