Как в Python вычислить ближайшие точки по имеющимся GPS-координатам?

Приветствую

Имеется словарь с (название_места:GPS-координаты):

places = {
	'area-1':'55.753003, 37.619778',
	'area-2':'55.811848, 37.604804',
	'area-3':'55.745428, 37.742819',
	'area-4':'55.692442, 37.621970',
	'area-5':'55.753157, 37.493567',
	'area-6':'55.750348, 37.897092',
	'area-7':'55.752298, 37.980246',
	'area-8':'55.750348, 38.098048',
	'area-9':'55.750348, 38.271286',
	'area-10':'55.748398, 38.427201',
	'area-11':'55.746448, 38.605636',
	'area-12':'55.746448, 38.766748'
}


Как из произвольной координаты (названия места) выбрать ближайшие четыре по коодинатам?
  • Вопрос задан
  • 4102 просмотра
Решения вопроса 1
@deliro
Берёшь точку.
Перебираешь твой словарь.
Переводишь значения из строки в два float.
Вычисляешь расстояние между твоей точкой и текущей точкой в словаре.
Пишешь в какой-нибудь список кортеж из результата функции (расстояние между точками) и ключа текущей точки.
Сортируешь список по первому значению кортежа.
Берёшь слайс первых четырёх значений.
PROFIT.

Функция вот.
from math import radians, cos, sin, asin, sqrt

def haversine(lat1, lon1, lat2, lon2):
    """
    Вычисляет расстояние в километрах между двумя точками, учитывая окружность Земли.
    https://en.wikipedia.org/wiki/Haversine_formula
    """

    # convert decimal degrees to radians
    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))
    km = 6367 * c
    return km
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы