表示地理坐标的方法
项目描述
特征
表示地理坐标(纬度和经度)的方法,包括:
- 将几乎任何格式的 lat/lon 字符串转换为 LatLon 对象(类似于 datetime 库的 stptime 方法)
- 在 LatLon 对象中自动存储十进制度、十进制度分和度、分、秒信息
- 将 lat/lon 信息输出为格式化字符串(类似于 datetime 库的 strftime 方法)
- 将纬度/经度坐标投影到其他项目投影中
- 使用 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 对象和一个 GeoVector 对象来构造一个 LatLon 对象。
纬度或经度构造
经度构造的纬度分别是通过纬度和经度类。您可以传递十进制度、度和分或度分和秒的任意组合的纬度或经度坐标。或者,您可以使用函数 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 或底图投影。
距离和航向计算:
LatLon 对象有一个 distance() 方法,它接受第二个 LatLon 对象作为参数。distance() 将默认使用 WGS84 椭球计算两个坐标之间的大圆距离。要使用更近似的 FAI 球体,请将椭圆设置为“球体”。可以使用 heading_initial() 和 heading_reverse() 方法以类似的方式计算初始和反向航向(以度为单位)。或者,从另一个中减去一个 LatLon 对象将返回一个带有属性标题和距离的 GeoVector 对象。
通过从另一个对象偏移创建一个新的 LatLon 对象:
使用 LatLon 对象的 offset() 方法,该方法采用初始航向(以度为单位)和距离(以 km 为单位)返回偏移坐标处的新 LatLon 对象。此外,您可以通过使用 GeoVector 对象添加或减去 LatLon 对象来执行相同的操作。
例子
从坐标创建一个 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
- 向 Longitude 类添加了方法 range180 和 range360 以在报告的 -180 到 180 格式的经度和以 0 到 360 格式报告的经度之间进行相互转换。为确保半球分配等所有操作按预期工作,在初始化经度对象时,以 0 到 360 格式报告的经度会自动转换为 -180 到 180 格式。
1.0.1(2014 年 9 月/2 日)
- 修复了 GeoVector 中的属性 theta 在某些情况下被视为航向(即从正北开始并顺时针继续)的问题,即使它实际上是一个角度(即从 (1, 0) 开始并逆时针继续)。属性名称现在已更改为标题以消除混淆。局部变量 theta 用于涉及角度的计算。
- 使用 pytest 为 LatLon 和 GeoVector 类添加了测试功能
- 向 LatLon 和 GeoVector 类添加了 most_equal 方法,以处理十进制度数规范中的浮点错误
- 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 |
|
布莱克2-256 | 3d0581e5d146ed5d15b122e4bae59634f8ef1bb3f25373a08f2c498d44644d5d |