空间数据库技术

空间数据库技术用关系数据库管理系统(RDBMS)来管理空间数据,主要解决存储在关系数据库中的空间数据与应用程序之间的数据接口问题,即空间数据库引擎( Spatial Database Engine)。更确切地说,空间数据库技术是解决空间数据对象中几何属性在关系数据库中的存取问题,其主要任务是:

1)用关系数据库存储管理空间数据;

2)从数据库中读取空间数据,并转换为GIS应用程序能够接收和使用的格式;

3)将GIS应用程序中的空间数据导入数据库,交给关系数据库管理。因此空间数据库技术是空间数据进出关系数据库的通道。

建库目的

建立影像数据库的目的是将分幅分层生产的海量影像数据进行整理,使之符合统一的规范和标准;并对数据进行有效组织、管理,便于空间数据的查询、分发及其它应用。建库之后的数据是标准化、规范化的,采用统一的编码和统一的格式;数据是有效组织的,在平面方向,分幅的数据要组织成逻辑上无缝的一个整体,在垂直方向,各种数据通过一致的空间坐标定位能够相互叠加和套合;具有高效的空间数据查询、调度、漫游以及数据分发等功能,并且能够与其它系统无缝集成,为其它应用服务。从应用的角度讲,建立影像库的总体目标是能够管理多比例尺、多分辨率、多数据源的正射影像数据,能够作到在局域网或广域网上由全貌到细节、由整体到局部、由低分辨率到高分辨率快速、无缝的进行影像漫游、浏览和应用,支持图像数据集中式和分布式(局域网范围内分布式的存贮)的存贮与管理,为海量数据的应用提供一个高效的无缝平台。

建库原理

简而言之就是“两种方式,分层分块”。“两种方式”是指:栅格数据集(RasterDatset)和栅格目录(Raster Catalog)。它的存储和管理方式,这就是“分层分块”。

在Personal Geodatabase中,栅格数据可以作为栅格目录表(Raster Catalog)或栅格数据集(Raster Dataset)来存储。栅格数据集表现为连续的单幅数据。而栅格目录表是多个栅格的集合。每种存储方式都有各自的优势和局限性,但也有一些规则是两种方式都要遵守的。

栅格目录表和栅格数据集都可以先创建成一个空的容器,然后再向其中加载数据,或者可以动态创建。创建和加载栅格目录表或栅格数据集可以用ArcToolbox中的数据管理工具。这些工具可以在ArcCatalog的用户界面中找到。

栅格数据集

简单的说,“栅格数据集”就是ArcGIS对栅格数据模型的抽象,其英文为RasterDataset,任何一种物理栅格文件(如Erdas Imagine文件、ArcGISAscii Grid文件,Tiff文件等)经过ArcGIS的栅格数据模型抽象在内存中都是以RasterDataset形式存在的,RasterDatset一般由至少一个波段的RasterBand组成,如简单的灰度图像就是由一个波段的数据组成,普通的彩色合成影像就由三个或者三个以上波段组成,其中多光谱由多个通道(我们又把RasterBand称为通道)。由于计算机显示器一般提供三个通道的显示信道,分别为R(红)、G(绿)、B(蓝),因此即使我们手头有一个多波段的影像数据,我们也只能同时显示其三个波段数据,如对于TM影像的5、4、3波段分别用红、绿、蓝进行显示。我们也可以这么理解栅格数据模型,RasterDatset由多个波段组成,我们把波段理解为“层”的概念,那么这样每个RasterDatset就是由多个“层”叠加组合而成,每个层又是由具有行列属性的二维数组组成,为了将内部实现抽象起来,ArcGIS利用RasterBand类包装了这个二维数组,并且其提供了各种方法操作其内部二维数组。

栅格数据集比较适合带有标准坐标系的航片或卫片,当以这种方式导入影像文件的时候,SDE会将它们拼接(mosaic)成一张完整的大地图,但这种方式对各个图幅的要求就非常严格,要实现拼接必须满足几个条件:相邻图幅的相邻边不能有一丁点重叠错位;图幅必须带坐标系等等。但这种把图幅全拼起来的管理方式也有问题,就是如果将来要更新其中的某一小块区域的图像怎么办呢?比如纽约的影像图,世贸大厦被撞没了,其实只需要更新一下曼哈顿那一点地方的数据就可以了,可要是以Raster Map方式管理全纽约的影像地图的话那么就意味着要全部删掉原来的数据,再重新导入一遍全城的航片,几十个G,不是小数目,如果是1:10000的话估计纽约的影像数据量应该在300个G左右,怎么也得导几天才能导完吧。

