地理坐标表示方法

latlon3的Python项目详细描述


####特点 表示地理坐标(纬度和经度)的方法,包括:

>;*将lat/lon字符串从几乎任何格式转换为latlon对象(类似于datetime库的stptime方法) >;*在Latlon对象中自动存储十进制度数、十进制分钟数和度数、分钟数和秒数信息 >;*将lat/lon信息输出为格式化字符串(类似于datetime库的strftime方法) >;*将纬度/经度坐标投影到其他项目投影中 >;*使用FAI或WGS84近似值计算纬度/经纬度对之间的距离和航向 >;*通过将初始坐标偏移距离和方向来创建新的latlon对象 >;*从另一个latlon对象中减去一个将创建具有距离和方向属性的geovirect对象(类似于datetime库的timedelta对象) >;*添加或减去一个latlon对象和一个geovirect对象将创建一个新的latlon对象,其坐标由geovirect对象的距离和方向调整 >;*地理矢量对象可以加、减、乘或除

####安装 Latlon只在Python2.7和3.6中测试过

通过PIP安装:

< < > > $pip安装latlon

需要以下非标准库:

>;*pyproj

####使用说明 latlon的用法主要是通过latlon类来实现的,该类被设计为容纳一对经纬度对象。可以使用string2latlon方法将字符串转换为latlon对象,使用string2geoord将字符串转换为纬度或经度对象。或者,可以通过减去两个latlon对象,或加上或减去一个latlon对象和一个地理矢量对象来构造latlon对象。

#####经纬度结构 经纬度构造是通过类纬度和经度分别进行的。可以以十进制度数、度数和分钟或度数分和秒的任意组合传递纬度或经度坐标。或者,您可以使用函数string2geocord传递格式化字符串,该函数用于包含单个纬度或经度的字符串,或使用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',则格式为'd%,%m%,%s%,%h'

#####重要的 一种当前不起作用的格式是半球标识符和度数或十进制度数不由任何字符分隔的格式。例如,"5 52 59.88 N"有效,而"5 52 59.88 N"无效。

#####字符串输出: 纬度和经度对象都包含一个to_string()方法,用于输出格式化坐标。

#####投影: 使用latlon.project将地理坐标转换为选定的投影。要求您传递Pyproj或Basemap投影。

#####距离和航向计算: latlon对象有一个distance()方法,该方法接受第二个latlon对象作为争论。默认情况下,distance()将使用WGS84椭球计算两个坐标之间的大圆距离。要使用更近似的fai球体,请将椭圆设置为"球体"。可以使用heading_initial()和heading_reverse()方法以类似的方式计算初始和反向标题(以度为单位)。或者,从另一个latlon对象中减去一个latlon对象将返回一个带有属性heading和distance的geovector对象。

#####通过与另一个对象的偏移创建新的Latlon对象: 使用latlon对象的offset()方法,该方法使用初始航向(以度为单位)和距离(以公里为单位)在偏移坐标处返回新的latlon对象。此外,您还可以通过添加或减去带有地理矢量对象的latlon对象来执行相同的操作。

####实例 从坐标创建latlon对象:

`巨蟒 >;>palmyra=latlon(纬度(5.8833),经度(-162.0833));以十进制度数表示的palmyra环礁的位置 >;>palmyra=latlon(5.8833,-162.0833)相同但更简单! >;gt;帕尔米拉=拉特隆(纬度(度=5,分=52,秒=59.88), >;>;__________________ >;打印(palmyra.to_string('d%%m%%s%%h')打印坐标到度分秒 ('5 52 59.88北','162 4 59.88西')

从格式化字符串创建latlon对象:

`巨蟒 >;gt;帕尔米拉=String2Latlon('552 59.88 N','162 4 59.88 W','D%%M%%S%%H') >;gt;打印(palmyra.to_string('d%%m'))打印坐标为度分钟,用下划线分隔 ('5_52.998','-162_4.998')

执行一些计算:

`巨蟒 >;>palmyra=latlon(纬度(5.8833),经度(-162.0833))palmyra环礁的位置 >;gt;檀香山=纬度(21.3),经度(-157.8167))檀香山的位置,Hi >;gt;距离=帕尔米拉距离(火奴鲁鲁)WGS84距离(单位:km) >;gt;打印距离 1766.69130376号 >;gt;打印(palmyra.distance(檀香山,椭圆='sphere'))fai distance(公里) 1774.77188181年 >;gt;初始航向=帕尔米拉。初始航向(檀香山)在WGS84椭球上从帕尔米拉到檀香山的航向 >;gt;打印(初始标题) 14.690792022号 >;gt;hnl=palmyra.offset(初始航向,距离)根据palmyra的偏移量重建檀香山 >>;打印(hnl.to_string('d'))檀香山坐标 ('21.3','-157.8167')

使用地理向量操作latlon对象:

`巨蟒 >;gt;矢量=(火奴鲁鲁-帕尔米拉)*2是从帕尔米拉到火奴鲁鲁矢量大小的两倍的地理矢量 >;gt;打印(矢量)打印标题和大小 14.6907920223538260751 print(palmyra+(vector/2.0))将vector的一半添加到palmyra中,重新创建檀香山的坐标 21.3,-157.8167

####版本 1.0.2-使用EclipseIdle在Python2.7上测试。如有任何问题,请通知我。

####更改日志

#####1.0.3(2019年6月16日) >;*支持Python2.7和Python3

#####1.0.2(2014年10月14日)

>;*类GeoVector现在是一个抽象类,以确保任何子类使用正确的API >;*将range180和range360方法添加到类经度,以便在报告的-180到180格式的经度和报告的0到360格式的经度之间进行相互转换。为确保所有操作(如半球赋值)按预期工作,当初始化经度对象时,以0到360格式报告的经度将自动转换为-180到180格式。

#####1.0.1(2014年9月2日)

>;*修复了在某些情况下,尽管实际上是一个角度(即从(1,0)开始并继续逆时针方向),但在地理向量中属性theta被视为航向(即从正北开始并继续顺时针方向)的问题。属性名现在已更改为heading以消除混淆。局部变量θ用于涉及角度的计算。 >;*为Latlon类和GeoVector类添加了Pytest测试函数 >;*在latlon和geov矢类中添加了几乎等于的方法来处理十进制度数规范中的浮点错误 >;*latlon.project现在返回(x,y)而不是(y,x)以更符合接受的约定。

#####0.91(2014年8月28日)

>;*geocoord类的degree、minute和second属性现在强制为float类型

#####0.90(2014年8月28日)

>;*更新了geocoord类的magic方法 >;*添加了从标量实例化latlon的选项

#####0.80(2014年8月27日)

>;*添加了GeoVector类来处理两个Latlon对象之间的向量 >;*清理了latlon、纬度、经度、地理坐标和地理向量类的str和repr方法

#####0.70(2014年8月27日)

>;*不推荐使用latlon.distance_sphere方法。从现在开始使用距离(其他,椭圆='球体') >;*添加latlon.bearing方法以返回两个latlon对象之间的初始方向角 >;*添加latlon.offset方法以返回新的latlon对象,该对象是从初始latlon对象加上方向角和距离计算出来的

#####0.60(2014年8月27日)

>;*增加了与比较、求反、加法和乘法魔术方法的兼容性

#####0.50(2014年8月20日)

>;*首次发布

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我的int值在SharedReferences中不被记住   java如何编辑Spring可分页对象?   java如何在gradle中单独调用任务   jvm以编程方式设置最大java堆大小   java如果满足多个条件,如何使用If语句计算数字?   如何在java中从json文件中获取特定值   如何在Sphinx4中为Java语音识别添加自定义语法?   java int[]copy=data;//当数据是数组时会发生什么?   java豪猪管理器。停下来。destroy()不起作用   安卓在API级别28中找不到画布变量   基于SOLID的java冗余   用于talend作业的java Liferay和portlet   从java到安卓的视频流   java获取在控件的类定义中添加自定义控件的场景大小   awt Java IndexOutOfBoundsException   java如何使用Spring JmsTemplate更改MQ头   java遍历数组并打印每个对象   java Google Map api v2标记在我旋转手机和地图“刷新”之前不会移动