浅入浅出Oracle Spatial GeoRaster 10g影像数据管理(3)

翻译 2007年09月12日 16:45:00

浅入浅出Oracle Spatial GeoRaster 10g影像数据管理(3)—空间参考

 

1.概要

    GeoRaster空间参考系(spatial reference system, SRS)是GeoRaster对象中元数据的一部分。空间参考(Georeferencing)是用来构建像素坐标系与真实世界的大地坐标系(或其它一些本地坐标系)之间双向的映射关系。

    Georeferencing不同于几何校正(geocorrection)、校准(rectification)和正射校准(orthorectification)。后面三种处理经常需要对原始影像进行采样,而经过处理的影像,其地理坐标可能会变,各维度的尺寸也可能会变。而Georeferencing只是通过在像素坐标与地理坐标之间建立一个映射关系,使得这两种坐标能够互转。这个映射关系一般以一个数学公式来表达,除了公式,还要提供足够的地面控制点坐标,或者是来自遥感系统的严格的坐标数据。除非要简化坐标变换,Georeferencing一般不会改变GeoRaster的像素数据和其它的元数据。

    GeoRaster目前支持对二维影像数据使用六参数仿射变换来实现坐标变换。仿射变换是函数拟合多项式模型的一种。如果对一幅影像提供了仿射变换并且在元数据中有效,那么这个GeoRaster对象就会被认为是有地理参考系的,其元数据中SRS节中的isReferenced值为TRUE,否则为FALSE

    校准可以利用水平坐标实现,这样可以使栅格数据集中的像素都映射到投影地图坐标系中。经过校准之后,影像中的每个像素都被规整成规则的大小(地理范围),并且按照地理坐标空间中的东西向、南北向对齐。如果用于校准的是高程数据(DEM数据),那么这种校准就叫做正射校准(orthorectification),这是一种用来修正地形错位的特有校准方法。和前面的地理参考系类似,校准与正射校准也有自己对应的元数据:isRectifiedisOrthorectified,有则为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=-ece都不为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参数。

 

    这里特别说明一下,ESRIworld file(就是那些tfw,jpgw等等)中用的就是公式(2),它里面那六个参数依次分别对应A,B,D,E,C,F。到我看到这份文档的时候,我才算基本搞清楚了ESRIxxw坐标文件的含义。这鬼东西让我迷茫过好一阵,主要就是搞不清楚里面为什么会有6个参数,怎么算怎么觉得要不了那么多。没想到最后还是看了Oracle的文档才弄明白的。关于ESRIworld file,我当时写过一篇《tiff/tfw, jpg/jpgw坐标文件的格式》,但那时其实还是在探索中。后来又陆续看到过兔八哥的《Tif World文件tfw解释》,3echo的《tfw坐标信息文件》等文章(呵呵,原来大家都在研究),感觉当时指点过我的懒狮对此应该比较清楚,但可惜的是我却没有找到他关于这方面的专门论述(难道真的“懒”?;-)

 

    在像素空间中,对于一幅影像中的一个像素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

    另外,mn也都是从0开始计算的(第一行的行号是0,第一列的列号也是0)。

 

相关文章推荐

Oracle Spatial 12C GeoRaster导入影像栅格数据并显示

看了几天Oracle的英文文档都要吐了,网上资源也少得出奇,总算是皇天不负有心人,至少结果还是出来了。 环境:windows 7 64位,Oracle 12.0.1.2.0(下载地址),GEORAS...

基于ArcGIS10.0和Oracle10g的空间数据管理平台五(C#开发)-通用工具类

由于在介绍通用数据管理模块功能的时候用到了许多通用的功能,例如word和excel与DataGridView控件的相互导入导出、写日志到数据库中等等。为了后面每一篇文章都能清楚的知道每一个功能具体是怎...

基于ArcGIS10.0和Oracle10g的空间数据管理平台二(C#开发)-登录功能模块

我的新浪微博:http://weibo.com/freshairbrucewoo。        欢迎大家相互交流,共同提高技术。         上一篇文章把整个系...

基于ArcGIS10.0和Oracle10g的空间数据管理平台十一(C#开发)-空间数据字段检查

最近在北京出差一直没有时间继续写博客,主要是晚上上网的条件不好,而且和几个同事住在一起也不太方便写博客,因为随时我们都可能聊天交流!今晚还是决定继续写一遍比较简单的博客,就是继续写ArcGIS的项目,...

基于ArcGIS10.0和Oracle10g的空间数据管理平台八(C#开发)-图层分类标准定义

先打一个广告:我的独立博客网址是:http://wuyouqiang.sinaapp.com/。     我的新浪微博:http://weibo.com/freshairbrucewoo。    ...

基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-(GIS)地理信息系统简介

先打一个广告:我的独立博客网址是:http://wuyouqiang.sinaapp.com/。 我的新浪微博:http://weibo.com/freshairbrucewoo。 欢迎大家相互交流,...

基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)补充说明

先打一个广告:我的独立博客网址是:http://wuyouqiang.sinaapp.com/。     我的新浪微博:http://weibo.com/freshairbrucewoo。     欢...

基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-AE常用操作代码

本来打算睡觉了,但是突然看到自己保留的一个单独的C#文件,原来是AE常用操作的代码,这也是自己在做ArcGIS空间数据管理平台的项目时积累下来的,这里贴出来供需要使用的人。/*************...

基于ArcGIS10.0和Oracle10g的空间数据管理平台七(C#开发)-日志操作类

这篇博文很简单,就是介绍一下各种日志的写入操作,因为写日志的操作随时都需要,所以专门实现一个类来完成。日志一般情况可以写入文件,但是在本项目实现是直接写入Oracle数据库,主要是方便查询和按分类管理...

基于ArcGIS10.0和Oracle10g的空间数据管理平台(C#开发)-数据库设计

先打一个广告:我的独立博客网址是:http://wuyouqiang.sinaapp.com/。 我的新浪微博:http://weibo.com/freshairbrucewoo。 欢迎大家相互交...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)