Нахождение минимального расстояния между двумя координатами из разных списков

Заранее извините, в настоящее время на мобильном телефоне!

Таким образом, у меня в основном есть один список с примерно 50 000 кортежей широты/долготы (список 1) и другой список примерно с 1800 кортежами широты/длины (список 2).

Что я хочу сделать, так это следующее: для каждого из элементов списка в списке 1 я хочу найти ближайшую точку из элементов списка в списке 2, так что я в основном получаю список около 50 000 значения, представляющие минимальные расстояния.

У меня не было проблем с вычислением расстояния для отдельных элементов с помощью geopy.distance, однако я застрял в реализации цикла for и буду признателен за любую помощь!

Большое спасибо.


person illustriousGiraffe    schedule 02.07.2020    source источник
comment
Может быть актуально: stackoverflow.com/a/57189777   -  person KostyaEsmukov    schedule 04.07.2020


Ответы (1)


from math import sin, cos, sqrt, atan2

def distanceCheck(lat1, lat2, lon1, lon2):
    R = 6373.0
    dlon = lon2 - lon1
    dlat = lat2 - lat1
    a = (sin(dlat/2))**2 + cos(lat1) * cos(lat2) * (sin(dlon/2))**2
    c = 2 * atan2(sqrt(a), sqrt(1-a))
    distance = R * c
    return distance

distarr = []
for p1 in list1:
    minDist = None
    point = None
    for p2 in list2:
        #DISTANCE CHECK HERE - 
        check = distanceCheck(p1.lat, p2.lat, p1.lon, p2.lon)
        if not minDist:
            minDist = check
            point = p2
        else:
            if check < minDist:
                minDist = check
                point = p2
    distarr.append({'min': minDist, 'to': point, 'from': p1})
    
print("{}".format(distarr))

list1 и list2 — это списки с широтой и долготой. Надеюсь это поможет

person Krishna Vaddepalli    schedule 02.07.2020