簡體   English   中英

python中最近的經緯度點

[英]Nearest latitude and longitude points in python

我有列表 1 和列表 2 中的站點列表 如何從列表 2 中找到離列表 1 最近的站點?

清單 1 和 2

清單 1

SS 無緯度 經度 977 23.141747 53.796469 946 23.398398 55.422916 742 23.615732 53.717952 980 23.633077 .66507 54057 54057

清單 2

SS沒有緯度經度962 23.657571 53.703683 745 23.671971 52.955976 743 23.766849 53.770344 978 23.847163 52.809653 748 23.942166 52.16236 744 23.955817 52.790424 760 23.984592 55.55764 945 24.030256 55.844842 894 24.03511 53.891547 856 24.741601 55.80063 893 24.04123 53.899958 387 24.059988 51.748138 675 24.061578 53.417912 664 24.063978 51.76195

我可以通過將它們映射到 PowerBI 來手動執行此操作,但我正在尋找可擴展的解決方案並且更喜歡 Python。

這與上一個問題非常相似
根據緯度/經度獲取兩點之間的距離
因此,它可以聲稱是重復的。
無論如何,按照 Kurt Peek 的回答,你可以這樣做:

import geopy.distance

def get_distnace(coords_1, coords_2):
    return geopy.distance.vincenty(coords_1, coords_2).km

獲得一個以“km”為單位返回距離的函數。 然后,給出幾個像你這樣的列表,形式為

list1 = [[stat_name_1, lat_1, lon_1], [stat_name_1, lat_1, lon_1], ... ]

list2 = [[...], ... ]

你可能會這樣做:

min_stat = get_distance(list1[0][1:], list2[0][1:])
for stat_1 in list1:
    coord_1 = stat_1[1:]
    for stat_2 in list2:
        coord_2 = stat_2[1:]
        min_stat = min(min_stat, get_distance(coord_1, coord_2)

把它當作一個草稿、一個想法,在任何應用程序之前進行調試和測試。

geopy 是你的朋友。 它具有計算坐標對之間距離的函數。 這是一種方法:

from geopy import distance

s = {
    977: (23.141747, 53.796469),
    946: (23.398398, 55.422916),
    # etc etc
}

d = {
    962: (23.657571, 53.703683),
    745: (23.671971, 52.955976),
    743: (23.766849, 53.770344),
    # etc etc
}

for (ss, a) in s.items():
    best = None
    dist = None
    for (dd, b) in d.items():
        km = distance.distance(a, b).km
        if dist is None or km < dist:
            best = dd
            dist = km

    print(f'{ss} is nearest {best}: {dist} km')

如果我使用您的示例數據運行它,我會得到:

977 is nearest 962: 57.909274476145846 km
946 is nearest 760: 66.3613771288571 km
742 is nearest 962: 4.857141728990575 km
980 is nearest 760: 38.94400553289674 km
660 is nearest 743: 65.56437761273963 km

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM