Приветствую всех читателей. Заметил, что многие интересуются вопросом как вычислить расстояние и время для преодоления дистанции между координатами используя Python. В этой статье я дам ответ на этот вопрос, и познакомлю Вас с сервисом который в этом поможет.
OpenRouteService - сервис опирающийся на открытые данные Openstreetmap, который предоставляет простое, бесплатное API (с небольшими ограничениями). Сервис умеет прокладывать маршруты, делать прямое и обратное геокодирование, вычислять расстояния между координатами и т.д.
Поехали
Зарегистрируйтесь в OpenRouteService и получите токен.
Так же на странице с токеном Вы можете ознакомиться с ограничениями API, узнать сколько запросов вам разрешено сделать бесплатно в месяц.
Расстояние и временя между точками координат
Допустим у нас есть две точки с координатами:
- (55.748, 37.6199) - Москва
- (54.7266, 55.9444) - Уфа
Для того что бы узнать расстояния и приблизительное время затраченное на путь между ними, воспользуемся API методом matrix
и создадим функцию для подсчета.
import requests
TOKEN = 'ТОКЕН'
def matrix(locations: list, profile=0):
headers = {
'Content-Type': 'application/json; charset=utf-8',
'Accept': 'application/json',
'Authorization': TOKEN
}
profile_dict = {
0: 'driving-car',
1: 'foot-walking'
}
data = {"locations":[i[::-1] for i in locations],"metrics":["distance","duration"],"units":"m"}
res = requests.post(f'https://api.openrouteservice.org/v2/matrix/{profile_dict[profile]}',
headers=headers,
json=data).json()
return dict(durations = res['durations'][0][1], distances = res['distances'][0][1])
Функция matrix
принимает 2 аргумента:
locations
- Список координат вида[[Широта, Долгота],...]
.profile
- Число для вычисления времени,0
- на автомобиле,1
- пешком.
Воспользуемся ей, укажем координаты МОСКВА - УФА и узнаем расстояние и время в пути на автомобиле.
print('\nМОСКВА - УФА на автомобиле')
result = matrix([[55.7489, 37.6199], [54.7266, 55.9444]], 0)
print(f'Результат: {result}')
print(f'Расстояние: ~ {int(result["distances"] / 1000)} км')
print(f'Время в пути: ~ {int(result["durations"] // 3600)} часов')
# МОСКВА - УФА на автомобиле
# Результат: {'durations': 70743.32, 'distances': 1471187.75}
# Расстояние: ~ 1471 км
# Время в пути: ~ 19 часов
Так же посмотрим на расстояние и затраченное время между другими городами, если пойти пешком.
print('\nУФА - САМАРА пешком')
result = matrix([[54.7266, 55.9444], [53.2062, 50.1636]], 1)
print(f'Результат: {result}')
print(f'Расстояние: ~ {int(result["distances"] / 1000)} км')
print(f'Время в пути: ~ {int(result["durations"] // 3600)} часов')
# УФА - САМАРА пешком
# Результат: {'durations': 430695.94, 'distances': 598189.94}
# Расстояние: ~ 598 км
# Время в пути: ~ 119 часов
Вот таким вот простым способом, можно узнать расстояние между точками координат. С дополнительной информацией API вы можете ознакомиться здесь.