@sunsexsurf
IT & creative

Geopy / как найти наиболее близкую точку из списка?

есть два словаря:

income = {'': 'Error', 'Kaliningrad (Konigsberg), ': (54.710454, 20.512733), 'Krasnojarsk, Тельмана, 36': (56.05031, 92.967305), 'Moscow > Moskva, ': (55.755814, 37.617635), 'Moscow > Moskva, Багратионовский пр. д.7 кор.20Б': (55.743137, 37.504232)}
# в income могут быть строки!

etalon = {'115035, г. Москва, М-35, ул. Балчуг, 2': (55.747459, 37.625271), '308000, г. Белгород, пр-т Славы, 74': (50.598079, 36.585839), '241050, г. Брянск, ул. Горького, 34': (53.244984, 34.365707), '600000, г. Владимир, ул. Большая Московская, 29': (56.129745, 40.406446)}

x_values = income.values()
y_values = etalon.values()


хочу циклом пройтись по income, взять геопару (широта, долгота) и сравнить с каждой геопарой в etalon. результатом должен быть список вида:
[адрес в income, адрес в etalon]
или словарь:
{адрес в income: адрес в etalon}

from geopy.distance import geodesic

for x in x_values:
    if type(x) == str:
        None
    else:
        distance = 10000000 # выбираем какую-то от балды дистанцию побольше
        for y in y_values():
            try:
                distance_new = geodesic(x, y, ellipsoid='WGS-84')
                distance_new = geodesic(x_values, y_values, ellipsoid='WGS-84')
                    if distance_new < distance:
                        distance = distance_new
                        total = {income.keys(): etalon.keys()}
            except:
                print('Error')


не работает ((
  • Вопрос задан
  • 205 просмотров
Решения вопроса 2
LazyTalent
@LazyTalent
Data Engineer, Freelancer
dict.keys() возвращает Dictionary view objects (dict_keys), а этот объект мутабельный и значит не может быть ключом в словаре.
Ответ написан
Комментировать
@zexer
1. Переменная y_values, а в цикле for вы пишите y_values()
2. Блок try имеет сильно большой отступ
3. Покажите ошибку.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Не стоит изобретать велосипед. Давно существуют пространственные индексы и поиск ближайшего.
Гуглить:
K nearest neighbors (kNN)
Ответ написан
Ваш ответ на вопрос

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

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