栅格目录

“栅格目录”可以简单的理解为一种普通表格数据模型,其英文为RasterCatalog,“栅格目录”中的每条记录就是由“栅格数据集”和描述该“栅格数据集”的多种元数据信息组成。通过这种定义我们可以看出对于构建一个基础数据库,利用“栅格目录”管理分幅影像数据具有很大的优势,因为分幅影像数据经常具有很多元数据属性。“栅格目录”管理也为我们开发基础数据系统提供了很方便的入口。

栅格目录说白了就是个相册。可以把任何东西的照片都存进去,SDE只管存储和为它们维护一个目录,这一点可以从观察Raster Catalog对应的Oracle Spatial表看出来,感觉就像一个被肢解了的图片的集中营。如果用ESRI的桌面工具(比如ArcMap,ArcCatalog)来预览这个Raster Catalog的时候,你将看到一张经过拼接的美图!使用这种方式管理航片就没有前面Raster Map方式最后说的那种问题,比如世贸大厦没了,那么我们就重新在那里拍一张,再更新原来Raster Catalog中对应的那一个图幅就可以了,其它的则没必要去动。

“栅格数据集”与“栅格目录”

总之,对于“栅格数据集”和“栅格目录”其实就是ArcGIS对于栅格数据抽象的一种内存模型,“栅格数据集”作为Geodatabase核心数据模型在基础库中一般存储地理背景数据,其要求是数据不经常变化(如经常更新背景数据就不适合利用RasterDataset进行存储);“栅格目录”一般用于管理具有属性信息的影像数据,如分幅数据或者同一地区多期数据,需要注意的是,同一个“栅格目录”必须具有相同的空间参考。

当创建栅格目录表时,必须设置XY域(所有输入栅格的空间范围的集合),而栅格数据集则不需要。和ArcGIS中所有其它数据集一样,我们强烈建议,要导入目录表或数据集的栅格数据一定要预先定义空间参考,地理坐标系统或投影坐标系统。而这种坐标系统不必要一定和目录表或数据集的坐标系统一致。

栅格数据集有一个空间参考,在拼接(Mosaic)的过程中,不同坐标系统中的像元会被动态投影到正确的位置上。而在栅格目录表中,每个栅格都会有自己的空间参考,它们和几何空间参考以及栅格列的空间参考都不一样,这些栅格只是在进行显示或分析的时候才会被动态投影。

影像金字塔

“分层”是指:影像金字塔(pyramid)索引。其基本思想就是利用采样自底向上生成金字塔,根据需求直接取其中某一级作为操作对象,以提高整体效率。当然就像这个世界中的其它事物一样,效率的提高是有代价的,这就是建塔带来的额外空间开销,建的级越多,越方便查询,当然数据冗余也越大。

如果为大的栅格影像建立了金字塔的话,这些影像便能快速进行显示。除了在屏幕上显示外,金字塔还包含了很多其他信息。如果没有金字塔,那么在显示时就要访问整理栅格数据集,然后进行大量计算来选择哪些栅格像元被显示。金字塔是一种能对栅格影像按逐级降低分辨率的拷贝方式存储的方法。通过选择一个与显示区域相似的分辨率,只需进行少量的查询和少量的计算,从而减少显示时间。

每次用ArcGIS打开一幅影像的时候,都会在状态栏中看到Creating pyramids,这时就是在构建影像的金子塔。现在的googlemap,visual earth,mapbar这些portal应用都采用的是把地图预先处理成影象金字塔,切块后做四叉树编码。在进行zoom,pan操作的时候动态调用那 些maptile。这种架构省略掉了制图引擎这些对服务器性能消耗大的环节。

每一层影像金字塔都有其分辨率的,那么根据你当前操作,比如说放大(无论是拉框放大、还是固定比例放大)、缩小、漫游(此操作不涉及到影像分辨率的改变)计算出进行该操作后所需的影像分辨率及在当前视图范围内会显示的地理坐标范围,然后根据这个分辨率去和已经建好的影像金字塔分辨率匹配,哪层影像金字塔的分辨率最接近就用哪层的图像来显示,并且根据操作后当前视图应该显示的范围,来求取在该层影像金字塔上,应该对应取哪几块,然后取出来画上去就可以了。

按图块(block/tile)存储

