В этой статье мы будем использовать функцию гаверсинуса для вычисления ближайшего местоположения заданного местоположения.
Ввод: начальная широта и долгота.
Выход: Ближайший город
Это ближайшее местоположение можно рассчитать с помощью функции гаверсинуса. Набор данных представляет собой набор всех местоположений с указанием их широты и долготы. Он сравнивает всю начальную широту и долготу со всеми данными и, наконец, дает местоположение с минимальным расстоянием.
Функция гаверсина:
def haversine(lon1, lat1, lon2, lat2): lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2]) # haversine formula dlon = lon2 - lon1 dlat = lat2 - lat1 a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2 c = 2 * asin(sqrt(a)) r = 6371 # Radius of earth in kilometers. Use 3956 for miles. return c * r
Набор данных:
cities = pd.DataFrame(data={'City': ['Osahwa', 'Miami', 'Chicago'], 'Lat' : [43.875081898250606, 25.7825453, 41.8339037], 'Lon' : [-78.85530108422006, -80.2994985, -87.8720471]})
Мы можем добавить столько мест, сколько вы хотите.
Импортируйте необходимые библиотеки:
from math import radians import pandas as pd import numpy as np from math import radians, cos, sin, asin, sqrt
Укажите исходное местоположение (широту и долготу):
start_lat, start_lon = 12.94315265341667, 80.14169879797205 distances_km = []
Чтобы проверить начальное местоположение с набором данных:
for row in cities.itertuples(index=False): distances_km.append(haversine(start_lat, start_lon, row.Lat, row.Lon))
Чтобы отобразить ближайший город:
cities['DistanceFromNY'] = distances_km print(min(cities['DistanceFromNY']))