摘要: 在 PROJ.4 里边集成了许多的制作地图用的投影参数,并且实现了一些命令行程序,来进行地图投影、投影转换,以及其他投影相关的操作。 proj 是主要的命令,我们重点来看一下此命令的用法。 需要注意的是,proj 在进行投影转换时,是使用交互方式运行的。当使用...
在 PROJ.4
里边集成了许多的制作地图用的投影参数,并且实现了一些命令行程序,来进行地图投影、投影转换,以及其他投影相关的操作。
proj 是主要的命令,我们重点来看一下此命令的用法。 需要注意的是,proj 在进行投影转换时,是使用交互方式运行的。当使用命令行设定的正确的投影空间参考环境后。交互式输入经纬度坐标,会产生在此空间参考下的投影后的空间坐标。
投影转换
我国常用的地图投影主要有,Albers,Lambert,Gauss-Kruger,UTM投影。
中国所使用的 Albers 的参数是双标准纬线,椭球体为Krassovsky。 用 PROJ.4 表示为:
+proj=aea +ellps=krass +lon_0=105 +lat_1=25 +lat_2=47
下边将用中国的 Albers投影,简称为 Albers_China来作个简单的投影转换。命令的作用是将经纬度坐标转换为定义好的坐标系统中的坐标。
$proj +proj=aea +ellps=krass +lon_0=105 +lat_1=25 +lat_2=47 105 36 0.00 3847866.97 104d30' 36d30' -43977.163904491.79 104.5N 36.5E -43977.163904491.79
同样也可以进行反转,即将 Albers转为经纬度,只要在命令中加入参数-I
。
$ proj +proj=aea +ellps=krass +lon_0=105 +lat_1=25 +lat_2=47 -I 102064.08 2503934.26 106dE 24dN
经纬度的反转输入与输出
在这里转换的过程中始终是按经度、纬度$(x,y)$的顺序放进的。你也许会想将它们的方向掉转。
如果是输入时想转可在命令中加 -r
,如果是输出想掉转,可以是加 -s
$ proj +proj=aea +ellps=krass +lon_0=105 +lat_1=25 +lat_2=47 -r -s 36 105 3847866.97 0.00 33 104 3509623.92 -91933.97
命令行中的EOF
Proj.4 是一个典型的Unix程序,除了最基本的用法,可以使用Unix的管道工具,来简化(加强)输入与输出。
如,可以进行批量转换:
$ proj +proj=aea +ellps=krass +lon_0=105 +lat_1=25 +lat_2=47 <105 36 > 104 36 > 106 24 > EOF 0.00 3847866.97 -88522.43 3848312.80 102064.08 2503934.26
使用文件来进行处理
同样也可以通过文件来进行批量转换:
对于文本文件lat_lon.test
,其内容如下:
105dE 36dN 104dE 36dN 106dE 24dN
使用下面的命令进行转换:
$ proj +proj=aea +ellps=krass +lon_0=105 +lat_1=25 +lat_2=47 ~/lat_lon.test > alberst.test
生成的:alberst.test
,内容如下:
0.00 3847866.97 -88522.43 3848312.80 102064.08 2503934.26
你也可以在文件中加注释和对坐标点的说明,在转换后仍可以保留:
lat_lon.test #it's just a test for convert file format 105dE 36dN not Lanzhou 104dE 36dN Lanzhou 106dE 24dN Unknow place
命令:
$ proj +proj=aea +ellps=krass +lon_0=105 +lat_1=25 +lat_2=47 ~/lat_lon.test >albers.test
生成的albers.test
,内容如下:
#it's just a test for convert file format 0.00 3847866.97 not Lanzhou -88522.43 3848312.80 Lanzhou 102064.08 2503934.26 Unknow place
在命令上边的~/lat_lon.test
是输入的文件在下指的是当前目录,Windows下没试过,不过可以用绝对路径。 >
是重定向,输出文件。
地图单位
其中 PROJ.4 默认的单位为米(meter), 我们设置参数 +units
来控制输入的坐标单位。
$ proj +proj=aea +ellps=krass +lon_0=105 +lat_1=25 +lat_2=47 +units=km -I <0 3847.86697 > -88.52243 3848.31280 > 102.06408 2503.93426 > EOF 105dE 36dN 104dE 36dN 106dE 24dN