表示地理坐标的方法
项目描述
功能
表示地理坐标(纬度和经度)的方法,包括以下功能:
- 将来自几乎所有格式的纬/经字符串转换为LatLon对象(类似于datetime库的stptime方法)
- 自动将十进制度、十进分和度、分、秒信息存储在LatLon对象中
- 将纬/经信息输出到格式化的字符串(类似于datetime库的strftime方法)
- 将项目纬/经坐标投影到其他一些proj投影
- 使用FAI或WGS84近似计算纬/经对之间的距离和航向
- 通过偏移初始坐标的距离和航向创建新的LatLon对象
- 从一个LatLon对象减去另一个对象将创建一个具有距离和航向属性的GeoVector对象(类似于datetime库的timedelta对象)
- 将Latlon对象和GeoVector对象相加或相减将创建一个新LatLon对象,其坐标由GeoVector对象的距离和航向调整
- GeoVector对象可以相加、相减、相乘或相除
安装
LatLon仅在Python 2.7、3.6、3.7中进行了测试
通过pip安装
$ pip install latlon3
需要以下非标准库
- pyproj
模块导入
import latlon
README中描述的子类可以在latlon模块下找到。
使用说明
LatLon 的使用主要通过 LatLon 类,该类旨在存储一对纬度和经度对象。可以使用 string2latlon 方法将字符串转换为 LatLon 对象,使用 string2geocoord 方法转换为纬度或经度对象。或者,可以通过减去两个 LatLon 对象来构建一个 LatLon 对象,或者通过添加或减去一个 Latlon 对象和一个 GeoVector 对象来构建。
纬度或经度构造
纬度或经度的构造分别通过 Latitude 和 Longitude 类实现。您可以通过十进制度、度分或度分秒的任意组合传递纬度或经度坐标。或者,您可以使用函数 string2geocoord 传递一个包含单个纬度或经度的格式化字符串,或者使用 string2latlon 传递表示纬度和经度的字符串对。
字符串格式化
string2latlon 和 string2geocoord 都接受一个格式化字符串,该字符串类似于 datetime 的 strftime 函数中使用的 format 关键字。指示字符(例如 H 或 D)放置在特定分隔符字符(%)之间,以指定坐标字符串的格式化方式。可能的值如下
- H 是半球标识符(例如 N、S、E 或 W)
- D 是十进制度坐标(例如 5.833)
- d 是度坐标(例如 5)
- M 是十进分钟坐标(例如 54.35)
- m 是分钟坐标(例如 54)
- S 是秒坐标(例如 28.93)
- 任何其他字符(例如‘ ‘或‘, ‘)将作为上述组件之间的分隔符。
- 所有组件应由 % 字符分隔。例如,如果 coord_str 是‘5, 52, 59.88_N’,则 format_str 将为‘d%, %m%, %S%_%H’
重要
目前无法使用的一种格式是半球标识符和度或十进度之间没有任何字符分隔的格式。例如,‘5 52 59.88 N’ 是有效的,而‘5 52 59.88N’ 是无效的。
字符串输出
LatLon 以及 Latitude 和 Longitude 对象都包含一个 to_string() 方法,用于输出格式化的坐标。
投影
使用 LatLon.project 将地理坐标转换为所选投影。需要传递一个 pyproj 或 basemap 投影。
距离和航向计算
LatLon 对象有一个 distance() 方法,它接受一个 LatLon 对象作为参数。默认情况下,distance() 将使用 WGS84 椭球体计算两个坐标之间的大圆距离。要使用更近似的 FAI 球体,请将 ellipse 设置为“sphere”。可以使用 heading_initial() 和 heading_reverse() 方法以类似的方式计算初始航向和反向航向(以度为单位)。或者,通过从一个 LatLon 对象减去另一个 LatLon 对象,将返回一个具有 heading 和 distance 属性的 GeoVector 对象。
通过从另一个对象偏移创建新的 LatLon 对象
使用 LatLon 对象的 offset() 方法,该方法接受一个初始航向(以度为单位)和距离(以千米为单位),以返回一个偏移坐标的新 LatLon 对象。您还可以通过添加或减去一个 LatLon 对象和一个 GeoVector 对象来执行相同的操作。
示例
从坐标创建 LatLon 对象
>> palmyra = LatLon(Latitude(5.8833), Longitude(-162.0833)) # Location of Palmyra Atoll in decimal degrees
>> palmyra = LatLon(5.8833, -162.0833) # Same thing but simpler!
>> palmyra = LatLon(Latitude(degree = 5, minute = 52, second = 59.88),
>> Longitude(degree = -162, minute = -4.998) # or more complicated!
>> print(palmyra.to_string('d% %m% %S% %H')) # Print coordinates to degree minute second
('5 52 59.88 N', '162 4 59.88 W')
从格式化字符串创建 Latlon 对象
>> palmyra = string2latlon('5 52 59.88 N', '162 4 59.88 W', 'd% %m% %S% %H')
>> print(palmyra.to_string('d%_%M')) # Print coordinates as degree minutes separated by underscore
('5_52.998', '-162_4.998')
执行一些计算
>> palmyra = LatLon(Latitude(5.8833), Longitude(-162.0833)) # Location of Palmyra Atoll
>> honolulu = LatLon(Latitude(21.3), Longitude(-157.8167)) # Location of Honolulu, HI
>> distance = palmyra.distance(honolulu) # WGS84 distance in km
>> print distance
1766.69130376
>> print(palmyra.distance(honolulu, ellipse = 'sphere')) # FAI distance in km
1774.77188181
>> initial_heading = palmyra.heading_initial(honolulu) # Heading from Palmyra to Honolulu on WGS84 ellipsoid
>> print(initial_heading)
14.6907922022
>> hnl = palmyra.offset(initial_heading, distance) # Reconstruct Honolulu based on offset from Palmyra
>> print(hnl.to_string('D')) # Coordinates of Honolulu
('21.3', '-157.8167')
使用 GeoVectors 操作 LatLon 对象
>> vector = (honolulu - palmyra) * 2 # A GeoVector with 2x the magnitude of a vector from palmyra to honolulu
>> print(vector) # Print heading and magnitude
14.6907922022 3533.38260751
print(palmyra + (vector/2.0)) # Recreate the coordinates of Honolulu by adding half of vector to palmyra
21.3, -157.8167
版本
1.0.2 - 在 Eclipse IDLE 上测试了 Python 2.7。请告诉我任何问题。
变更日志
1.0.3 (2019年6月/16日)
- 支持 Python 2.7 和 Python 3
1.0.2 (2014年10月/14日)
- GeoVector 类现在是抽象类,以确保任何子类都使用正确的 API
- 将方法range180和range360添加到经度类中,以在-180到180格式报告的经度和在0到360格式报告的经度之间进行相互转换。为确保所有操作(如半球分配)按预期工作,初始化经度对象时,以0到360格式报告的经度将自动转换为-180到180格式。
1.0.1 (2014年9月2日)
- 修复了在GeoVector中where属性theta在某些情况下被当作航向处理的问题(即从正北开始并顺时针继续),尽管实际上它是一个角度(即从(1, 0)开始并逆时针继续)。现在已将属性名称更改为heading以消除混淆。局部变量theta用于涉及角度的计算。
- 为LatLon和GeoVector类添加了测试函数。
- 为LatLon和GeoVector类添加了几乎相等的方法来处理十进制度量规范中的浮点数错误。
- LatLon.project现在返回(x, y)而不是(y, x),以更符合公认的传统。
0.91 (2014年8月28日)
- GeoCoord类的度、分、秒属性现在强制转换为浮点类型。
0.90 (2014年8月28日)
- 更新了GeoCoord类的魔法方法。
- 添加了从标量实例化LatLon的选项。
0.80 (2014年8月27日)
- 添加了GeoVector类来处理两个LatLon对象之间的向量。
- 清理了LatLon、Latitude、Longitude、GeoCoord和GeoVector类的str和repr方法。
0.70 (2014年8月27日)
- 已弃用LatLon.distance_sphere方法。从现在起,使用distance(other, ellipse = 'sphere')代替。
- 添加了LatLon.bearing方法,以返回两个LatLon对象之间的初始航向。
- 添加了LatLon.offset方法,以返回一个新的LatLon对象,该对象是从初始LatLon对象加上航向和距离计算得出的。
0.60 (2014年8月27日)
- 添加了兼容比较、否定、加法和乘法魔法方法。
0.50 (2014年8月20日)
- 首次发布
项目详情
latlon3-1.0.4.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e2662d34bfb85c8d32de4f1c3d134a8a79fd06e0f82d3f3249906625c79328ce |
|
MD5 | b263597d57c3abe4277af9d3185d9cd2 |
|
BLAKE2b-256 | 3d0581e5d146ed5d15b122e4bae59634f8ef1bb3f25373a08f2c498d44644d5d |