Расстояние между двумя точками в Москве

Не знаете, где задать вопрос? Задавайте здесь.
alexber10
Новоприбывший
Сообщения: 4
Зарегистрирован: 08 июн 2021, 22:59
Репутация: 0
Откуда: Москва

Расстояние между двумя точками в Москве

Сообщение alexber10 » 08 июн 2021, 23:10

Коллеги, здравствуйте!

Стоит простая задача: определить расстояние между двумя точками, которые заданы широтой и долготой в градусах, в километрах/метрах.

Работа идет на python, но, если вы знаете решение даже не этом языке, буду очень признателен за помощь.

Например, есть 2 точки: 55.076255, 38.747688 и 55.044887, 38.82657.
В яндекс картах расстояние равняется примерно 6 км.

Пример кода:

from shapely.geometry import Point, Polygon
import geopandas

# задаю первую точку, указывая, что формат координат - градусы
t = geopandas.GeoSeries([Point(55.076255, 38.747688, )], crs={
'init': 'epsg:4326'})
# задаю первую точку, указывая, что формат координат - градусы
t2 = geopandas.GeoSeries([Point(55.044887, 38.82657, )], crs={
'init': 'epsg:4326'})
t = t.to_crs(3576) # перевожу координаты в километры для EPSG:3576
t2 = t2.to_crs(3576) # перевожу координаты в километры для EPSG:3576

d = t.distance(t2) # выдает 8456.313775

Если менять стандарт EPSG:3576 на другие из https://spatialreference.org/ref/?search=Russia
то выдает 10-11-12 км, но никак не 6.

Подскажите, пожалуйста, в чем может быть ошибка?

gamm
Гуру
Сообщения: 4056
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1054
Ваше звание: программист
Откуда: Казань

Re: Расстояние между двумя точками в Москве

Сообщение gamm » 09 июн 2021, 05:50

alexber10 писал(а):
08 июн 2021, 23:10
в чем может быть ошибка?
ошибки нет, вы считаете в проекциях, которые все искажают (углы, площади, и расстояния).
EPSG:3576 - это Lambert azimuthal equal-area projection, для полярный районов, зачем она в Москве - непонятно; проекция обещала сохранять площади (в приполярье), но не расстояния в Москве.

Для расстоний нужно либо что-то равнопромежуточное, либо (для малых расстояний) поперечную Меркатора (UTM , или Гаусса-Крюгера, с нужной зоной), либо считать по большой дуге прямо на нужном глобусе. У Москвы зона вроде 7 для ГК, и 37 для UTM, EPSG:28407 и EPSG:32637 соответственно.
Яндекс скорее всего не заморачивается, и считает на сфере, а не на эллипсоиде, RTFM

tikhpetr
Гуру
Сообщения: 1087
Зарегистрирован: 30 окт 2014, 16:33
Репутация: 153
Откуда: г. Жуковский МО

Re: Расстояние между двумя точками в Москве

Сообщение tikhpetr » 09 июн 2021, 08:22

gamm, Мне кажется, ТС нет необходимости изучать основы. Достаточно ввести подходящую СК, как Вы и сказали. Я правда склоняюсь к СК-95. В GM получил такой результат:
01.png
01.png (95.86 КБ) 5306 просмотров
alexber10, Судя по всему, данные об СК Вы берете с EPSG.org? Если да - просто в поиске введите код EPSG 20007. Получите данные во всех мыслимых форматах.

gamm
Гуру
Сообщения: 4056
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1054
Ваше звание: программист
Откуда: Казань

Re: Расстояние между двумя точками в Москве

Сообщение gamm » 09 июн 2021, 09:48

tikhpetr писал(а):
09 июн 2021, 08:22
нет необходимости изучать основы
меня в СССР учили, что программист должен понимать, что происходит, когда на кнопки давишь. Я знаю, что сейчас это не нужно, но привычка :mrgreen:

alexber10
Новоприбывший
Сообщения: 4
Зарегистрирован: 08 июн 2021, 22:59
Репутация: 0
Откуда: Москва

Re: Расстояние между двумя точками в Москве

Сообщение alexber10 » 09 июн 2021, 10:32

Добрый день. Спасибо за ваши ответы!

Для ESPG 28407, 32637, 20007, которые вы указали, получаются следующие результаты для точек (55.076255, 38.747688) и (55.044887, 38.82657):
ESPG:28407 - 9392.982745 км
ESPG:32637 - 9389.225352 км
ESPG:20007 - 9392.989983 км

Думаю, тут проблема в библиотеке, которую использую.

Зато по этой ссылке
gamm писал(а):
09 июн 2021, 05:50
RTFM
, решая обратную геодезическую задачу, получаю правильный результат 6.11 км для точек 55.076255, 38.747688) и (55.044887, 38.82657)!
Видимо, тут можно считать в лоб, хотя еще погуглю библиотеки.
tikhpetr писал(а):
09 июн 2021, 08:22
Судя по всему, данные об СК Вы берете с EPSG.org?
Использовал https://spatialreference.org/ref/?search=Russia. Теперь буду и ваш сайт использовать.

alexber10
Новоприбывший
Сообщения: 4
Зарегистрирован: 08 июн 2021, 22:59
Репутация: 0
Откуда: Москва

Re: Расстояние между двумя точками в Москве

Сообщение alexber10 » 09 июн 2021, 10:35

Пример кода, вдруг кому-то пригодится.
Расчет расстояния до МКАДА через обратную геодезическую задачу

import math

a_e = 6371.0

def spherToCart(lat, lon):
x = math.cos(lat) * math.cos(lon)
y = math.cos(lat) * math.sin(lon)
z = math.sin(lat)
return (x, y, z)

def inverse(lat1, lon1, lat2, lon2):
x, y, z = spherToCart(lat2, lon2)
x, y = rotate(x, y, lon1)
z, x = rotate(z, x, math.pi / 2 - lat1)
lat, lon = cartToSpher(x, y, z)
dist = math.pi / 2 - lat
azi = math.pi - lon
return (dist, azi)

def rotate(x, y, a):
c = math.cos(a)
s = math.sin(a)
u = x * c + y * s
v = -x * s + y * c
return (u, v)

def cartToSpher(x, y, z):
lat = math.atan2(z, math.sqrt(x * x + y * y))
lon = math.atan2(y, x)
return (lat, lon)

lat1, lon1, lat2, lon2 = 55.621506, 37.786676, 55.044887, 38.82657
lat1 = math.radians(lat1)
lon1 = math.radians(lon1)
lat2 = math.radians(lat2)
lon2 = math.radians(lon2)
dist, azi2 = inverse(lat2, lon2, lat1, lon1)
dist, azi1 = inverse(lat1, lon1, lat2, lon2)
print("%f %f %.4f" % (math.degrees(azi1), math.degrees(azi2), dist * a_e))

trir
Гуру
Сообщения: 5286
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Расстояние между двумя точками в Москве

Сообщение trir » 09 июн 2021, 10:41

import geopy.distance
dist = geopy.distance.geodesic((38.8459879,117.454361),(38.846255,117.459880))
dist.meters
https://gis.stackexchange.com/questions ... ght-answer

alexber10
Новоприбывший
Сообщения: 4
Зарегистрирован: 08 июн 2021, 22:59
Репутация: 0
Откуда: Москва

Re: Расстояние между двумя точками в Москве

Сообщение alexber10 » 09 июн 2021, 11:28

Разобрался, спасибо!

gamm
Гуру
Сообщения: 4056
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1054
Ваше звание: программист
Откуда: Казань

Re: Расстояние между двумя точками в Москве

Сообщение gamm » 09 июн 2021, 14:00

alexber10 писал(а):
09 июн 2021, 11:28
Разобрался, спасибо!
вы бы код по кат спрятали, а то на весь экран ....

stout
Участник
Сообщения: 91
Зарегистрирован: 13 апр 2012, 17:09
Репутация: 52

Re: Расстояние между двумя точками в Москве

Сообщение stout » 09 июн 2021, 18:11


trir
Гуру
Сообщения: 5286
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Расстояние между двумя точками в Москве

Сообщение trir » 10 июн 2021, 06:38


stout
Участник
Сообщения: 91
Зарегистрирован: 13 апр 2012, 17:09
Репутация: 52

Re: Расстояние между двумя точками в Москве

Сообщение stout » 10 июн 2021, 12:33

alexber10 писал(а):
09 июн 2021, 10:35
Пример кода, вдруг кому-то пригодится.
Расчет расстояния до МКАДА через обратную геодезическую задачу
Если считать на сфере, тогда уж на сфере Гаусса

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: Расстояние между двумя точками в Москве

Сообщение Boris » 21 июн 2021, 21:45

alexber10 писал(а):
08 июн 2021, 23:10
Работа идет на python, но, если вы знаете решение даже не этом языке, буду очень признателен за помощь.

Например, есть 2 точки: 55.076255, 38.747688 и 55.044887, 38.82657.
В Mapinfo на MapBasic'е задача решается в две строки:
1. установить проекцию WGS84
2. получить его длину (построить отрезок по координатам)
alexber10 писал(а):
09 июн 2021, 10:35
Расчет расстояния до МКАДА через обратную геодезическую задачу
Простите, не очень разобрался, а где здесь собственно МКАД?
И на сколько я помню, с приемлемой точностью на участке в 20 км - земля плоская. Достаточно получить координаты в проецированной СК и посчитать по формуле Пифагора.
Но еще интересней узнать про задачу, для которой в Москве, задаются вопросом о расстоянии между точками. На ум приходит только баллистика.

tikhpetr
Гуру
Сообщения: 1087
Зарегистрирован: 30 окт 2014, 16:33
Репутация: 153
Откуда: г. Жуковский МО

Re: Расстояние между двумя точками в Москве

Сообщение tikhpetr » 22 июн 2021, 08:04

Boris писал(а):
21 июн 2021, 21:45
На ум приходит только баллистика.
:lol:

stout
Участник
Сообщения: 91
Зарегистрирован: 13 апр 2012, 17:09
Репутация: 52

Re: Расстояние между двумя точками в Москве

Сообщение stout » 23 июн 2021, 00:59

Boris писал(а):
21 июн 2021, 21:45
установить проекцию WGS84
Скажите пожалуйста, что такое "проекция WGS84"?

Ответить

Вернуться в «Я новичок!»

Кто сейчас на конференции

Сейчас этот форум просматривают: aa7v и 12 гостей