繁体   English   中英

Python:for 循环中的 geopy.distance.geodesic

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM