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循环怎么样那个比较好用?