Вычислить расстояние между координатами в Python

Статьи

Вычислить расстояние между координатами в Python

Автор: Рамис, 01 апреля 2022

Приветствую всех читателей. Заметил, что многие интересуются вопросом как вычислить расстояние и время для преодоления дистанции между координатами используя Python. В этой статье я дам ответ на этот вопрос, и познакомлю Вас с сервисом который в этом поможет.

OpenRouteService - сервис опирающийся на открытые данные Openstreetmap, который предоставляет простое, бесплатное API (с небольшими ограничениями). Сервис умеет прокладывать маршруты, делать прямое и обратное геокодирование, вычислять расстояния между координатами и т.д.

Поехали

Зарегистрируйтесь в OpenRouteService и получите токен.

OpenRouteService

Так же на странице с токеном Вы можете ознакомиться с ограничениями API, узнать сколько запросов вам разрешено сделать бесплатно в месяц.

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

Допустим у нас есть две точки с координатами:

  1. (55.748, 37.6199) - Москва
  2. (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 вы можете ознакомиться здесь.

Комментарии

Markdown
Войти