powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / PostGis - Distance
25 сообщений из 27, страница 1 из 2
PostGis - Distance
    #38630064
Electric200
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Друзья, есть ли функция которая высчитывает растение с учетом высоты? Сколько перерыл, не могу найти. Стандартная же считает с учетом чего угодно, только не высоты. Или я не туда смотрю?
Буду благодарен !
...
Рейтинг: 0 / 0
PostGis - Distance
    #38630187
Гость12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sqrt(distance*distance + h*h) ? :)
...
Рейтинг: 0 / 0
PostGis - Distance
    #38630687
Фотография Степан H.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разной высоты одной из точек? Теорема Пифагора
http://www.trailhunger.com/info/articles/garmin-distance-calculation
если высота одинаковая но большое расстояние - то
http://postgis.refractions.net/documentation/manual-1.4/ST_Distance_Sphere.html
...
Рейтинг: 0 / 0
PostGis - Distance
    #38631238
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Electric200,

ST_3DDistance? но существует только в версиях выше 2.0.0.
...
Рейтинг: 0 / 0
PostGis - Distance
    #38637007
Electric200
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LonepsychoElectric200,

ST_3DDistance? но существует только в версиях выше 2.0.0.
Да, только я не вкурил каким образом она решает мою задачу. Ведь мне нужно учитывать высоту над уровне моря точки, а не SRID, проекцию или ближайшее расстояние. Может я просто готовить не умею?)
...
Рейтинг: 0 / 0
PostGis - Distance
    #38638138
Weed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А расскажите что за задачу решаете?

Расстояние между точками на эллипсоиде - ортодрома. Её нельзя (так считается в публичных источниках, может для GPS/Глонасс военные математики что-то и изобрели секретное...) вычислить абсолютно точно. А тут ещё высоту хотите добавить.

Обычно авторы программ расчета длины дороги для навигации вообще используют теорему Пифагора и не парятся - большое количество координат точек дороги даёт хороший результат (ну будет разница метров 500 на 4000 км между ортодромным методом и пифагоровым - всем пофиг же). А в пифагоров метод уже нетрудно будет добавить учёт высоты.
...
Рейтинг: 0 / 0
PostGis - Distance
    #38638476
Electric200
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WeedА расскажите что за задачу решаете?

Расстояние между точками на эллипсоиде - ортодрома. Её нельзя (так считается в публичных источниках, может для GPS/Глонасс военные математики что-то и изобрели секретное...) вычислить абсолютно точно. А тут ещё высоту хотите добавить.

Обычно авторы программ расчета длины дороги для навигации вообще используют теорему Пифагора и не парятся - большое количество координат точек дороги даёт хороший результат (ну будет разница метров 500 на 4000 км между ортодромным методом и пифагоровым - всем пофиг же). А в пифагоров метод уже нетрудно будет добавить учёт высоты.

Совершенно верно уважаемый. GPS/Глонасс тематика.
Вот такой промежуточный вариант наваял я, до выяснения обстоятельств. Считает точно. Но результат от стандартной PostGis отличается. А при большом количестве точек, разница очень заметна.По этому хотелось использовать что то нативное, вместе с плюшками в виде geometry::type. Также что бы все было "комфильно", без лишних пересчетов. А то какой то велосипед выходит.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
CREATE OR REPLACE FUNCTION public.partition_distance (
  lat1 double precision,
  lon1 double precision,
  z1 text,
  lat2 double precision,
  lon2 double precision,
  z2 text
)
RETURNS double precision AS
$body$
DECLARE
 
 z1   integer := CAST(z1 AS integer);

 z2   integer := CAST(z2 AS integer);
 theta double precision;
 distance double precision :=0;
 dz  double precision :=(z2 - z1) / 1000::float; 
 
BEGIN
   
   IF (lat1 = lat2) AND (lon1 = lon2) THEN
     RETURN 0;
   END IF;  
   
   theta = lon1 - lon2;
   distance = sin(radians(lat1)) * sin(radians(lat2)) + cos(radians(lat1)) * cos(radians(lat2)) * cos(radians(theta));
   distance = degrees(acos(distance)) * 111.18957696;
   --RAISE NOTICE '(ID=%)',distance;  
   distance = sqrt((distance * distance) + (dz * dz))::float;
   RETURN trunc(distance::numeric,6);
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
...
Рейтинг: 0 / 0
PostGis - Distance
    #38638558
