ที่อยู่ใกล้ที่สุดเส้นรุ้งและเส้นแวงจุดภาษาไพธอน

0

คำถาม

ฉันมีรายชื่อของสถานีอยู่ในรายชื่อ 1 และ 2 รายการ ยังไงฉันเจอที่ใกล้ที่สุดอยู่ประจำสถานีการเรียกรายการ 1 จากรายการ 2 หรือไม่?

รายการ 1 และ 2

รายการ 1

พวกเอสเอสไม่องเส้นรุ้ง Longtitude 97723.14174753.796469 94623.39839855.422916 74223.61573253.717952 98023.63307755.567046 66023.650454.4007

รายการ 2

พวกเอสเอสไม่องเส้นรุ้ง Longtitude 96223.65757153.703683 74523.67197152.955976 74323.76684953.770344 97823.84716352.809653 74823.94216652.16236 74423.95581752.790424 76023.98459255.55764 94524.03025655.844842 89424.0351153.891547 85624.74160155.80063 89324.0412353.899958 38724.05998851.748138 67524.06157853.417912 66424.06397851.76195

ฉันสามารถทำเรื่องนี้ด้วยตนเองโดยระบบแผนที่พวกเขาอยู่ PowerBI แต่ฉันกำลังมองหา scalable ทางออกแล้ว อยากให้เป็นภาษาไพธอน.

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

ถ้าคุณต้องการ distances จากแต่ละรายการ 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 description 760,:57.909274476145846 description xyz:57.909274476145846 description น
Raul V

ฉันแก้ไขคำตอบของฉันเพื่อให้คุณเริ่มต้น
xpqz

คุณเป็นสัตว์ประหลาดนั่นแล้ว ขอบคุณมากครับ
Raul V
0

นี่มันค่อนข้างคล้ายกันไปก่อนหน้านี้คำถาม
เริ่มระยะห่างระหว่างสองคะแนนจากเส้นรุ้ง/เส้นแวง
ดังนั้น,มันอาจจะอ้างว่าเป็นที่ซ้ำกันออก.
ยังไงก็ตามเคิร์ทแอบมองเป็นคำตอบแล้วคุณจะทำอย่าง:

import geopy.distance

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

เพื่อจะได้ฟังก์ชันที่จะคืนค่ากลับมาเป็นระยะทางใน'description'. แล้วจากสองสามรายชื่อเหมือนของคุณในแบบฟอร์ม

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)

ใช้มันเป็นแบบร่าง,เป็นความคิดที่จะ debugged และทดสอบก่อนจะมีโปรแกรม

2021-11-16 12:03:54

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่