가장 가까운 위도 경도 지점에 python

0

질문

내가 목록을 가지고 방송국의 목록에서 1,2 목록 찾으려면 어떻게 가장 가까운 역 목록 1 목록에서 2?

목록 1 및 2

목록 1

SS 아니 하면도 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 아니 하면도 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

내가 이것을 할 수 있는 수동으로 매핑하여 그들에 Bi 그러나 내가 찾는 확장 가능한 솔루션과 아보세요 Python.

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

추가로 주문하거나 그룹을 왼쪽으로 노력한 리더입니다.

2021-11-17 12:11:25

감사합니다! 그러나 내가 어떻게 여러 스테이션 근처에 있습니까? 면 내가 원하는 최고 2 또는 3 가장 가까운 역에서 목록 2 목록 1?
Raul V

예를 들어:977 가장 가까운 962,:57.909274476145846km760,:57.909274476145846km xyz:57.909274476145846km
Raul V

내가 편집한 내 응답을 시작합니다.
xpqz

당신은 짐승입니다. 대단히 감사합니다.
Raul V
0

이것은 매우 비슷하기 이전 질문
점점 두 점 사이의 거리에 따라 위도/경도
그래서,그것은 될 수 있는 주장으로 복제됩니다.
어쨌든,다음 Kurt 임의 응답,당신이 할 수 있다:

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ý
..................................................................................................................