Weed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Electric200WeedА расскажите что за задачу решаете?

Расстояние между точками на эллипсоиде - ортодрома. Её нельзя (так считается в публичных источниках, может для GPS/Глонасс военные математики что-то и изобрели секретное...) вычислить абсолютно точно. А тут ещё высоту хотите добавить.

Обычно авторы программ расчета длины дороги для навигации вообще используют теорему Пифагора и не парятся - большое количество координат точек дороги даёт хороший результат (ну будет разница метров 500 на 4000 км между ортодромным методом и пифагоровым - всем пофиг же). А в пифагоров метод уже нетрудно будет добавить учёт высоты.

Совершенно верно уважаемый. GPS/Глонасс тематика.


А точнее? Если надо считать по треку расстояние, которое пролетел на разной высоте самолёт - это одно, а если, мнмнмнм, предсказать движение спутника это другое.


Вот такой промежуточный вариант наваял я, до выяснения обстоятельств. Считает точно. Но результат от стандартной PostGis отличается.

Считает точно но не точно? :)

По диагонали глянул и не увидел определения эллипсоида (датума). Значит, используется расстояние по шару? Предположу, что постгис считает по эллипсу Земли wgs84 - оттуда и разница.

Кстати, сорри, я ошибся насчет того, что нельзя определить расстояние точно по эллипсоиду - нельзя аналитически определить форму ортодромы, а её длину можно. Расчёт расстояния по эллипсоиду, определённому датумом:

формула: http://en.wikipedia.org/wiki/Great-circle_distance
рабочий код на ди: https://github.com/denizzzka/gis-stuff/blob/master/math/earth.d#L141


А при большом количестве точек, разница очень заметна.По этому хотелось использовать что то нативное, вместе с плюшками в виде geometry::type. Также что бы все было "комфильно", без лишних пересчетов. А то какой то велосипед выходит.


Вот тут и возникает вопрос "что за задача решается?"

Ведь, например, если это связано с дорожной сетью, то неровности дороги много больше кривизны Земли между двумя точками трека! Проще вообще не учитывать кривизну Земли в этом случае.
...
Рейтинг: 0 / 0
PostGis - Distance
    #38638613
Electric200
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача: расстояние по треку (по точкам) для GPS/Глонасс мониторинга.
"По шару" (учет эллипсоида) можно забить. по причине большой частоты точек (макс. каждые 200 метров). Трек в среднем состоит из 1500 - 2500 точек (суточный к примеру). На такой частоте учитывать "шар" бессмысленно.
Изначально начали считать без учета высоты. Статистика показала, что по сравнению с автомобильный одометром, погрешность достигала до "-15%" процентов. Это было давно и этот этап уже пройден.
По сути, та функция, что я привел выше, считает максимально точно на сегодняшний день. И это не просто слова, это 2 летняя практика проверена на более 1000 автомобилях (точнее их одометрах). Еще сравнивали с формулой Винцетти.

Т.е я хочу получить аналог результата своей функции, только с PostGis. Что бы я напрямую мог работать с geometry::type (поскольку так храню всякую хрень в Postgres в виде разных поинтов и полегонов). Дабы не приводить типизации данных туда сюда.
Вот нечего такого, что бы дало хоть "приближенный" результат, я не нашел.
...
Рейтинг: 0 / 0
PostGis - Distance
    #38638620
Electric200
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А понятие "точности" расстояние в мониторинге вообще "относительное" и определяется владельцами авто. Если статистика показывает большое количество обращения с претензиями, что данные по системе и одометру расходятся, значит что то где то не так. Нету эталона. Не будешь же с рулеткой за треком бегать)).
...
Рейтинг: 0 / 0
PostGis - Distance
    #38638650
Weed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну всё тогда:

- переводите координаты в Меркатора

- ограничьте их по северу и по югу кругом типа полярного, в районе +-80 градусов, скажем (за этими кругами точность сильно уедет, будет опасность пересечения треком полюсов, ну и там всё равно никто не живёт)

- учитывайте 180-й меридиан

- считайте по Пифагору + высоту

- будьте снисходительны к точности определения высоты GPS-приёмниками
...
Рейтинг: 0 / 0
PostGis - Distance
    #38638661
