[英]Python: geopy.distance.geodesic in a for loop
我有以下数据,我正在尝试使用纬度和经度计算从一个观测到另一个观测的地理距离。
trip3
>>
trip_id latitude longitude
0 9367efd103c7314d70446927130c9b98778fbbd0 57.728867 11.949463
1 8a8449635c10cc4b8e7841e517f27e2652c57ea3 57.728867 11.949463
2 8a8449635c10cc4b8e7841e517f27e2652c57ea3 57.728954 11.949368
3 8a8449635c10cc4b8e7841e517f27e2652c57ea3 57.728867 11.949463
4 8a8449635c10cc4b8e7841e517f27e2652c57ea3 57.728954 11.949368
... ... ... ...
30473 019ebd48fe9c9ab20051e9de1d5ddfc6fd13c55b 57.691685 12.009715
30474 019ebd48fe9c9ab20051e9de1d5ddfc6fd13c55b 57.691452 12.010811
30475 019ebd48fe9c9ab20051e9de1d5ddfc6fd13c55b 57.690945 12.011210
30476 019ebd48fe9c9ab20051e9de1d5ddfc6fd13c55b 57.690468 12.011681
30477 d0fe1a916d47228c09911b487146731d75c7d728 57.690361 12.011670
要计算我正在尝试的距离:
# Empty string
current_trip_id = ""
# Creating a new column for the distance between observations of the same trip
# all rows have a default value of 0
trip3["geopy_distance"] = 0
# Loop
for index,row in trip3.iterrows():
if row["trip_id"] == current_trip_id:
lat_coor = row["latitude"]
lon_coor = row["longitude"]
final_pos = row["latitude"], row["longitude"]
my_dist = geopy.distance.geodesic(initial_pos[0], initial_pos[1], final_pos[0], final_pos[1])
trip3.loc[index, "geopy_distance"] = my_dist
# Update loop
current_trip_id = row["trip_id"]
initial_pos = row["latitude"], row["longitude"]
但是,我收到错误:
单个数字已传递给 Point 构造函数。 这可能是一个错误,因为构建一个只有纬度的 Point 似乎毫无意义。 如果这正是其含义,则明确传递零经度以消除此错误。
此代码适用于定义的半正弦距离函数,但不适用于 geopy。 我有兴趣看看两者有何不同。 所以我只想计算地理距离,因为据说这往往比半正弦更准确。
如何改进我的循环来计算这个距离?
根据文档, geopy.distance.geodesic
将其参数作为 (lat, lon) 元组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.