Расстояние между точками
- Svility
- Участник
- Сообщения: 55
- Зарегистрирован: 24 окт 2017, 19:41
- Репутация: 5
- Откуда: 32637
Расстояние между точками
Подскажите, как рассчитать расстояние между двумя точками в георгафической системе координат?
Задача: автоматически вести расчет между каждыми вершинами линии и их сумму (протяженность линии)
Задача: автоматически вести расчет между каждыми вершинами линии и их сумму (протяженность линии)
-
- Гуру
- Сообщения: 5355
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
- Игорь Белов
- Гуру
- Сообщения: 2241
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1514
- Откуда: Казань
Re: Расстояние между точками
Нужны умные книжки и статьи, чтобы их изучить и начать программировать? Или нужны готовые программы, которые умеют считать? Или библиотеки, чтобы использовать API?
И что понимается под расстоянием? Длина хорды, соединяющей две точки в трёхмерном пространстве? Длина отрезка дуги кратчайшей кривой линии? А если кривая, то на какой поверхности? Сфера? Эллипсоид? Выбор зависит от требуемой точности и от того, насколько велики расстояния.
Правильное название задачи в любом случае «Обратная геодезическая задача». IMHO лучше начать с учебников.
Ну или попробуйте со статей на форуме:
http://gis-lab.info/qa/great-circles.html
http://gis-lab.info/qa/sphere-geodesic- ... oblem.html
И что понимается под расстоянием? Длина хорды, соединяющей две точки в трёхмерном пространстве? Длина отрезка дуги кратчайшей кривой линии? А если кривая, то на какой поверхности? Сфера? Эллипсоид? Выбор зависит от требуемой точности и от того, насколько велики расстояния.
Правильное название задачи в любом случае «Обратная геодезическая задача». IMHO лучше начать с учебников.
Ну или попробуйте со статей на форуме:
http://gis-lab.info/qa/great-circles.html
http://gis-lab.info/qa/sphere-geodesic- ... oblem.html
The purpose of computing is insight, not numbers
- Svility
- Участник
- Сообщения: 55
- Зарегистрирован: 24 окт 2017, 19:41
- Репутация: 5
- Откуда: 32637
Re: Расстояние между точками
Расстояние между двумя точками функцией ST_Distance:
Результат:
В QGIS функция $LENGHT показывает результат: 99.76;
Расчет расстояния по статье (http://gis-lab.info/qa/great-circles.html) показывает: 99,89
Только начинаю разбираться...не совсем понятна разница в значениях
Код: Выделить всё
SELECT ST_Distance(gg1, gg2) As spheroid_dist, ST_Distance(gg1, gg2, false) As sphere_dist
FROM (SELECT
ST_GeographyFromText('SRID=4326;POINT(39.032269 45.044826)') As gg1,
ST_GeographyFromText('SRID=4326;POINT(39.032293 45.043928)') As gg2
) As foo ;
Код: Выделить всё
spheroid_dist | sphere_dist
99.81502644 | 99.87098323
Расчет расстояния по статье (http://gis-lab.info/qa/great-circles.html) показывает: 99,89
Только начинаю разбираться...не совсем понятна разница в значениях

-
- Гуру
- Сообщения: 4168
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
- Svility
- Участник
- Сообщения: 55
- Зарегистрирован: 24 окт 2017, 19:41
- Репутация: 5
- Откуда: 32637
Re: Расстояние между точками
Использую вот такую формулу в Excel:
в ней использую радиус Земли(большая полуось) = 6378137м.
Среднее значение радиуса земли = 6371,008. Где и как его учесть, подскажите.
Используя координаты:
Y1=45,044826
Y2=45,043928
X1=39,032269
X2=39,032293
Расстояние должно получиться 99.76м (никак не могу добиться такого результата
)
Код: Выделить всё
=ATAN2(SIN(ПИ()*45,044826/180)*SIN(ПИ()*45,043928/180)+COS(ПИ()*45,044826/180)*COS(ПИ()*45,043928/180)*COS(ABS(ПИ()*39,032293/180-ПИ()*39,032269/180));КОРЕНЬ((COS(ПИ()*45,043928/180)*SIN(ПИ()*39,032293/180-ПИ()*39,032269/180))^2+(COS(ПИ()*45,044826/180)*SIN(ПИ()*45,043928/180)-SIN(ПИ()*45,044826/180)*COS(ПИ()*45,043928/180)*COS(ABS(ПИ()*39,032293/180-ПИ()*39,032269/180)))^2))*6378137
Среднее значение радиуса земли = 6371,008. Где и как его учесть, подскажите.
Используя координаты:
Y1=45,044826
Y2=45,043928
X1=39,032269
X2=39,032293
Расстояние должно получиться 99.76м (никак не могу добиться такого результата

-
- Гуру
- Сообщения: 4168
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
- Svility
- Участник
- Сообщения: 55
- Зарегистрирован: 24 окт 2017, 19:41
- Репутация: 5
- Откуда: 32637
Re: Расстояние между точками
Если использовать разные варианты в PostGis:
Результат получается:
А если замерить расстояние линейкой в qgis, то:
Все бы ничего, но на 100км, разница в расчетах составляет 200 м. - что для моих целей много 
Код: Выделить всё
SELECT
round(CAST(ST_Distance('POINT(39.032269 45.044826)'::geography, 'POINT(39.032293 45.043928)'::geography) As numeric),3) AS st_distance,
round(CAST(ST_Distance(ST_GeographyFromText('POINT(39.032269 45.044826)'), ST_GeographyFromText('POINT(39.032293 45.043928)')) As numeric),3) AS st_distance2,
round(CAST(ST_Length_Spheroid('LINESTRING(39.032269 45.044826, 39.032293 45.043928)', 'SPHEROID["WGS84",6378137,298.25728]') As numeric),3) AS st_length_spheroid,
round(CAST(ST_Length_Spheroid('LINESTRING(39.032269 45.044826, 39.032293 45.043928)', 'SPHEROID["GRS_1980",6378137,298.257222101]') As numeric),3) AS st_length_spheroid
;

-
- Гуру
- Сообщения: 4168
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
- Svility
- Участник
- Сообщения: 55
- Зарегистрирован: 24 окт 2017, 19:41
- Репутация: 5
- Откуда: 32637
Re: Расстояние между точками
Расстояние с учетом эллипсоида?gamm писал(а): ↑09 сен 2018, 20:41а что измеряет линейка вам известно?

Я собственно хочу восстановить алгоритм расчета по линейки qgis.
-
- Гуру
- Сообщения: 5355
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Расстояние между точками
ну так код посмотрите - зачем огород городить?Я собственно хочу восстановить алгоритм расчета по линейки qgis.
-
- Гуру
- Сообщения: 4168
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: Расстояние между точками
Я повторю вопрос - с чего вы решили, например, что линейка получает на вход те же числа, которые вы подставляете в постгис, и вы не используете где-то результат округления или пересчет через пиксели или еще чего. Вы бы для начала убедились, что считаете то же самое и по тем же формулам.
- Svility
- Участник
- Сообщения: 55
- Зарегистрирован: 24 окт 2017, 19:41
- Репутация: 5
- Откуда: 32637
Re: Расстояние между точками
Ваши ответы ориентированна для кого? На программистов?
Я не знаю в каком из множества файлов qgis лежат параметры расчета, если такой вообще есть.
Я не уверен, но надеюсь что qgis берет теже координаты что отображаются снизу экрана.
Еще момент: проект в 3857, а вектор в 4326 + перепроецирование на лету.
Я не знаю в каком из множества файлов qgis лежат параметры расчета, если такой вообще есть.
Я не уверен, но надеюсь что qgis берет теже координаты что отображаются снизу экрана.
Еще момент: проект в 3857, а вектор в 4326 + перепроецирование на лету.
-
- Гуру
- Сообщения: 5355
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Расстояние между точками
в справке написанно
так что она считает в 3857
viewtopic.php?f=25&t=23810&p=161820&hil ... 8C#p161820
https://github.com/qgis/QGIS/blob/maste ... /%24lengthThe length calculated by this function respects both the current project's ellipsoid setting and distance unit settings.
так что она считает в 3857
viewtopic.php?f=25&t=23810&p=161820&hil ... 8C#p161820
-
- Гуру
- Сообщения: 4168
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: Расстояние между точками
у вас минимум две проблемы, на что вам уже неоднократно указывалиЯ не уверен, но надеюсь что qgis берет теже координаты что отображаются снизу экрана.
Еще момент: проект в 3857, а вектор в 4326 + перепроецирование на лету.
1) похоже, вы брали координаты с экрана двигая мышкой, где они (а) округлены, и (в) пересчитаны из пикселей, точность каждого числа примерно 0.1 метра. Какую точность вы получаете в итоге, никому не ведомо, а вы хотите, чтобы расстояния совпали.
2) расстояние в проекции (тем более такой кривой, как web merkator) сильно отличается от расстояния на глобусе - а похоже, вы в проекции и считаете, и хотите, чтобы расстояния совпали.
Сделайте, хотя бы, одинаковые проекции (градусы на одинаковом глобусе) для всех данных, и считайте расстояние на этом же глобусе. Предварительно выгрузив точки в shape, и загрузив в базу, чтобы числа были те же самые, без округления. Тогда можно что-то обсуждать.
P.S. Чтобы считать расстояния, нужно выбрать какую=нибудь равнопремежуточную проекцию, посмотрев, какая из них дает минимальные ошибки для ваших типичных расстояний.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя