计算地球上两点之间的距离。
项目描述
Haversine
使用两点的纬度和经度计算地球上两点之间的距离(以各种单位)。
安装
pip install haversine
用法
计算里昂和巴黎之间的距离
from haversine import haversine, Unit
lyon = (45.7597, 4.8422) # (lat, lon)
paris = (48.8567, 2.3508)
haversine(lyon, paris)
>> 392.2172595594006 # in kilometers
haversine(lyon, paris, unit=Unit.MILES)
>> 243.71250609539814 # in miles
# you can also use the string abbreviation for units:
haversine(lyon, paris, unit='mi')
>> 243.71250609539814 # in miles
haversine(lyon, paris, unit=Unit.NAUTICAL_MILES)
>> 211.78037755311516 # in nautical miles
纬度/经度值需要以[-90,90](纬度)和[-180,180](经度)的度数提供。如果值超出其范围,将引发错误。可以通过通过normalize
参数进行自动归一化来避免这种情况。
haversine.Unit
枚举包含所有支持的单位
import haversine
print(tuple(haversine.Unit))
输出
(<Unit.KILOMETERS: 'km'>, <Unit.METERS: 'm'>, <Unit.MILES: 'mi'>,
<Unit.NAUTICAL_MILES: 'nmi'>, <Unit.FEET: 'ft'>, <Unit.INCHES: 'in'>,
<Unit.RADIANS: 'rad'>, <Unit.DEGREES: 'deg'>)
关于弧度和度的说明
弧度和度返回球面上两点的大圆距离。
注意
- 在单位球体上,角距离等于球面上两点的距离(弧度的定义)
- 当使用"度"时,这个角度只是从弧度转换为度
逆Haversine公式
从给定的向量(距离和方向)和起点计算一个点。当前明确支持正方向(北、东、南、西)和半正方向(东北、东南、西南、西北)的方向。但也允许显式地以弧度表示的角度。
示例:从巴黎找到任意点
from haversine import inverse_haversine, Direction
from math import pi
paris = (48.8567, 2.3508) # (lat, lon)
# Finding 32 km west of Paris
inverse_haversine(paris, 32, Direction.WEST)
# returns tuple (48.85587279023947, 1.9134085092836945)
# Finding 32 km southwest of Paris
inverse_haversine(paris, 32, pi * 1.25)
# returns tuple (48.65279552300661, 2.0427666779658806)
# Finding 50 miles north of Paris
inverse_haversine(paris, 50, Direction.NORTH, unit=Unit.MILES)
# returns tuple (49.58035791599536, 2.3508)
# Finding 10 nautical miles south of Paris
inverse_haversine(paris, 10, Direction.SOUTH, unit=Unit.NAUTICAL_MILES)
# returns tuple (48.690145868497645, 2.3508)
优化两个向量中所有点之间的距离性能
为了在向量上获得性能,您需要安装numpy。为了获得最佳性能,您可以通过添加check=False
来关闭坐标检查,并安装可选包numba和icc_rt。
然后您可以这样做
from haversine import haversine_vector, Unit
lyon = (45.7597, 4.8422) # (lat, lon)
paris = (48.8567, 2.3508)
new_york = (40.7033962, -74.2351462)
haversine_vector([lyon, lyon], [paris, new_york], Unit.KILOMETERS)
>> array([ 392.21725956, 6163.43638211])
通常使用haversine_vector
获取两点之间的距离会慢一些,但比较两个向量之间的距离可以非常快。
组合矩阵
通过将comb
参数设置为True,您可以通过设置不同向量坐标的所有组合来生成矩阵。
from haversine import haversine_vector, Unit
lyon = (45.7597, 4.8422) # (lat, lon)
london = (51.509865, -0.118092)
paris = (48.8567, 2.3508)
new_york = (40.7033962, -74.2351462)
haversine_vector([lyon, london], [paris, new_york], Unit.KILOMETERS, comb=True)
>> array([[ 392.21725956, 343.37455271],
[6163.43638211, 5586.48447423]])
上述示例的输出数组返回以下表格
巴黎 | 纽约 | |
---|---|---|
里昂 | 里昂 <-> 巴黎 | 里昂 <-> 纽约 |
伦敦 | 伦敦 <-> 巴黎 | 伦敦 <-> 纽约 |
根据定义,如果您有一个具有n个元素的向量a和一个具有m个元素的向量b。结果矩阵M将是$n \times m$,矩阵中的元素M[i,j]将是向量a的第i个坐标与向量b的第j个坐标之间的距离。
贡献
克隆项目。
安装pipenv。
运行pipenv install --dev
使用pipenv run pytest
启动测试
项目详情
下载文件
下载适用于您的平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
haversine-2.8.1.tar.gz (7.0 kB 查看哈希)
构建分布
haversine-2.8.1-py2.py3-none-any.whl (7.7 kB 查看哈希)