Расчет расстояния на Google Maps в Python: подробное руководство с примерами кода

При работе с географическими данными в Python часто необходимо вычислить расстояние между двумя точками на поверхности Земли. Карты Google предоставляют удобный способ получения точных измерений расстояний, и в этой статье мы рассмотрим несколько методов расчета расстояния на Картах Google с использованием Python. Мы рассмотрим использование API матрицы расстояний Google Maps, а также альтернативные подходы с использованием математических формул и внешних библиотек.

Метод 1: API матрицы расстояний Карт Google
API матрицы расстояний Карт Google позволяет получать оценки расстояния и времени путешествия между двумя или более точками. Чтобы использовать этот API, вам необходимо получить ключ API из Google Cloud Console. Вот пример расчета расстояния с помощью API:

import requests
def calculate_distance(origin, destination, api_key):
    url = f"https://maps.googleapis.com/maps/api/distancematrix/json?origins={origin}&destinations={destination}&key={api_key}"
    response = requests.get(url)
    data = response.json()
    distance = data['rows'][0]['elements'][0]['distance']['value']
    return distance
origin = "New York, NY"
destination = "Los Angeles, CA"
api_key = "YOUR_API_KEY"
distance = calculate_distance(origin, destination, api_key)
print(f"Distance: {distance} meters")

Метод 2: формула гаверсинуса
Формула гаверсинуса — популярный метод вычисления расстояний между двумя точками на сфере. Предполагается, что Земля представляет собой идеальную сферу, что является разумным приближением для большинства случаев использования. Вот пример расчета расстояния по формуле Хаверсинуса:

from math import sin, cos, sqrt, atan2, radians
def calculate_distance_haversine(lat1, lon1, lat2, lon2):
    R = 6371.0  # Earth radius in kilometers
    lat1_rad = radians(lat1)
    lon1_rad = radians(lon1)
    lat2_rad = radians(lat2)
    lon2_rad = radians(lon2)
    dlon = lon2_rad - lon1_rad
    dlat = lat2_rad - lat1_rad
    a = sin(dlat / 2)2 + cos(lat1_rad) * cos(lat2_rad) * sin(dlon / 2)2
    c = 2 * atan2(sqrt(a), sqrt(1 - a))
    distance = R * c
    return distance
lat1 = 40.7128
lon1 = -74.0060
lat2 = 34.0522
lon2 = -118.2437
distance = calculate_distance_haversine(lat1, lon1, lat2, lon2)
print(f"Distance: {distance} kilometers")

Метод 3: библиотека Geopy
Geopy — это библиотека Python, которая обеспечивает различные методы геокодирования и вычисления географических расстояний. Он поддерживает несколько алгоритмов расчета расстояний, включая Хаверсинус, формулы Винсенти и расстояние по большому кругу. Вот пример расчета расстояния с помощью Geopy и формулы Винсенти:

from geopy.distance import vincenty
def calculate_distance_geopy(point1, point2):
    distance = vincenty(point1, point2).kilometers
    return distance
point1 = (40.7128, -74.0060)
point2 = (34.0522, -118.2437)
distance = calculate_distance_geopy(point1, point2)
print(f"Distance: {distance} kilometers")

В этой статье мы рассмотрели несколько методов расчета расстояния на Картах Google в Python. Мы рассмотрели использование API матрицы расстояний Google Maps, формулы Haversine и библиотеки Geopy. В зависимости от ваших требований вы можете выбрать метод, который наилучшим образом соответствует вашим потребностям. Теперь у вас есть инструменты для легкого расчета расстояний между географическими точками в ваших проектах Python.