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

Posted

技术标签:

【中文标题】Python:for循环中的geopy.distance.geodesic【英文标题】:Python: geopy.distance.geodesic in a for loop 【发布时间】:2021-09-26 13:58:16 【问题描述】:

我有以下数据,我正在尝试使用它们的纬度和经度计算从一个观测到另一个观测的地理距离。

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 构造函数。这可能是一个错误,因为仅用一个纬度构造一个点似乎毫无意义。如果这正是本意,则显式传递零经度以消除此错误。

此代码适用于定义的半正弦距离函数,但不适用于 geopy。我有兴趣看看这两者有何不同。所以我只想计算geopy距离,因为据说这比haversine更准确。

如何改进我的循环来计算这个距离?

【问题讨论】:

【参考方案1】:

根据the documentation,geopy.distance.geodesic 将其参数作为 (lat, lon) 元组。

【讨论】:

更改为 '''my_dist = geopy.distance.geodesic((initial_pos[0], initial_pos[1]), (final_pos[0], final_pos[1]))''' 解决了问题。谢谢!

以上是关于Python:for循环中的geopy.distance.geodesic的主要内容,如果未能解决你的问题,请参考以下文章

python中的while循环与for循环怎么样那个比较好用?

python为啥for循环只查到一次数据

python 双层for循环,在第二层的for循环中的else中的continue,会退出到第一层for循环继续执行

python中for循环的用法

for循环求和中的for循环正在覆盖数据值python

python中for循环中的循环变量