Electric200
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Weedну всё тогда:

- переводите координаты в Меркатора

- ограничьте их по северу и по югу кругом типа полярного, в районе +-80 градусов, скажем (за этими кругами точность сильно уедет, будет опасность пересечения треком полюсов, ну и там всё равно никто не живёт)

- учитывайте 180-й меридиан

- считайте по Пифагору + высоту

- будьте снисходительны к точности определения высоты GPS-приёмниками
Пересчитывать все точки в Меркатора?)) та вы мазахист смотрю))) Так пифагор + высота, я так понял в PostGis не существует?
...
Рейтинг: 0 / 0
PostGis - Distance
    #38638677
Weed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Electric200Weedну всё тогда:

- переводите координаты в Меркатора

- ограничьте их по северу и по югу кругом типа полярного, в районе +-80 градусов, скажем (за этими кругами точность сильно уедет, будет опасность пересечения треком полюсов, ну и там всё равно никто не живёт)

- учитывайте 180-й меридиан

- считайте по Пифагору + высоту

- будьте снисходительны к точности определения высоты GPS-приёмниками
Пересчитывать все точки в Меркатора?)) та вы мазахист смотрю))) Так пифагор + высота, я так понял в PostGis не существует?

Понятия не имею.

Но если существует то пересчитывает в Меркатора. Если не существует то вам придётся это сделать. Это не сложно.
...
Рейтинг: 0 / 0
PostGis - Distance
    #38638687
Weed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я вообще туплю сегодня.

Если расстояние по эллипсоиду дополнить пифагоровой высотой - может это и будет расстояние по эллипсоиду с учетом высоты?

Едет машина по планете и одновременно забирается на некую определенную высоту. Проекция - ортодрома. Мысленно распрямляем её, добавляем постоянно повышающуюся высоту по Пифагору - готово!
...
Рейтинг: 0 / 0
PostGis - Distance
    #38638713
Electric200
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WeedЧто-то я вообще туплю сегодня.

Если расстояние по эллипсоиду дополнить пифагоровой высотой - может это и будет расстояние по эллипсоиду с учетом высоты?

Едет машина по планете и одновременно забирается на некую определенную высоту. Проекция - ортодрома. Мысленно распрямляем её, добавляем постоянно повышающуюся высоту по Пифагору - готово!
Дык, так такое предлагали в первых постах) Вы по кругу прошлись). Вообще спасибо вам добрый человек))
...
Рейтинг: 0 / 0
PostGis - Distance
    #38638720
Weed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Electric200Пересчитывать все точки в Меркатора?)) та вы мазахист смотрю)))

Уточняю: для длины ортодромы по шару не требуется это.

Но! если вы пересчитаете в Меркатора с учётом датума и расстояние между точками трека тоже будете определять "тупо" по Пифагору то результат будет намного точнее, чем тот, что есть у вас сейчас. Потому что в этом случае автоматически будет учтёна кривизна эллипсоида, просто потому что точек на треке много.
...
Рейтинг: 0 / 0
PostGis - Distance
    #38638725
Weed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Electric200WeedЧто-то я вообще туплю сегодня.

Если расстояние по эллипсоиду дополнить пифагоровой высотой - может это и будет расстояние по эллипсоиду с учетом высоты?

Едет машина по планете и одновременно забирается на некую определенную высоту. Проекция - ортодрома. Мысленно распрямляем её, добавляем постоянно повышающуюся высоту по Пифагору - готово!
Дык, так такое предлагали в первых постах)

Это не факт что верно! Это надо тем, кто в матане шарит вопрос задать. На форуме OSM есть люди, которые на этом собаку съели

Хотя для вашего случая с большим количеством близких точек на треке - пойдёт, ошибка если и есть будет незаметна
...
Рейтинг: 0 / 0
PostGis - Distance
    #38641466
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Electric200,

postgis функции написаны на C, не считая нескольких врапероф. а вы собираетесь считать на SQL подозреваю будут потери производительности. а про получение результата в метрах всё есть в документации.
...
Рейтинг: 0 / 0
PostGis - Distance
    #38642117
Electric200
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LonepsychoElectric200,

