В этой статье мы будем использовать функцию гаверсинуса для вычисления ближайшего местоположения заданного местоположения.

Ввод: начальная широта и долгота.

Выход: Ближайший город

Это ближайшее местоположение можно рассчитать с помощью функции гаверсинуса. Набор данных представляет собой набор всех местоположений с указанием их широты и долготы. Он сравнивает всю начальную широту и долготу со всеми данными и, наконец, дает местоположение с минимальным расстоянием.

Функция гаверсина:

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']))