首页  >  文章  >  后端开发  >  如何在Python中快速计算经纬度坐标之间的距离?

如何在Python中快速计算经纬度坐标之间的距离?

Barbara Streisand
Barbara Streisand原创
2024-10-31 23:36:45962浏览

How Can I Calculate Distances Between Latitude and Longitude Coordinates Quickly in Python?

快速半正弦近似:Python/Pandas 解决方案

简介

计算纬度之间的距离经度坐标是地理空间数据分析中的常见任务。然而,对数百万行使用传统的半正矢公式可能会导致计算成本高昂。本文提出了一种使用 NumPy 向量化来缩短执行时间的快速替代方案。

向量化 NumPy 解决方案

NumPy 向量化方法利用对数据数组进行操作的 NumPy 函数,避免了Python 中循环的速度很慢。以下是半正弦函数的矢量化版本:

<code class="python">import numpy as np

def haversine_np(lon1, lat1, lon2, lat2):
    """
    Calculate the great circle distance between two points
    on the earth (specified in decimal degrees)

    All args must be of equal length.    

    """
    lon1, lat1, lon2, lat2 = map(np.radians, [lon1, lat1, lon2, lat2])

    dlon = lon2 - lon1
    dlat = lat2 - lat1

    a = np.sin(dlat/2.0)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon/2.0)**2

    c = 2 * np.arcsin(np.sqrt(a))
    km = 6378.137 * c
    return km</code>

用法

要使用矢量化解决方案,输入纬度和经度值应为 NumPy 数组。例如,要计算 Pandas DataFrame 的距离,您可以提取必要的列并使用 hasrsine_np 函数,如下所示:

<code class="python">df = pd.DataFrame(...your_dataframe...)
lon1, lat1, lon2, lat2 = df['lon1'], df['lat1'], df['lon2'], df['lat2']
df['distance'] = haversine_np(lon1, lat1, lon2, lat2)</code>

优点

NumPy 向量化该方法显着提高了性能,可以立即计算数百万个距离。这是通过避免循环缓慢并利用 NumPy 的高效数组操作来实现的。

以上是如何在Python中快速计算经纬度坐标之间的距离?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn