浅入浅出OracleSpatialGeoRaster10g影像数据管理(3)——空间参考(。。。

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

浅⼊浅出OracleSpatialGeoRaster10g影像数据管理(3)——空
间参考(。

1.概要
GeoRaster空间参考系(spatial reference system, SRS)是GeoRaster对象中元数据的⼀部分。

空间参考(Georeferencing)是⽤来构建像素坐标系与真实世界的⼤地坐标系(或其它⼀些本地坐标系)之间双向的映射关系。

Georeferencing不同于⼏何校正(geocorrection)、校准(rectification)和正射校准(orthorectification)。

后⾯三种处理经常需要对原始影像进⾏采样,⽽经过处理的影像,其地理坐标可能会变,各维度的尺⼨也可能会变。

⽽Georeferencing只是通过在像素坐标与地理坐标之间建⽴⼀个映射关系,使得这两种坐标能够互转。

这个映射关系⼀般以⼀个数学公式来表达,除了公式,还要提供⾜够的地⾯控制点坐标,或者是来⾃遥感系统的严格的坐标数据。

除⾮要简化坐标变换,Georeferencing⼀般不会改变GeoRaster的像素数据和其它的元数据。

GeoRaster⽬前⽀持对⼆维影像数据使⽤六参数仿射变换来实现坐标变换。

仿射变换是函数拟合多项式模型的⼀种。

如果对⼀幅影像提供了仿射变换并且在元数据中有效,那么这个GeoRaster对象就会被认为是有地理参考系的,其元数据中SRS节中的isReferenced值为TRUE,否则为FALSE。

校准可以利⽤⽔平坐标实现,这样可以使栅格数据集中的像素都映射到投影地图坐标系中。

经过校准之后,影像中的每个像素都被规整成规则的⼤⼩(地理范围),并且按照地理坐标空间中的东西向、南北向对齐。

如果⽤于校准的是⾼程数据(DEM数据),那么这种校准就叫做正射校准(orthorectification),这是⼀种⽤来修正地形错位的特有校准⽅法。

和前⾯的地理参考系类似,校准与正射校准也有⾃⼰对应的元数据:isRectified和isOrthorectified,有则为TRUE,⽆则为FALSE。

2.坐标变换公式
在现在这个GeoRaster版本中,使⽤下⾯的六参数仿射变换公式实现从地理坐标系到像素坐标系的变换:
row = a + b * x + c * y
col = d + e * x + f * y (1)
其中各变量的含义如下:
row:像素在像素坐标系中的⾏坐标值;
col:像素在像素坐标系中的列坐标值;
x:地理坐标系中的东西向坐标值(⽐如经度);
y:地理坐标系中的南北向坐标值(⽐如维度);
a,b,c,d,e,f作为参数,存储在SRS的元数据中,公式中b*f-c*e不能等于0,只有这样才能保证线性⽅程组有唯⼀解。

如果公式中b=0, f=0, c=-e且c和e都不为0,那么说明影像是经过校准的,原公式就退化成:
row = a + c * y
col = d - c * x
这是坐标变换中最简单的⼀种情况。

(译注:应该也是最常⽤的⼀个公式)
在坐标变换中存在⼀个问题需要注意⼀下,就是像素点和实际的地理要素之间的对应关系。

GeoRaster的元数据中有⼀个cellRepresentationType项,从字⾯上理解,它的意思就是像素所代表的地理要素类型,⽽在⽬前的版本中该项的值只能是UNDEFINED。

也就是说,⼀个像素仅仅是⼀个标量值(或者是数组中的⼀个元素),⽽不能带有任何的形状信息。

然⽽在进⾏坐标变换的时候,⼀个像素⼀般对应于实际地理空间上的⼀个⾯(正⽅形区域或者是矩形区域),或者对应于这个⾯中的⼀个点。

在像素空间中,坐标都是以整数表达的⾏列号。

这些整数坐标通过坐标变换可以被映射到真实的地理空间坐标系上,变成⼀个真正意义上的“点”的位置坐标。

这个点的位置可能是像素所对应的地理区域的左上⾓,也可能是区域的中⼼点。

这可以通过指定GeoRaster元数据中的modelCoordinateLocation项的值来确定。

地理坐标的单位要与先前指定的SRID中定义的⼀致,⽽且其取值也应该落在正确的定义域内。

⽐如要在⼀幅影像的像素坐标系与8307测量坐标系之间建⽴映射关系,那么地理坐标的取值单位就必须是⼗进制⾓度值,⽽且经度(x值)必须在[-180.0, 180.0]或[0.0, 360.0]中取值,纬度(y值)则必须在[-90.0, 90.0]中取值,这时就不能使⽤其它的单位(⽐如⽶)。

前⾯给出的六参数变换公式是从地理空间到像素空间的变换,反⽅向的变换公式也很好写:
x = A * col + B * row + C
y = D * col + E * row + F (2)
很容易看出来这⾥的A,B,C,D,E,F和前⾯的a,b,c,d,e,f之间是可以求出关系式的,其实后⾯这个变换公式就是前⾯公式的解(把x,y看成未知数),反过来也⼀样(把row,col看成未知数)。

SDO_GEOR.georeference函数接受A,B,C,D,E,F为输⼊参数,并在内部⾃动转化为
a,b,c,d,e,f参数。

这⾥特别说明⼀下,ESRI的world file(就是那些tfw,jpgw等等)中⽤的就是公式(2),它⾥⾯那六个参数依次分别对应A,B,D,E,C,F。

到我看到这份⽂档的时候,我才算基本搞清楚了ESRI的xxw坐标⽂件的含义。

这⿁东西让我迷茫过好⼀阵,主要就是搞不清楚⾥⾯为什么会有6个参数,怎么算怎么觉得要不了那么多。

没想到最后还是看了Oracle的⽂档才弄明⽩的。

关于ESRI的world file,我当时写过⼀篇,但那时其实还是在探索中。

后来⼜陆续看到过兔⼋哥的,3echo的等⽂章(呵呵,原来⼤家都在研究),感觉当时指点过我的对此应该⽐较清楚,但可惜的是我却没有找到他关于这⽅⾯的专门论述(难道真的“懒”?;-))
在像素空间中,对于⼀幅影像中的⼀个像素p,如果已知其所在影像的左上⾓坐标(ULTCoordinate)(row0,col0)和p在影像中的⾏、列位置(m,n),则可以由公式(3)得到它的像素坐标。

row = row0 + m
col = col0 + n (3)
需要说明的是,左上⾓坐标(row0,col0)未必恰好是(0,0),这要视具体情况⽽定,但在⼤多数的应⽤中,它就是(0,0),这样,原公式就退化成
row = m
col = n
另外,m和n也都是从0开始计算的(第⼀⾏的⾏号是0,第⼀列的列号也是0)。

p.s.这次的⽂章的主题就是georeferencing,但对于这个词,我却译不好,在标题中暂且译成了“空间参考”,⽽在⽂章中很多地⽅就直接使⽤了原⽂georeferencing,还有些地⽅的“坐标变换”也是译⾃georeferencing这个词。

⼤家如果知道正确的译法,望能指点,感激不尽~~~
p.s.这次的相对好翻译,好理解⼀些,原⽂也不长,但下次的《索引结构》就不太容易了,⽽且5⽉有4门考试,还有若⼲繁杂事情,所以第4篇可能会晚些才能出来。

相关文档
最新文档