proj 经纬坐标模块

简介

proj不光是一些应用程序的集合,它更是一个库,其它语言可以来调用它,来进行更高级的开发和应用。在proj安装上之后,它本身作为库,可以被C\C 来调用。而proj本身是一个开源的项目,同时Python也是一个开源的编程语言。在Python里的Proj库称为Pyproj。

Pyporj是Python下的proj。可以很方便的对点来进行地图投影转换。同时在它的基础上开发出更高级的应用。Pyproj包里包括两个类,Proj类和Geod类。

Pyproj安装

pip install pyproj

Proj类与Geod类介绍

Proj类相当于前面所说的proj的功能。可以进行地图投影的变换从经纬度转为xy投影坐标,也可以反转。也可以在不同的地图投影之间转换。

Geod类相当于前边介绍的proj里的一个应用程序Geod。可以很方便的计算地球上任意两点的大圆距离,以及它们的相对方位。同时,也可根据方位和大圆距离来反算出另一点的经纬度。

其处理的输入坐标可以是python数组,list\元组,scalar 或者numpy/Numeric/numarray arrays。

在导入Pyproj后可以用其内部的函数test()会运行一些例子。

Proj类

Proj类主要是进行经纬度与地图投影坐标转换,以及反转。可以参考前边对proj的介绍。

当初始化一个Proj类的时例时,地图投影的参数设置可以用关键字\值的形式。关键字和值的形式也可以用字典,或关键字参数,或者一个proj4 字符串(与proj的命令兼容)。

当调用一个包含经纬度的Proj类的实例时,将会把十进制的经纬度,转换成为地图的xy坐标。

如果可选的关键字'inverse'等于True的时候(默认为假),则进行相反的转换。

如果关键字'radians'为True的话(默认为假),则经纬度的单位则是弧度,而不是度。

如果可选的关键字'errcheck' 为真的话(默认为假),一个异常将会被给出,如果转换无效的话。如果为假的话,且转换无效时,没有异常抛出,但会返回一个无效值1.e30。

可以将经纬度分别存入一个list或array。可以进行更高效率的转换。

输入的值应当是双精度(如果输入的不是,它们将会被转为双精度)。

虽然Proj可以和numpy and regular python array objects,python sequences and scalars,但是用array 对象速度快一些。

初始化一个投影

Proj4投影控制参数或者是以字典形式给出,或者是以关键字参数给出,也可以用proj4的形式给出字符串。

from pyproj import Proj import math # 初始化一个投影,中国等积投影,使用proj4格式 p = Proj(' proj=aea lon_0=105 lat_1=25 lat_2=47 ellps=krass') x, y = p(105, 36) # 进行格式转换 print '%.3f,%.3f' % (x, y) # 按格式输出 # 结果 0.000,3847866.973 lon, lat = p(x, y, inverse=True) print '%.3f,%.3f' % (lon, lat) # 按格式输出 # 结果 105.000,36.000 x, y = p(math.pi * 105 / 180, math.pi * 36 / 180, radians=True) print '%.3f,%.3f' % (x, y) # 结果 0.000,3847866.973 lons = (105, 106, 104) lats=(36,35,34) x,y=p(lons,lats) # 将经纬度放入元组中 print '%.3f,%.3f,%.3f' %x # 结果 0.000,89660.498,-90797.784 print '%.3f,%.3f,%.3f' %y # 结果 3847866.973,3735328.476,3622421.811 print type(x) # 结果 <type 'tuple'> print zip(x, y) # 结果 [(0.0, 3847866.972516728), (89660.4984840706, 3735328.4764740206), (-90797.78390394611, 3622421.810965182)]

utm=Proj(proj='utm',zone=48,ellps='WGS84') # 用关键字定义一个投影 x,y=utm(105,36) print x,y # 结果 500000.0 3983948.45334

两个Proj实例的函数

is_geocent(self) 返回True当投影为geocentric (x/y) coordinates。

is_latlong(self) 返回True当为地理坐标系经纬度时。

utm=Proj(proj='utm',zone=48,ellps='WGS84') # 用关键字定义一个投影 x,y=utm(105,36) print x,y # 结果 500000.0 3983948.45334 print utm.is_geocent() # 结果 False print utm.is_latlong() # 结果 False latlong=Proj(' proj=latlong') print latlong.is_latlong() # 结果 True print latlong.is_geocent() # 结果 False

源码位置

https://github.com/pyproj4/pyproj

结语

这个模块也是在阅读公司框架的时候发现的,如果诸位有更好用的模块,望大家在下方留言交流

#python##坐标##编程#

python如何建坐标系(一篇文章搞定Pythonproj)(1)

python如何建坐标系(一篇文章搞定Pythonproj)(2)

python如何建坐标系(一篇文章搞定Pythonproj)(3)

,