当前位置:首页 > GDAL学习笔记 - 图文
开ArcGIS验证一下,没错。 Toggle line numbers Toggle line numbers 1 In projected or local coordinates 2 Left: 590000.000000 3 Right: 609000.000000 4 Top: 4928000.000000 5 Bottom: 4914000.000000 好了,有了这些,就可以把图像和地理坐标联系起来了。有了地理坐标,就可以把图像在照屏幕上预先定好的坐标系画出来了。 需要注意的一点是,对于GeoTiff数据源来说,坐标系统和仿射变换参数有两种存储方式,一种是直接存储在.tif文件内部,这种存储方式是按照tif内部的的键值对方式来存储的。具体的一些细节可以参看这里。官方的说明pdf可以在这里下载。也可以把图像仅仅存储到tif文件中,而把坐标系统和仿射参数什么的单独提取出来,创建两个文件,一个是prj文件,存放WKT坐标系字符串,一个是tfw文件,存放仿射转换参数。 3.3. 小插曲: 关于tfw文件格式,网络流传几种说法。一种是这样的: 特别是这几行: 行 说明 1 地图单元中的一个象素在X方向上的X分辨率尺度。 2 平移量。 3 旋转量。 4 地图单元中的一个象素在Y方向上的Y分辨率尺度的负值。 5 象素1,1(左上方)的X地坐标。 6 象素1,1(左上方)的Y地坐标。
这种说法的源头可能是这个,但是他的参数个数是8个 第二种则是在gdal文档中的如下的解释
Toggle line numbers Toggle line numbers
1 WLD -- ESRI World File
2 A world file file is a plain ASCII text file consisting of six values separated by newlines. The format is: 3 pixel X size
4 rotation about the Y axis (usually 0.0) 5 rotation about the X axis (usually 0.0) 6 negative pixel Y size
7 X coordinate of upper left pixel center 8 Y coordinate of upper left pixel center 9 For example: 10 60.0000000000 11 0.0000000000 12 0.0000000000 13 -60.0000000000 14 440750.0000000000 15 3751290.0000000000
16 You can construct that file simply by using your favorite text editor. 17 World file usually has suffix .wld, but sometimes it may has .tfw, tifw, .jgw or other suffixes depending on the image file it comes with.
可以看出参数2和3和第一种的解释不一样。我现在宁可相信GDAL做的第二种解释(如果不是,那著名的grass不是白搞了?),但是这种说法也不一定,因为在gdal中直接解释的是wld文件,别名才是tfw,有没可能tfw有其他官方定义而非ESRI为惟一标准呢?如果去查google,中文和英文的解释会有很多种,越看只能越混乱。幸好大多数情况下是0 -_-! 不管了,先凑合这么用吧。如果谁知道ESRI官方解释,不妨贴上来大家共享)
3.4. GCPs
至于GCPs,那就麻烦了。不过玩过arcview或者mapinfo的配准的应该理解起来都没什么问题。要配准一张栅格图(把一个没有空间信息的图片变成有空间信息的栅格数据集),
只要在一个已知的坐标系统中定位几个控制点,然后输入这几个点的地理位置。软件通过读取这几个点在图像中的位置,以及输入的这几个点对应的地理位置,建立一个拟合方程,用方程来描述其他点在这个坐标系统中的地理位置。当然,在不同投影不同坐标系不同软件中拟合方程处理可能不同。所以拟合出来的坐标可能有一些差异。这个过程不好试验也不好验证,手上也没有相关数据,所以在这里就不多说了。
1. 坐标转化
坐标转化总是一个令人头疼的问题。不知道你有没有写过坐标转换的程序代码,如果写过就会有体会。那一长串的公式和成群出现的大括号,真是太可怕了!只有写过这种东西,你才会对我们生活的这个家园肃然起敬。才会发现原来地球居然如此复杂而显得如此伟大,人类的数学和地理学家居然是如此地会折腾而显得如此伟大。敬畏会让你从此以后不敢乱丢垃圾和随地吐痰~~呵呵,话说大了。反正我是不敢碰那些符号和公式了。不过既然踏入GIS的门槛,就踏进了坐标的深渊,不得不面对它。算了,还是找一个人家已经做出来的轮子去拼自己的车吧,至于轮子有几根钢线,什么材质,怎么才能搞的比较圆,我就不费神去想了。
有一种叫PROJ的牌子的轮子不知道听说过没有。反正开源界现在最好的有关坐标转换的轮子差不多就是它了。对于C/C++人来说,很幸运,因为这个库可以直接调用。如果是在linux平台下的java人,也很幸运,因为可以用jni来间接调用。如果你是在windows平台下的java人,可能是不幸的。我和我老大折腾了两天都没有编译成功,查了无数的帖子,也没有发现有解决方案(如果你成功了,一定要告诉我哦~~~)。对于业余的python人来说,前两天我还以为我们是不幸的,但是今天我觉得上帝还是偏爱python的,让我找到了这个,还有这个。呜啦~~~
对于pyproj,我也是“不太熟悉的”:-),那我们也就看看osr里面坐标转换是怎么玩的吧。 先翻译官方教程,我翻译不对的地方请回头看英文原版
1.1. 官方的教程
1.1.1. 简介
OGRSpatialReference和OGRCoordinateTransformation类提供了用来描绘坐标系统(投影和基准面)以及坐标系统相互之间转换的服务。这些服务在OpenGIS坐标转换说明文档里有模型,并且有对应的WKT描述。 一些OpenGIS坐标系统和服务的背景资料可以在COM的简单要素(Simple Features for COM)和空间参考系统抽象模型文档(可以从
opengis.org获取)中找到。GeoTiff投影变换列表也可以辅助地用来理解WKT中的投影公式。EPSG测地学网页也是一个有用的资源。 1.1.2. 定义一个地理坐标系 地理坐标系被封装进了OGRSpatialReference类。有几种办法来初始化OGRSpatialReference对象以形成一个合法的坐标系统。有两种主要的坐标系统。一种是地理坐标(用经纬度表示)。另一种是投影坐标(如UTM,用米等单位量度来定位)。 一个地理坐标包含基准面(它包含了由长半轴描述的椭球体和反扁率),本初子午线(一般是格林威治),和一个角度单位(一般是度)。下面的代码就初始化了一个地理坐标系。它提供了围绕用户定义名字的地理坐标系的所有信息。 Toggle line numbers Toggle line numbers 1 OGRSpatialReference oSRS; 2 oSRS.SetGeogCS( \ 3 \ 4 \ 5 SRS_WGS84_SEMIMAJOR, SRS_WGS84_INVFLATTENING, 6 \ 7 \在这些值中,\和 \不是关键字。但是被用于显示给用户看。但是基准面名\经常被用于定义基准面。而且哪些值可以用哪些不行都是有规矩的。不能乱写。 OGRSpatialReference 已经支持一些标准的坐标系统。比如\\。要建造它们只要用一个函数SetWellKnownGeogCS(). oSRS.SetWellKnownGeogCS( \ 如果EPSG数据库存在的话,所有EPSG中的地理坐标系都可以用GCS编码来表示。
共分享92篇相关文档