python如何建坐标系(一篇文章搞定Pythonproj)
简介
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##坐标##编程#
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com