基于ARC/INFO的地形图数据建库方法广西基础地理信息中心梅树红摘要:数据是地理信息系统不可或缺的一部分,怎样有效地生产数据和管理数据是GIS行业一直在探讨的课题。本文介绍了ARC/INFO空间数据管理的特点,并重点讨论了利用ARC/INFO的LIBRARIAN对地形数据建库和管理的方法。关键字:ARC/INFO、建库、LIBRARY一、前言地形图经过数字化成为电子数据以后,应用的好坏很大程度上依赖于对数据的管理,目前对数据的管理最有效的手段就是数据库。Arc/Info作为一个地理信息软件,也提供了对大量数据的集成管理,空间数据管理常用的方式有:Librarian、ArcStorm和SDE。Librarian和Arcedit、Arcplot一样,是Arc/Info的基本模块之一,它可管理大数据量的图形数据,并采用先进的空间索引方式,用户只要指定范围和内容,系统会自动调入相关而不是所有的数据,它还支持多用户同时读取同一地图库,当一用户在对固定范围的数据进行修改时,系统锁定这一范围数据,防止别的用户同时修改使数据产生不一致性;ArcStorm则是Arc/Info的一个扩展模块,它采用客户/服务器的结构设计,比起Librarian可以管理更大量的数据,数据的锁定可以基于单个特征,增加了数据的共享性;SDE采用了也是客户/服务器结构,提供了一种手段使空间数据可以添加到关系型数据库进行管理,提供了对空间、非空间数据进行操作的接口,支持VisualBasic、C、C++等流行的程序语言对Arc/Info数据的操作。由此可见,Libraian适用于一定范围纯Arc/Info图形数据(coverage)的管理,ArcStorm则适用于大数据量、多用户的Arc/Info图形数据管理,SDE则在开发基于图形的应用程序时发挥作用。本文以1:25万地形数据库为例讨论用LIBRARIAN进行建库和管理的方法。二、LIBRARIAN介绍LIBRARIAN是ARC/INFO软件的一个模块,该模块可以创建、维护数字地图库(LIBRARY)。数字地图库分块、分幅存贮地理数据,但可以把它作为一个整体进行访问,一般来说,一个图库代表一个地理区域。一个数字地图库的功能就是用一种方法来组织信息,使之容易被访问,并提供一种方法来控制访问和事务处理。2.1LIBRARY的功能定义数据库的空间位置关系定义数据内容的组织方式控制用户对数据库数据的使用权限,分为六个级别:主管ADMINSTRATOR、管理者MANAGER、操作员OPERATOR、浏览者BROWSER、不可拷贝浏览者LOOK、无任何权限NONE。控制访问并跟踪对库数据的任何修改允许在整个数据库范围内进行查询和选择,并能建立数据的空间索引关系,有效减少查询时间提供数据库修改过程的历史记录提供数据库结构和数据统计2.2LIBRARY的数据结构在逻辑上,LIBRARY以两种方式组织这个区域的数据:tiles和layers。如图1所示:图库是一个三维结构,在图库中,tile是水平的,而在概念上,layer是垂直的。当一个tile横切一个layer时,就产生一个coverage。TILE:是对图库进行二维分割,所有tile边界连起来便组成数据库的整个地理区域。Tiles在空间上分割数据库中的数据,数据在库中的存贮物理上是以tile为单位的。Tile可以基于规则格网、自然地理边界或景观特征。如1:25万数据建库时是以图幅范围为tile边界的。Tiles形状应反映数据库数据的使用和以后的应用;Tiles形状不应是经常变动的边界或不稳定的边界;Tiles应是连续的多边形COVERAGE,在一个tile中不允许存在不相连的岛多边形,每一个岛多边形应是独立的tiles。图1Library的数据结构Tile是以ARC/INFO的workspace形式存贮。Tiles是最难以改变的库结构,所以确定tile时应做充分的实验及论证。如1:25万数据建库时是以图幅范围为tile边界的,为使库里的数据在空间上是连续的,故选用的是经纬度的数据建库,则每个Tile是1°×1.5°的经纬网界线组成。广西全区共有28个Tiles。LAYER:在数据库中,分割数据的第二种方法就是用layer进行分割,一个layer包含整个区域中的某类特征,由一个类型的coverage构成,用于具体存放数据库的内容。数据库查询、显示的就是layer。2.3LIBRARY的数据组织Library是一个层次数据结构,数据库由标准的ARC/INFO数据结构的COVERAGE和INFO文件构成。它由四部分组成:数据库位置文件:每一个数据库只有一个位置文件,包含数据库的名字和存放位置,这个文件存放于ARC/INFO主目录的TABLES目录下。数据库参考目录(DATABASE):包含定义数据库结构的文件,包括一个数据库索引COVERAGE,该COVERAGE包含TILE的名字、物理位置等等,该目录里还包括数据库的样板LAYER。TILE工作空间:这是一个ARC/INFO的工作空间,它包含某一tile中的所有mapsectionMapsection/coverage:这是一个ARC/INFOcoverage,由某个tile中的一个layer构成。例见图2:图2Library的数据组织其中:access目录包含数据库的权限管理文件,LIBRARY.ACCESS控制用户对数据库的访部权限,LAYER.ACCESS控制用户对layer的访问,LAYER.IDS包含有关用户访问组的信息。index是一个连续的多边形coverage,描述数据库的tile结构,一个数据库只能有一个index文件。database下的bount、hydnt等是layer的模版coverage,定义了数据库中每一个layer的属性表结构、投影、精度等等,layer入库时与这些coverage比较,只有属性结构、投影、精度等等都完全一样才能入库。Tile目录存放数据库的coverage数据。三、建库方法:3.1数据库设计:根据数据库用户使用频率最高的方式,确定数据库索引,也就是Tile的结构。根据用户应用数据的范围、内容,确定数据库的结构。1:25万数据库的分层按采集时定义的分层,共14层。分析数据库用途,确定数据库的精度、投影等等。1:25万数据采集时的坐标容限值为25米,投影采用高斯投影,建库时坐标容限仍取25米,投影则转为地理投影(经纬度)。3.2建立索引文件INDEXCOVERAGE:INDEX是一个由多个TILE边界组成的多边形COVERAGE,每个多边形是一个TILE。可以数字化一个INDEXCOVERAGE,或者用ARC命令建立,包括用APPEND、DISSOLVE、GENERATE等。广西的1:25万数据库采用地理坐标(经纬度),经纬度范围:东经103.5°-112.5°,北纬20°-27°,用GENERATE生生成一个格网大小为1°×1.5°的多边形COVERAGE。如图形所示:图3Indexcoverage与建库范围的关系3.2.1建立index的过程:用GENERATE建立一个包含TILE结构的COVERAGE:INDEX;把COVERAGEBUILD成多边形COVERAGE;用ADDINDEXATT或ADDITEM给INDEX.PAT加入两个数据项:TILE-NAME和LOCATION;给TILE-NAME赋值,指定每个TILE的名称,如上图中的形式g4806、f4907等就是TILE的名称;给LOCATION赋值,用INFO名令CONCATENATE指定TILE的存贮地点;用TOLERANCE命令设置INDEXCOVERAGE的容限值;用PROJECTIONDEFINE给INDEX定义投影文件。3.2.2建立INDEXCOVERAGE的几点原则:索引COVERAGE的名称可以不为INDEX;每个TILE的名称需唯一;INDEX的容限值也就是整个数据库的处理容限值,代表了数据库的精度,这个值不可小于要入库的COVERAGE的容限值。数据库的精度在生产数据时控制,入库时精度可降不可升;如果入库数据不含投影文件,则INDEX也不应含投影文件。3.3建立TILE目录:建立了TILE结构的INDEXCOVERAGE,就可用LIBRARYBUILDTILES生成TILE工作空间:BUILDTILESINDEX此命令根据INDEX.PAT中的TILE-NAMEO为TILE工作空间命名,用LOCATION确定TILE工作空间所在的位置。3.4建立数据库的框架:建立TILE后,用LIBRARYCREATEMAPLIBRARY命令把该数据库登记在ARC/INFO里,createmaplibrarygx-gis25index其中,gx-gis25为数据库的名称。运行命令后,即在当前目录中生成了数据库参照目录DATABASE,INDEXCOVERAGE被拷贝入DATABASE目录中并被命名为INDEX。运行此命令,用户需对ARC/INFO的TABLES有写权限。3.5定义LAYER:LIBRARY:ADDLAYERlayercoverformat-coverlayer是LAYER的名称;cover是在DATABASE中存贮的样板LAYER名;format-cover是做为样板的cover的特征属性,该format-cover的空模板被拷入DATABASE中,应与cover同名。一个和加入的LAYER同名的数据项被添加到INDEX。PAT中,数据项的初值为“N”。如果某个TILE中有定义的LAYER数据,则数据项值为“P”。删除LAYER用LIBRARYDROPLAYER1:25万数据库LAYER的名称采用数据采集时定义的COVERAGE名称,共14个LAYER,分别为:BOUNT、BOUPT、HYDNT、HYDLK、RESPT、RESPY、ROALK、RAILK、TERLK、TERNT、OTHNT、ATNLK、GGDLN、QUAPY。3.6数据入库:数据入库可以用INSERT和PUTTILE。当一个COVERAGE跨多个TILE用INSERT将LAYER数据分配到各个TILE中。INSERTcoverlayer{DROPBORDER}PUTTILE比INSERT速度快。当数据库分区与数据存贮分区一致时,可以用PUTTILE入库:PUTTILEcovertilelayer应注意的是入库时LIBRARY只检查数据的定义、结构,不检查数据的内容,数据内容的正确与否应在入库前进行检查。3.7数据完整性检查数据入库后,应进行数据检查:VERIFYLAYERlayer{CHECK|UPDATA}这是检查layer的一致性,如发现错误,则返回信息。四、数据库的管理、维护4.1用户权限设置数据库建好投入使用,怎样保证数据的安全,这就需要对不同使用目的用户设置不同的使用权限。在librarian中,建库时的用户,建库后即获得了ADMINSTRATOR的权限。ADMINSTRATOR在任何时侯都可以修改各用户的访问权限。用GRANT定义用户权限:GRANTuser|$RESTaccessLIBRARYGRANTuser|$RESTaccessLAYERlayer|CURRENTuser|$REST:用户名;access:权限类型,即adminstrator、manager、operator、browse、look、none。用REVOKE取消用户的访问权:REVOKEuser|$RESTALLREVOKEuser|$RESTLIBRARYREVOKEuser|$RESTLAYERlayer|CURRENTLIBRARY的权限管理只能对应用LIBRARY和ARCPLOT进行的操作进行管理,LIBRARY应用的是操作系统的文件管理结构,因此,ADMINSTRTOR在应用