|
|
|
|

GDAL库学习笔记(四):关于空间参考

1. 关于空间参考 好啦,现在让我们开始进入地理的世界 一幅地图除了需要画出地物的形状,更重要的是要画出地物的位置。做GIS的头一项就是要做定位。这也就是GIS数据源和普通数据源的区别--它带有空间信息。GDAL和PIL等图像处理库的最大区别也就在此处...

作者:lilin来源:啄木鸟CPUG站|2007年02月08日

1. 关于空间参考

好啦,现在让我们开始进入地理的世界

一幅地图除了需要画出地物的形状,更重要的是要画出地物的位置。做GIS的头一项就是要做定位。这也就是GIS数据源和普通数据源的区别--它带有空间信息。GDAL和PIL等图像处理库的最大区别也就在此处。

空间信息包括两个部分。一个是坐标系统,还有一个就是栅格坐标和地理坐标之间的转换。

坐标系统是一个很大的概念。包括很多知识点,可以写厚厚的一本书。我们这里也不想多说,毕竟我在这里不是要普及地理知识,我只在这里讲GDAL中涉及的坐标系统概念。因为我自己对坐标系统学习也并不是太深入(我不是测绘专业的),所以,我的一些理解可能是错误的,希望大家能及时指正。 根据GDAL数据模型文档的解释,GDAL数据集类中包括的坐标系统解释是这样的:

2. GDAL文档的解释

数据集的坐标系统由OpenGIS WKT字符串定义,它包含了:

1、一个总体的坐标系名

2、一个地理图形坐标系统名

3、一个基准面定义

4、一个椭球体的名字。长半轴(semi-major axis)和反扁率(inverse flattening)

5、本初子午线(prime meridian)名和其与格林威治子午线的偏移值

6、投影方法类型(如横轴莫卡托)

7、投影参数列表(如中央经线等)

8、一个单位的名称和其到米和弧度单位的转换参数

9、轴线的名称和顺序

10、在预定义的权威坐标系中的编码(如EPSG)

更多信息请参考OpenGIS WKT坐标系统定义,以及osr教程文档和OGRSpatialReference类的描述文档

在GDAL中,返回坐标系统的函数是GDALDataset::GetProjectionRef()。它返回的坐标系统描述了地理参考坐标,暗含着仿射地理参考转换,这地理参考转换是由GDALDataset::GetGeoTransform()来返回。

由GCPs地理参考坐标描述的坐标系统是由GDALDataset::GetGCPProjection()返回的。

注意,返回的坐标系统字符串“”表示未知的地理参考坐标系统。

2.1. 仿射地理转换

GDAL数据集有两种模式描述栅格位置(用点/线坐标系)以及地理参考坐标系之间的关系:首要的也是最普遍的是使用仿射转换,另一种则是GCPs(多控制点定位方式)

  • 仿射变换由6个参数构成,它们由GDALDataset::!GetGeoTransform()返回它们把点/线坐标系(我想这里的(点/线)意思是栅格的(行/列)位置)用下面的关系转换到地理参考空间。

Toggle line numbers
						
								   1 
								Xgeo
								=
								GT
								(
								0
								)
								+
								Xpixel
								*
								GT
								(
								1
								)
								+
								Yline
								*
								GT
								(
								2
								)
						
						
								   2 
								Ygeo
								=
								GT
								(
								3
								)
								+
								Xpixel
								*
								GT
								(
								4
								)
								+
								Yline
								*
								GT
								(
								5
								)
								
								
						
				

假设指北针向上的影像,GT2和GT4参数是0,而GT1是象元宽,GT5是象元高,(GT0,GT3)点位置是影像的左上角。

注意,上面所说的点/线坐标系是从左上角(0,0)点到右下角,也就是坐标轴从左到右增长,从上到下增长的坐标系。点/线位置中心是(0.5,0.5)

2.2. GCPs

数据集可以由一系列控制点来定义空间参考坐标系所有的GCPs共用一个地理参考坐标系(由GDALDataset::GetGCPProjection()返回,每个GCP(由GDAL_GCP定义)包含下面内容:

Toggle line numbers
						
								   1 
								typedef
								struct
						
						
								   2 
								{
						
						
								   3 
								char
								*
								pszId
								;
						
						
								   4 
								char
								*
								pszInfo
								;
						
						
								   5 
								double
								dfGCPPixel
								;
						
						
								   6 
								double
								dfGCPLine
								;
						
						
								   7 
								double
								dfGCPX
								;
						
						
								   8 
								double
								dfGCPY
								;
						
						
								   9 
								double
								dfGCPZ
								;
						
						
								  10 
								}
								GDAL_GCP
								;
								
								
						
				

pszid是本GCP在数据集中一系列GCP点中惟一的标示字符串,它常常是数字,但不一定总是。有可能在GCP状态中包含机器可分析信息,虽然现在还不行。

(dfGCPPixel,dfGCPLine)位置是栅格中的GCP位置,(dfGCPX,dfGCPY,dfGCPZ)位置是联合的地理参考位置(Z通常是0)

GDAL数据模型没有实现由GCPs...产生坐标系的变化的机制,而是把它留给实际应用。但是1到5阶多项式是通常使用的方法。

通常一个数据集会包含仿射地理变换。和GCPS中的一个或者两个都没有。两个都有很少见。而且无法用权威坐标系定义。

上一篇:GDAL库学习笔记(三):GDAL创建数据集

下一篇:GDAL库学习笔记(五):坐标系之间的转化