Python - Расчет расстояний из двух разных списков длинных / лат - PullRequest
0 голосов
/ 24 марта 2020

У меня есть два фрейма данных с координатами долготы и широты. df1 имеет 20 координат, а df2 имеет 600 координат. То, что я пытаюсь сделать, это взять каждую координату в df1 и найти ближайшую координату в df. Например, первая координата в df1 - 52.2296756, 21.0122287, поэтому мне нужно как-то создать l oop, чтобы взять эти два значения и вычислить расстояние против каждой координаты в df2 и вернуть ту, которая имеет наименьшее расстояние.

У меня есть этот код:

import geopy.distance
import pandas as pd

coords_1 = (52.2296756, 21.0122287)
coords_2 = (52.406374, 16.9251681)

print(geopy.distance.vincenty(coords_1, coords_2).km)

Как мне написать эту функцию, чтобы взять первую координату из df1 и выполнить вычисление для каждой координаты в df и вернуть ближайшую? 1006 *

1 Ответ

1 голос
/ 24 марта 2020

Хорошо, вы можете перебирать свой фрейм данных и вычислять расстояние один за другим, но я не рекомендую его, если у вас есть большие данные.

# Find the minimum distances
min_distances = []
longitudes = []
latitudes = []

for index1, row1 in df1.iterrows():
  coords_1 = (row1['longitude'], row1['latitude'])
  min_distance = 0
  long = 0
  lat = 0

  for index2, row2 in df2.iterrows():
    coords_2 = (row2['longitude'], row2['latitude'])

    if min_distance == 0: 
      min_distance = geopy.distance.vincenty(coords_1, coords_2).km
      continue

    distance = geopy.distance.vincenty(coords_1, coords_2).km
    if distance < min_distance:
      min_distance = distance
      long = row2['longitude']
      lat = row2['latitude']

  min_distances.append(min_distance)
  longitudes.append(long)
  latitudes.append(lat)

# Create a column based on the result
df1['min_distance'] = min_distances
df1['long'] = longitudes
df1['lat'] = latitudes
...