postgis функции написаны на C, не считая нескольких врапероф. а вы собираетесь считать на SQL подозреваю будут потери производительности. а про получение результата в метрах всё есть в документации.
Спасибо, я в курсе на чем написан postgis. Писать подобное на чистом "C" - нет возможности та и смысла как такого не вижу. Производительность компенсируется масштабируемостью. Во вторых, процедуры компилируемые, и это намного лучше чем использовать что либо интерпретируемое. Да и Postgis для этого и существует же. А меня интересуют не метры, а учет высоты. Наверно вы не весь топик читали.
...
Рейтинг: 0 / 0
PostGis - Distance
    #38642189
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Electric200LonepsychoElectric200,

postgis функции написаны на C, не считая нескольких врапероф. а вы собираетесь считать на SQL подозреваю будут потери производительности. а про получение результата в метрах всё есть в документации.
Спасибо, я в курсе на чем написан postgis. Писать подобное на чистом "C" - нет возможности та и смысла как такого не вижу. Производительность компенсируется масштабируемостью. Во вторых, процедуры компилируемые, и это намного лучше чем использовать что либо интерпретируемое. Да и Postgis для этого и существует же. А меня интересуют не метры, а учет высоты. Наверно вы не весь топик читали.

Хочу на всякий случай уточнить про:
" Во вторых, процедуры компилируемые, и это намного лучше чем использовать что либо интерпретируемое."
что вы под этим имели в виду?
если вы про pl/pgsql - то это чистый интерпретатор
...
Рейтинг: 0 / 0
PostGis - Distance
    #38642476
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Electric200,

Да может быть что я чтото недопонял (русский всётаки не мой родной язык). но, по тому что я вижу, вы пытаетесь получить длину траектории которая есть в 3D. если я не правильно понял задачу, тогда - да, мой ответ считать неверным. если всётаки я прав, тогда присмотритесь к нему.
...
Рейтинг: 0 / 0
PostGis - Distance
    #38642739
Electric200
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukElectric200пропущено...

Спасибо, я в курсе на чем написан postgis. Писать подобное на чистом "C" - нет возможности та и смысла как такого не вижу. Производительность компенсируется масштабируемостью. Во вторых, процедуры компилируемые, и это намного лучше чем использовать что либо интерпретируемое. Да и Postgis для этого и существует же. А меня интересуют не метры, а учет высоты. Наверно вы не весь топик читали.

Хочу на всякий случай уточнить про:
" Во вторых, процедуры компилируемые, и это намного лучше чем использовать что либо интерпретируемое."
что вы под этим имели в виду?
если вы про pl/pgsql - то это чистый интерпретатор
От части да, от части нет. Чистый интерпретатор это php к примеру. plpgql - обрабатывается самим Postgres. Как он там их хранит, дело другое. Но в любом случае, в его использования я вижу больше преимуществ чем недостатков, как с технической точки зрения, так и с учетом моих задач.

LonepsychoElectric200,

Да может быть что я чтото недопонял (русский всётаки не мой родной язык). но, по тому что я вижу, вы пытаетесь получить длину траектории которая есть в 3D. если я не правильно понял задачу, тогда - да, мой ответ считать неверным. если всётаки я прав, тогда присмотритесь к нему.
Я не понял вашего совета если честно. )
...
Рейтинг: 0 / 0
PostGis - Distance
    #38643056
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Electric200,

уже третий раз пререпрочитал тему, и по моему вы велосипед изобретаете. но, видимо есть где-то рассихрон в понимании (очень большая вероятность что в моём), так что ухожу с дистанции :) . успехов в решении задачи.
...
Рейтинг: 0 / 0
PostGis - Distance
    #38643128
Electric200
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том и задача, что я не хочу велосипед, а приходится.
Посмотрите на мою функцию
Код: plsql
1.
CREATE OR REPLACE FUNCTION public.partition_distance (


Посмотрите на аргументы которая она принимает.
Это координаты начала отрезка+высота, координаты конца отрезка + высота. Хочу такую же функцию на Postgis с таким же результатом просчета. Но нет таковой. Вот и вся задача.
...
Рейтинг: 0 / 0
PostGis - Distance
    #38643208
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Electric200В том и задача, что я не хочу велосипед, а приходится.
Посмотрите на мою функцию

Попробовал, со своими живыми данными...
ваша ф-я 0,056853 , посгис 0,0563988770707759
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / PostGis - Distance
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]