“分块”是指每个图幅是按图块(block/tile)存储的,并使用格网索引。在将图幅存储于数据库中时,SDE不是傻乎乎的一行一行的存进去,而是将图幅划分成若干个大小相同的图块,每块大小不能超过16K,一般就取128×128。划分的顺序是从上到下,从左至右的,分块的好处在于可以减少磁盘I/O。但是哪有那么好的图幅,长宽都是128的整数倍?而事实上就几乎没有这么好的图幅,图幅的长和宽都除不开128的情况先,SDE的策略就是——补零。在图幅的右侧和下侧补上若干零元(RGB:000000),也就是黑点,这样处理过的图幅就可以进行划分了。

建库过程

当所有软硬件都准备齐全后(这里包括在ArcSDE软件的安装过程中已经创建好了SDE数据库文件)就可以建立影像数据库了。在企业级数据库中,栅格数据的存储结构包括分块、索引、建立影像金字塔,并且常常经过压缩处理。正是因为数据具有分块、索引以及金字塔结构等属性,每次对栅格数据进行查询时,只有满足查询范围和精度的数据块才会返回,而不是每次都返回整个数据集。压缩可以降低客户和服务器间的数据交换量,使存储大的无缝栅格数据集以及达到几个TB的栅格目录并使他们能够在客户端快速显示成为可能。

(1)数据准备

由于影像数据库对入库原始数据的要求比较严格,这也是保证影像数据库完整性的一部分,因此在入库之前应将原始影像整理放置,同时确保每个原始影像文件配有唯一一个正确的坐标文件存放在相同目录中,统计一下数据量以备后用。

(2)压缩方式

由于影像数据量巨大,为了减少存贮空间,提高显示效率, 在栅格数据存入地理数据库之前对其块的大小进行压缩。使用的压缩方式可以是有损的(JPEG和JPEG2000)或无损的(LZ77)。无损压缩意味着栅格数据集中像元的值不会被改变。压缩的量取决于像元数据的类型;影像越一致,压缩的比例越高。

对数据进行压缩最主要的好处是可以节省存储空间。另一个好处是从总体上提供了性能,因为降低了服务器和客户应用间交换的数据包。

因为以下原因,可以选择有损压缩:

 如果栅格数据只是用作背景图像,而且无需对其进行分析。

 数据加载和检索快捷

 所需的存储空间小,因为压缩比例可以达到5:1或10:1(若选择JPEG2000可以获得更多的压缩比例,如10:1或20:1)

因为以下原因,可以选择无损压缩

 栅格数据集是用来获取新的数据或用于视觉分析

 需要的压缩比例在1:1和1:3之间

 不打算保留原始数据

 输入的数据已经被有损压缩过

即使不对栅格数据进行压缩,企业级地理数据库的存储能力也可以满足要求,但是,还是推荐进行栅格数据压缩。如果无法确定使用何种压缩方法,那就用默认的LZ77(无损压缩)。

(3)数据入库

ArcSDE管理影像方式主要有连续的栅格数据集和栅格目录两种。栅格目录具有每个栅格都是独立的,利于更新和数据库维护;可查询访问单个数据集,可以根据用户定义的属性在表中加入用户定义字段。因此,采用栅格目录Raster Catalog这种方式存储影像数据。

具体步骤如下:

1.成功连接数据库服务器后(连接过程前面有详细介绍),新建栅格目录。右键“new”——“Raster Catalog”。

2..在栅格目录中导入数据。右键“栅格目录”——“load”——“load data”,导入栅格数据。

(4)建金字塔

经过较长时间的大量数据入库后,利用ArcCatalog工具连接好数据库后选中影像数据库项,点击鼠标右键,选择“Build Pyramids”项后,系统就开始创建影像金字塔了。创建完金字塔后影像数据库就基本建立完成了,为了配合影像使用可以再向数据库中导入矢量数据,这样才能够形成具有真正意义的影像数据库。

创建金字塔时,一个降低分辨率的数据集(.rrd)文件将被创建。对于一个未经过压缩的栅格数据集,它产生的(.rrd)文件的大小近似于源栅格数据集的8%。 用户不能为栅格目录创建金字塔,但可以对其中的每个栅格据集创建金字塔。

在 ArcCatalog中创建金字塔(索引)

1.在Catalog树中右击栅格数据集。

2.单击Build Pyramids按钮。

3.如果还没有选中,则指向用户要创建金字塔的栅格数据集。

4.单击Ok

为创建金字塔改变缺省设置

1单击Tools菜单,并单击 Options。

2单击Raster选项卡。

3单击描述创建金字塔时的合适选项.