使用两个文件之间的经度和纬度比较距离

时间:2018-06-03 13:03:34

标签: python python-3.x pandas csv

我有两个要加入的文件。这两个文件的表示如下:

Hour  Longitude Latitude 
12:00 116.5      39.5

另一个文件是这样的:

Some_datas Longitude Latitude Some_other_datas ...
x          116.529     39.521     x                ...
x          116.632     39.471     x                ...
x          116.233     39.556     x                ...
x          116.445     39.990     x                ...
etc..

我想从第二个文件中获取所有行并将它们放在另一个文件中,但前提是经度和纬度相近(让我们说15公里)。

使用我发现的功能:

import geopy.distance

coords_1 = (116.5, 39.5)
coords_2 = (x,y)  # Where x and y are longitude and latitude from the second file

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

如何制作它以便读取第二个文件的所有点,检查它是否在15公里以下,如果是,则将它们放在另一个csv文件中。

1 个答案:

答案 0 :(得分:1)

我认为您需要zip两列,获取距离,然后比较创建一个布尔列表:

from geopy.distance import vincenty

#coordinates are swapped
coords_1 = (39.5, 116.4)
mask = [vincenty(coords_1, (i, j)).km < 15 for i, j in zip(df['Latitude'], df['Longitude'])]
print (mask)
[True, False, False, False]

然后按boolean indexing

过滤
df1 = df[mask]
print (df1)
  Some_datas  Longitude  Latitude Some_other_datas
0          x    116.529    39.521                x

...并写入文件:

df1.to_csv(file, index=False)