跳转到主要内容

解决直接和反地球曲率问题。

项目描述

karney简介

PyPI version Documentation CI-tests

karney库提供了C++库GeographicLib的一部分原生Python实现。目前实现以下操作:

  • 计算两个地理位置之间的地表距离。

  • 给定起点、方位角/航向和距离,找到目的地点。

所有函数都是矢量化,当在数组上操作时,提供与编译的C++代码相当的速度。

这些函数的一些常见特性

角度(纬度、经度、方位角)以度或弧度为单位测量。距离以米为单位测量。椭球体指定为[a, f],其中a = 赤道半径,f = 扁率。保持|f| <= 1/50以获得完全的双精度精度。

安装

$ pip install karney

用法

以下给出两个地球曲率问题的解决方案。

地表距离

找到两个位置A和B之间的地表距离sAB(即大圆距离)。忽略A和B的高度,即如果它们不为零高度,则我们寻求位于地球表面的点之间的距离,直接位于A和B上方/下方。使用地球半径6371e3 m。将结果与WGS-84椭球体的精确计算进行比较。

在地球测量学中,这被称为“第二地球测量问题”或“球体/椭球体的反地球测量问题”。

球体的解决方案

>>> import numpy as np
>>> from karney.geodesic import rad, sphere_distance_rad, distance

>>> latlon_a = (88, 0)
>>> latlon_b = (89, -170)
>>> latlons = latlon_a + latlon_b
>>> r_Earth = 6371e3  # m, mean Earth radius
>>> s_AB = sphere_distance_rad(*rad(latlons))[0]*r_Earth
>>> s_AB = distance(*latlons, a=r_Earth, f=0, degrees=True)[0] # or alternatively

>>> 'Ex5: Great circle = {:5.2f} km'.format(s_AB / 1000)
'Ex5: Great circle = 332.46 km'

WGS84椭球体的精确解决方案

>>> s_12, azi1, azi2 = distance(*latlons, degrees=True)
>>> 'Ellipsoidal distance = {:5.2f} km'.format(s_12 / 1000)
'Ellipsoidal distance = 333.95 km'

另请参阅 www.navlab.net上的示例5

A和到B的方位角/距离

我们有初始位置A,以相对于北方的方位角(航向)给出的行进方向,以及沿大圆给定的行进距离sAB。使用地球半径6371e3 m找到目的地点B。

在地球测量学中,这被称为“第一地球测量问题”或“球体的直接地球测量问题”。

>>> import numpy as np
>>> from karney.geodesic import reckon
>>> lat, lon = 80, -90
>>> msg = 'Ex8, Destination: lat, lon = {:4.4f} deg, {:4.4f} deg'

大圆解决方案

>>> lat2, lon2, azi_b = reckon(lat, lon, distance=1000, azimuth=200, a=6371e3, f=0, degrees=True)

>>> msg.format(lat2, lon2)
'Ex8, Destination: lat, lon = 79.9915 deg, -90.0177 deg'

>>> np.allclose(azi_b, -160.0174292682187)
True

精确解决方案

>>> lat_b, lon_b, azi_b = reckon(lat, lon, distance=1000, azimuth=200, degrees=True)
>>> msg.format(lat_b, lon_b)
'Ex8, Destination: lat, lon = 79.9916 deg, -90.0176 deg'

>>> np.allclose(azi_b, -160.01742926820506)
True

另请参阅www.navlab.net上的示例8

贡献

有兴趣贡献吗?请查看贡献指南。请注意,本项目遵循行为准则。通过贡献本项目,您同意遵守其条款。

许可

karney由Per A. Brodtkorb创建,并采用MIT/X11许可证条款。

致谢

karneyPython编写,由Per A. Brodtkorb在FFI(挪威国防研究机构)基于Charles Karney为MatlabGNU Octave编写的地理工具箱编写。karney.geodesic模块是Matlab/Octave GeographicLib工具箱的矢量化重实现。

内容基于Karney, 2013的文章。因此,使用本软件的出版物应引用该文章。

使用cookiecutterpy-pkgs-cookiecutter模板创建了karney包结构。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。

源分布

karney-1.0.10.tar.gz (17.4 kB 查看哈希)

上传时间

构建分布

karney-1.0.10-py3-none-any.whl (17.8 kB 查看哈希)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面