最近的纬度和经度分在蟒蛇

0

的问题

我有一个名单的站在列表1和表2 我该如何找到最近的站列表1从表2?

列表1和2

表1

SS没有纬度Longtitude 977 23.141747 53.796469 946 23.398398 55.422916 742 23.615732 53.717952 980 23.633077 55.567046 660 23.6504 54.4007

表2

SS没有纬度Longtitude 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但是我在寻找一个可扩展的解决方案和 喜欢蟒蛇。

geolocation python
2021-11-16 11:26:01
2

最好的答案

0

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

如果你需要远的距离从每一列表1对每个列表2,你可以试试

sorted([[ss, dd, distance.distance(a, b).km] for (ss, a) in s.items()
        for (dd, b) in d.items()])

这给出了一个列表中的清单,下令通过的清单1项目第一:

[[660, 387, 273.98088337893], 
 [660, 664, 272.6633222300461], 
 [660, 675, 109.98235440892797], 
 [660, 743, 65.56437761273963],

 # etc

进一步排序或分组左作为一个exercice为读者。

2021-11-17 12:11:25

谢谢! 但我怎么能得到多个站附近? 如果我想的顶2或3最近的站在列表2列出1?
Raul V

例如:977最近962,:57.909274476145846公里760,:57.909274476145846公里,xyz:57.909274476145846公里的一个
Raul V

我的编辑我的答案给你一个开始。
xpqz

你是个野兽。 非常感谢你。
Raul V
0

这是相当类似于前一个问题
得到两点之间的距离的基础上纬度/经度
所以,它可以声明为重复的。
不管怎样,下面的库尔特*Peek的答案,你可以这样做:

import geopy.distance

def get_distnace(coords_1, coords_2):
    return geopy.distance.vincenty(coords_1, coords_2).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)

把它作为一个草案,一个想法,以调试和测试之前的任何应用程序。

2021-11-16 12:03:54

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................