Geodatabase是面向对象的空间数据存储模型澳门永利备用网址,等待安装到位

先是说一下感想呢,刚出道时感到深似海,掉到了GIS开发的流星大坑里了,首先是学了小3个月的Flex,用到了ArcGIS
API for
Flex,接着又是5个月的ArcEngine开发,未来总算摸到了好哪天代的脚后跟,初始了本身的ArcGIS
API for
JavaScript的旅程。说实话照旧蛮喜欢GIS开发这一行当的,很有意思,日常能够因此分歧的接口来达成同3个意义,同时呢还足以由此同贰个接口来做不相同的事。言归正传,首先须要积谷防饥一下ArcGIS
属性图层编辑的工具:

一、概述

(1)Geodatabase是什么?

ArcGIS操作基于GIS文件格式和仓库储存于地理数据库(Geodatabase)中的地理音讯。Geodatabase是ArcGIS的地头数据结构,是用以编辑和数据管理的基本数据格式。它并不是一个数据库,只是联周到据库与GIS的一种工具。

空间数据库系统是描述、存款和储蓄和拍卖空间数据及其属性数据的数据库系统,按是不是对空间数据和属性数据举行全体集团分为二种:混合型空间数据库和集成性空间数据库。在后人方案中,为落实对空间对象的一条记下(record)变长的非结构化特征在关系型数据库的存款和储蓄和拍卖(空间图形数据不能够平昔运用通用的关周详据管理种类),以及保险空间数据的拓扑关系,在对空间数据和属性数据集成的研讨执行中,建议面向对象数据库以及易于落到实处的相比折中的对象-关系模型数据库。

 

(2)Geodatabase的类型

Geodatabase是面向对象的空间数据存款和储蓄模型,将地理数据存款和储蓄在一般的文件File Geodatabase中、Personal
database(微软的Access数据库的.mdb文件)中也许多用户的关周到据库Enterprise Geodatabase(比如Oracle,
Microsoft SQL Server, 或许IBM DB2)。

日前,结合Oracle对Geodatabase进行付出和保管的法子有三种:1.运用Oracle
Spatial的处境下利用Oracle Spatial SQL类型;2.行使ArcSDE
SQL类型——ArcSDE是一种基于中间件的对象-关周到据库模型。ArcSDE自个儿只是2个能在三种DBMS平台上提供高级的、高质量的GIS数据管理借口。

 澳门永利备用网址 1

(3)术语“地理数据库”在ArcGIS中有多个意思:

  • 地理数据库是ArcGIS的原生数据结构,并且是用以编辑和数码管理的显要数据格式。当ArcGIS使用八个地理新闻种类(GIS)文件格式的地理音讯时,会使用地理数据库效能。
  • 它是地理消息的情理存款和储蓄,重要利用数据库管理类别(DBMS)或文件系统。通过ArcGIS或通过利用SQL的数据库管理种类,能够访问和采取数据集集合的此物理实例。
  • 地理数据库具有完善的新闻模型,用于表示和管制地理消息。此周到新闻模型以一多重用于保存要素类、栅格数据集和性子的表的方法来兑现。别的,高级GIS数据对象可增进以下内容:GIS行为;用于管理空间完整性的条条框框;以及用于拍卖焦点因素、栅格数据和总体性的汪洋空中关系的工具。
  • 地理数据库软件逻辑提供了ArcGIS中动用的通用应用程序逻辑,用于访问和处理各类文件中以及各样格式的拥有地理数据。该逻辑帮忙处理地理数据库,包蕴处理shapefile、计算机支持绘图(CAD)文件、不规则三角网(TIN)、格网CAD数据、影象、地理标志语言(维生霉素L)文件和多量别的GIS数据源。
  • 地理数据库具有用于管理GIS数据工作流的作业模型。

 

1.ArcGIS Destop10.2

一 、地理数据库中的基本数据集

地理数据库是各连串型地理数据集(Geodataset)的聚集。数据集是在
ArcGIS
中集团和选拔地理音讯的重中之重途径。地理数据库包罗三种主要数据集类型:

  • 要素类
  • 栅格数据集

开创那么些数量集类型的集聚是统一筹划和营造地理数据库的率先步。用户平日是以营造若干上述二种基本数据集来初步构建地理数据库的。然后,用户能够选用更尖端的职能(例如添加拓扑、互联网或子类型)来添加或扩充地理数据库,以便建立模型GIS 行为、维护数据完整性和拍卖主要的长空关系集。

 

高级地理数据类型实现对要素类、栅格和属性表的恢弘

恢宏的Geodatabase成分用来扩充简单的表,要素类、栅格数据集,包含充裕足够的一举一动,数据完整性、数据管理等能力。Geodatabase的方式包含定义、完整性规则和表现。当中囊括坐标系属性coordinate
systems、坐标分辨率coordinate resolution、要素类feature
classes、拓扑topologies、互联网networks、栅格目录raster
catalogs、关系relationships和属性域domains。形式新闻存款和储蓄在DBMS的Geodatabase元数据表的汇集中,这几个表定义了数据的完整性和表现。

 

另外,Geodatabase(ArcSDE)还支持业务和版本化,除了帮忙可在超大规模高品质数据库中动用的有余数据类型(如注记、拓扑、互联网、地形和地址定位器)以外,还扶助成效完善的政工框架,可对四种数码管理工科作流程和操作举行管理。

 

2.ArcGIS Server10.2

2、Geodatabase的存储

Geodatabase存款和储蓄的数额范围

Geodatabase的储存不仅囊括不难的长空坐标和属性数据的报表,还包含这个地理数据集的形式和规则。Geodatabase的二种基础数据集(要素类,属性表和栅格数据集)和此外的Geodatabase成分都是表格的格局储存。在Geodataset中空间表示依旧以矢量要素的款式储存,可能以栅格数据存款和储蓄。几何对象和历史观的质量字段一起存款和储蓄在表的列中。

 

*Geodatabase几何要素怎么着存款和储蓄?***

Geodatabase将地理要素以表格的款型储存,每行记录表示三个要素。在 ArcGIS
中,几何数据类型用于提醒表中所存款和储蓄几何的项目(点、线、面、多点或多面体)。通过 ArcGIS 创设的储存为几何类型的字段称为
SHAPE。空间(图形)音信囤积在Shape字段中,数据类型是Geometry(如下表)。例如多边形要素集,在Shape列为每种要素存款和储蓄了多方面形类型,值Polygon用于描述Shape列的几何坐标和几何样子,表示在每一行定义了1个polygon。愈来愈多详情参见ArcGIS字段数据类型

澳门永利备用网址 2 

Geodatabase的一个重大策略正是行使景逸SUVDBMS来治本从容易要素集到海量数据集,多用户并发操作的GIS数据集。二维表为几何数据集提供了基本的贮存机制。SQL语言具有强大的询问和操作表的意义,Geodatabase正是基于想行使那么些成效而陈设的。

在Geodatabase中,每个要素类(FeatureClass,见下)在一个独立的表中被管理。在要素类表中:每一种要素类是3个表;单独的因素被储存为行;Shape存款和储蓄每一个要素的geometry
(point, line, polygon);Object ID列存储每种要素的绝无仅有标识符。在ArcSDE
Geodatabase中,关周到据仓库储存款和储蓄每种要素类为二个表。有二种DBMSs(Oracle,
DB2,和Informix)提供了SQL访问Geodatabase中的要素的geometry。

 

3.ArcGIS SDE10.2

3、要素类FeatureClass

*FeatureClass的概念***

ArcGIS是运用Geodatabase作为地理数据模型的,而在Geodatabase中常用的成分类有两种:点、线、多边形和注记,那三种要素类在ArcGIS产品中持有重差不多念意义。要素类是独具同等几何类型和天性的成分的成团。对于实际采取中遭遇高级地理要素,能够依据属性特点,结合互联网模型和拓扑模型举办建立模型。比如,下水道管线和入孔井盖组成了二个立冬管线网络;相邻的地块共享了集体的边际,大部分地块用户通过动用topology来维系在数额集中国共产党享要素的完整性。

 

什么鲜明3个要素类?

在ArcGIS中,要素类是独具相同空间参考和属性设置的同样要素的集聚。注意:当在Geodatabase中开创3个成分类时,须求安装要素类型以定义要素类的品种(点、线、多边形等等)。经常,要素类是点、线或多边形的联谊,具体有7种成分类型。

1)  
点-用来抒发那么些相当小且不可能用线或多边形来表示的地理要素(如GPS观测站)。

2)  
线—用来宣布这个长条形的,万分狭小也无法用多边形表示的地理要素,如街道中央线和溪水。线也足以发挥那个有长度却没有面积的因素,如概况线和边界。

3)  
多边形-是二个封闭的图纸,用来表示均质要素的模样和职位,如州、县、土地、土壤类型或然土地利用类型区等。

4)  
注记-地图像和文字本,包罗文件怎样组织的性子;例如,除了各样注记的文本字符串。还蕴涵其它属性,如放置文字形状,字体,字体大小和别的呈现属性。注记也能够是feature-linked,也得以分包子类。

5)  
维度—一种特有的注记,它显得具体的尺寸或离开;例如,为了显得三个构筑物或一块地的一条边的长短,恐怕两个差异因素之间的离开。维度常常用来GIS设计、工程和工具应用中。

6)  
多点—由持续一个点组成的成分。Multipoints平常用于管理大批量点集合的数组,如激光雷达点串,它们得以包罗几十亿个点。使用一个独门的列表示那样的点几何是不可行的。聚类这几个多点行能够使Geodatabase处理大块点集合。

7)  
Multipatches—一个3D几何图形用于表明要素的外表表面也许外形,这些因素占用1个离散的二维面积依旧三维空间的体量。Multipatches由平面包车型客车3D环和三角形组成。Multipatches能够被用于表明任何简单到复杂的靶子,如球体和立方体到表面和建筑。

要素数据集Feature Datasets

要素数据集是公私1个通用坐标系的有关要素类的聚合。要素数据集用于按空间或大旨整合有关要素类。它们的主要用途是,将有关要素类编排成八个公用数据集,用以营造拓扑、互联网数据集、地形数据集或几何网络。Feature
Datasets是在FeatureClass之上的1个定义,分化的FeatureClass具有拓扑关系时,应把它们社团在二个Feature
Datasets里面,同样在AO开发中是多少个很关键的基础性的类/Class。更多参见本文Geodatabase的体系布局

 

④ 、Geodatabase基本成效/职责

规划1个Geodatabase;

树立叁个Geodatabase;

加载数据集和栅格到Geodatabase中;

用高档数据类型扩大要素类;

用域、关联和子类型扩张表;

增添栅格数据集;

加载和保证Geodatabase中各种数据集的多寡;

管住Geodatabase的立异和工作;

管理File或者Personal
Geodatabase;

管理ArcSDE Geodatabase。

4.Microsoft SQL Server2008R2

(1)构建Geodatabase

相关软件:ArcCatalog、ArcMap

表明:用户可轻松创造地理数据库并向其增进行为,并且采用ArcGIS for
Desktop中的数据管理工科具时不须要展开编制程序工作。在ArcMap(用于编辑、分析地图和以及基于数据创建地图的应用程序)中询问和编写制定地理数据库时,能够很轻松地运用地理数据库中的数据和作为,而无需进行别的自定义。通过创办子类型、验证规则、关系和几何互连网将表现添加到地理数据库。能够使用ArcMap通过编写制定地理数据库中的一些共处要素并加上一些新因向来利用该作为。

ArcGIS Destop、Server和SQL
Server的安装百度时而都有的,重点讲一下ArcSDE的设置, 

->创建Geodatabase

开拓ArcCatalog,并利用Folder
Connections连接受地理数据文件地点:澳门永利备用网址 3

在文件夹图标上右键,采取New选项,新建民用Geodatabase:

 澳门永利备用网址 4

 此时成立的地理数据库myPGdb.mdb是3个空的,须求向里面创造或丰裕要素及其他内容。一般采取导入,能够用要素类、表、栅格数据集丰硕数据库:

 澳门永利备用网址 5

用户也足以团结新建要素(数据)集,以及表、关系、栅格目录等,随后在新建的花色中编辑或充裕相应地理要素,注意添加的多寡必须满意自定义的种种规则:

 澳门永利备用网址 6

 

手续:打开ESTucsonI.exe,选用ArcSDE for Microsoft SQL
Server,最终告竣完成后打开ArcMap

(2)添加、编辑Geodatabase要素

澳门永利备用网址 7

->将Table添加进Geodatabase

(注:早期版本的Geodatabase与高版本的进行数据沟通时有时会发生错误,那时可以在高版本环境下新建数据集,再将坐标系、字段、记录等相继增进进去。)

 澳门永利备用网址 8

 

开辟ArcToolbox,Data ManageMent(数据管理工具)——Geodatabase
Administration(地理数据库管理)——Create Enterprise
Geodatabase(创设集团版地理数据库)

->新建并添加要素类

(注:要钦赐要素类型,如下为线状要素Line Features):

 澳门永利备用网址 9

接下去设置坐标系,能够选用将已有个别坐标系消息导入,此处略;

然后进入字段设计,可以添加要求的字段,编辑其性质,如别称、数据类型、是或不是为空、私下认可值等,设计好之后保存。

 澳门永利备用网址 10

 ->添加/编辑要素数据项

在上面创制的空<线状地物>要素类上右键Load,装载数据:

 澳门永利备用网址 11

接下去进行字段匹配与编辑:

 澳门永利备用网址 12

点击实现,能够在Preview查看是不是成功。

 澳门永利备用网址 13

澳门永利备用网址 14

->用域、关联和子类型扩充表

属性域是讲述字段类型合法值的规则。多个要素类和表能够共享数据库中蕴藏的属性域。例如,在供水管网中,分裂用途的支管的压力值可以在不一样psi之间。

要素类的子类型:通过创制子类型,能够使各类要素使用各区别的属性域、默许值或连通性规则,类似于程序设计中的枚举数据类型。

对象时期的关系:目的之间具有1:1,1:n,m:n的涉嫌,例如通过宗地与主人之间的涉及类,在使用ArcMap中的数据时,能够轻松找出什么样全体者拥有怎么着宗地。

点击数据库名字前的 +
号,展开数据集,在须要扩大的数目集上右键Properties,打开属性面板:

在本文使用的数据库例子中,字段<BSM>(标识码)代表了差别地块类型,相同类其他地块拥有同一个BSM,故能够用<BSM>确立子类型Subtypes

 澳门永利备用网址 15

一律,在Subtypes选项卡上面,紧接着,是编写字段属性域Domain意义(注:Domain选项卡用于安装地理坐标范围,与表字段毫无干系):

 澳门永利备用网址 16

关系在Geodatabase中作为一种类/Class来统筹,用户使用时索要对它实行创办,在数据库上右键New->Relationship
Class 澳门永利备用网址 17

 填写关系类名称,选定建立关系的八个要素类:

 澳门永利备用网址 18

分选事关项目:

 澳门永利备用网址 19

慎选涉及字段:

 澳门永利备用网址 20

澳门永利备用网址 21

(3)将有关要素类组织成要素数据集

要素数据集是一组按空间或主旨相关、共享2个通用坐标系的要素类。要素数据集用于保存参预共享拓扑、互连网数据集、几何互联网或地形的要素类。

澳门永利备用网址 22

总得采用要素数据集来保存参加以下任什么地点理数据库作用的成分类集合:

  • 拓扑
  • 网络数据集(必须具有ArcGIS Network Analyst扩充模块以供役使)
  • 地势(必须怀有ArcGIS 3D Analyst扩张模块以供役使)
  • 几何互连网
  • 地籍结构

依据上述手续填写内容后,导入SDE授权文件,点击finish实现操作,会油然则生下边包车型地铁界面,等待安装达成。

->新建要素数据集Feature Datasets

 澳门永利备用网址 23

右键Import,向Feature
Datasets添加要素类
,这一步是下列操作的前提;

 澳门永利备用网址 24

->新建几何网络

右键New->Geometric Network最终一项,

 澳门永利备用网址 25

选择用于建立几何网络的数据类:

 澳门永利备用网址 26

设置好后,打开ArcCatalog,澳门永利备用网址 27,添加完地理数据库一定要记得注册哦!(很重点)

->建立拓扑

一律,右键New->Topology,能够建立拓扑:

 澳门永利备用网址 28

 

 

(4)在数据库服务器上创办Geodatabase

(注:本文以ArcSDE for Microsoft SQL Server为例。)

接下去就是明天的主菜了,打开ArcMap添加二个矢量图层

->安装SQL Server 2008 R2

运用私下认可实例名MSSQLSE奥德赛VERubicon,设置sa用户密码,选择双报到格局。

澳门永利备用网址 29

->成立sde帐户和sde空数据库

安装达成后,以sa用户登录,创设sde帐户,密码使用sde。打开sde帐户属性,赋予其任何最高权力。成立名为sde的数据库以作后用。

伊始“File——Share as——Service——Publish a
service”,最要紧的须要在Capabilities(能力)选取“Feature Access”,

->安装ArcSDE for Microsoft SQL Server

安装图解参见另一篇小说<点此链接>

设置成功的标志为esri_sde服务成功运转。查看方法:在处理器图标上右键“管理”,在“服务与应用程序”中找到“服务”,运营ArcSde
Service(esri_sde)。

澳门永利备用网址 30

澳门永利备用网址 31

->关联SDE

打开ArcCatalog,双击Database Connection下的Add Spatial Database
Connection:

 澳门永利备用网址 32

成功连接时如下图所示:

 澳门永利备用网址 33

此刻得以把gis-HP sde当作前边讲述的地理数据库,进行新建要素类/数据集。

 澳门永利备用网址 34

在SQL Server中查阅如下:

 澳门永利备用网址 35

输入SQL语句:SELECT TOP 10 * from
sde.dbo.POLYGONFEATURE,结果列出表中前10条记下。

那般就足以在ArcGIS和DBMS中联手管理地理数据了。

分选属性图层作用,点击“Analyze”分析图层是还是不是能够颁发,如无错误提示,点击“Publish”,发表成功后

贰 、Geodatabase的体系布局

澳门永利备用网址 36

一 、Geodatabase扮演的剧中人物

严峻来说,Geodatabase并不是数据库。在ArcGIS和血脉相通的用户系统中,通过Geodatabase这一规范化的地理数据模型,数据库管理类别(DBMS)能够被看做是开放的上空数据库系统,那时通用关周详据模型的简单性和灵活性使数据库管理连串援救的应用程序范围12分常见。数据的蕴藏和领取由存款和储蓄层DBMS实现,高端的数量整合和数目处理效果则由运用层ArcGIS提供。

只是向DBMS添加对空间属性的长空类型以及SQL帮衬并不足以支撑GIS,拓扑、互连网、线性参考系、栅格目录、注记、terrain、地图图层等都以GIS用以基于DBMS中所存储的简单空间表现情势来兑现GIS行为的高级对象。

 

从上边所述,能够见到Geodatabase在选拔上的特点:

a)Geodatabase有1个大面积的新闻模型来表明和保管地理新闻。这么些消息模型的兑现是经过一雨后春笋简单数据表,那个表是存款和储蓄在要素类、栅格数据集和质量表中的。

b)高级的GIS数据对象通过扩张GIS行为、规则来保管空间完整性,以及扩充工具来处理要素、栅格和属性表的豁达的半空中关系。

c)Geodatabase能够访问和拍卖各种数量格式的地理数据。Geodatabase扶助Shapefiles,
CAD文件, TIN, Grids, CAD数据,imagery,还有别的大批量GIS数据源。

d) Geodatabase具有3个事务处理模型来治本GIS的多寡工作流。

能够在ArcGIS ServiceDirectory中来看公告的 http://localhost:6080/arcgis/rest/services/locator/FeatureServer/0

贰 、Geodatabase为对象-关周详据模型

Geodatabase选取两层结构:数据存款和储蓄层和应用层。数据存储层是将GIS数据存款和储蓄为File、XML、DBMS等各个格式(关系型数据库),而应用层则是爱抚数据的高档逻辑和作为,例如Feature
Classes、Raster Dataset、Topology、Network、Address Locators等等(面向对象的思辨)。多层的Geodatabase体系布局被称作object-relational模型/O奥迪Q5DB。

DBMS作为一种存储地理数据集的贯彻机制而被运用。可是,DBMS并不曾完全定义地理数据的语义。由此能够认为:Geodatabase采纳两层连串布局,数据存款和储蓄层和应用层,在数量存款和储蓄层完毕多少存款和储蓄和搜索,在应用层达成高层数据完整性和消息处理。ArcSDE便是基于基于那种考虑被规划出来的。

 

 澳门永利备用网址 37

叁 、Geodatabase的贮存是怎么着根据关系原则的?

DBMS管理Geodatabase有何分化呢?

总的看,Geodatabase的贮存模型是以DBMS原则为底蕴,利用了一多元简单却基本的关全面据库概念。DBMS(File
Geodatabase的文件系统)提供了简短而又适合的数据模型存款和储蓄和操作表。包罗以下的重中之重概念:

  • 数码被协会为表
  • 表包涵行,表中具有的行具有相同的列
  • 每一列具有一个品类,如integer, decimal number, character, date等等。
  • 事关类用于一个表中的行和另叁个表中的行产生关联,那是以每一种表中都有2个集体的列为基础的。
  • 波及完整性规则存在于拥有表中。如,每一行总是有一样的列,3个域为每一列钦赐了有效值大概值范围等等。

对ArcSDE Geodatabases来说,还有大量别的的DBMS成效能够应用:

  • SQL,一各种关系函数和操作符能够用来操作表和表中的因素。
  • SQL操作符同时被规划为可以拍卖一般的关周到据类型,如integers。

诸如,三个因素类以DBMS表的花样储存。每一行代表一个成分,每一行中列描述了该因素的各类特色或性质,表中的某一列存款和储蓄了该因素的几何样子(如point,
line或polygon
coordinates)。假若shape字段存款和储蓄了polygon形状,在DBMS中山学院量的列类型用于shape字段,能够是金榜题名的binary
large object
(BLOB)类型只怕是扩张的长空类型,它们能够被一些DBMS所支撑。如,ESPAJEROI提供了1个空中列类型用于在ArcSDE
Geodatabases存储要素,扶助那连串型的关周密据库有Oracle, IBM DB2,
和Informix。SQL操作表中的行、列。那些列类型(numbers, characters, dates,
BLOB’s, spatial
types等等)在SQL代数中被认为是指标。DBMS管理这几个归纳的数据类型和表,同时其余应用逻辑完结更扑朔迷离的对象行为和完整性约束。

 

*Geodatabase空间数据的大体存款和储蓄方式***

DBMS中的地理数据仓库储存款和储蓄包涵两组表:数据集表(用户定义的表)和系统表(元数据)。

(1)  数据集表 –
地理数据库中的每种数据集都存款和储蓄在多少个或几个表中。这么些数据集表使用系统表管理数据。

(2)  系统表 –
地理数据库系统表用于追踪每一种地理数据库的始末。它们实质上讲述的是用于钦命全数数据集定义、规则和涉嫌的地理数据库方案。这一个系统表蕴含并管理元数据,全数那么些元数据均为促成地理数据库属性、数据评释规则和行为所需。

 

ArcGIS 10中有多少个主系统表:

GDB_Items:包涵地理数据库中的全体项(例如要素类、拓扑和属性域)的列表

GDB_ItemTypes:包含识别的项类型(例如表)的约定义列表

GDB_ItemRelationships:包罗各种项之间的方案关联,例如要素数据汇总包括哪些要素类

GDB_ItemRelationshipTypes:包涵识其他涉及项目(例如
DatasetInFeatureDataset)的预定义列表

 

相同的能够在数据库软件中找到新建的地理数据库(抽象意义上的,SDE只是ArcGIS
和 SQL之间的中间件,数据库依然放在SQL
Server上的),如下图中的spatial数据库–>RES2_4M表正是大家属性服务图层的内容,你会发觉那个数据库同时兼有了空间属性

四 、地理数据库事务管理

在不少意况下,用户可应用数据库管理系列(DBMS)的作业框架来管理地理数据库的编纂和立异。GIS用户会遇上很多少长度工作工作流极其关键的情事。在大部状态下,通过使用多用户DBMS和ArcSDE并使用版本化方法来治本对GIS数据库的翻新,能够应对那么些情状。

行使基于版本的业务模型的GIS数据编译工作流能够形成:

  • 多少个编辑会话 –
    单个GIS数据库更新可能须要开始展览连发数天或数周的关系多少个编辑会话的大气变更。
  • 多用户编辑 –
    多少个编辑人士平时要求同时革新相同的上空整合要素。每位用户都急需动用分其余数据库状态,从而查看各种更新,而忽略任何编写制定职员所做的更新。最终,每位用户须要交给更新并与别的编写制定职员展开协调,以识别并化解全体争论。
  • 检出/检入事务 –
    在触目皆是场合下都亟需将数据库中与某一定区域或地面对应的那部分多少检出到村办总结机中,然后在大概持续数天或数周的离线会话中更新此音讯,甚至带到实地展开运动编辑和翻新。这个革新必须付出到主数据库中。
  • 正史 –
    有时,在GIS数据库中保存每一个要素的历史版本(固然在此特定版本更新后)、在存档中保留已不再动用且发生变动的要素的副本或跟踪各种要素的野史是十三分可行的,例如,国家地图数据库中的宗地谱系或因素更新属性。
  • 传输只变动更新 –
    公司数据库和空间数据基础设备(在那之中的音讯在依次协会之间共享)的保卫安全要求一起同盟,这种协作需求动用定义完善的可扩充标记语言(XML)框架结构并因此Internet来共享立异,从而在数据库之间共享只改变更新。
  • 分布式地理数据库复本 –
    区域数据库能够是总局GIS数据库中与某一定地理区域对应的那部分数目标副本。这八个数据库必须经过沟通更新的措施定期实行共同。
  • DBMS之间的松懈耦合复制 –
    通常,GIS数据必须在一名目繁多数据库副本(复本)之间保持同步,每种站点将在其地面数据库上推行各自的立异。常常,那一个数据库只是为期通过Web举行一而再。更新必须定期从各类数据库复本传输到别的数据库,同时小编的内容也会获取更新。在许多景况下,DBMS是见仁见智的-例如,在Microsoft
    SQL Server、Oracle和IBMDB2之间复制数据集。

据说版本的地理数据库事务模型相对而言异常的粗略,即把创新记录在变更表中。版本会显式地将地理数据库的对象景况记录在添加表和删除表那四个增量表中。

澳门永利备用网址 38

5、Geodatabase XML

地理数据库可扩张标记语言(XML)代表了ESRubiconI的地理数据库与别的外部系统里面开放的新闻交流机制。ES凯雷德I将完整的地理数据库方案和情节作为XML规范举行公开的昭示和保障,并且提供了有的兑现示例来阐释怎么样落到实处在异物系统之间共享数据更新。

透过动用地理数据库XML规范,十分的大地简化了地理数据库的XML地理空间音讯双向沟通。外部应用程序能够接收XML数据流,个中囊括:

  • 换到和共享全部(以及部分)地理数据库方案;
  • 换来完整无损的数据集;
  • 换来不难要素集(与shapefile调换非凡相似);
  • 选取XML流调换变更(增量)记录集,以在地理数据库和别的外部数据结构之间传递更新和改动。

地理数据库XML是用于在ArcGIS用户和表面用户间共享数据的重中之重交换机制。

 

点开空间结果能够见到图层中相继要素的半空中地方

③ 、ArcSDE——空间数据引擎

ArcSDE是数据库系统中管理地理数据库的接口,通过该接口可现在关周全据库中参预空间数据,提供地理要素的长空地方及形状等消息,是ArcGIS与关全面据库之间的GIS通道。它同意用户在各个数目管理连串中管理地理消息,并使拥有的ArcGIS应用程序都能够利用这个数量。

澳门永利备用网址 39

一 、ArcSDE的实际职能

(1)高品质的DBMS通道

ArcSDE是各种DBMS的大道,它本身不是三个关周全据库或数额存款和储蓄模型。标准的SQL并不匡助空间数据。ArcSDE不但帮助各样DBMS提供的卓殊规作用,而且能为底层DBMS提供它们所不持有的效用支持。

(2)开放的DBMS支持

包括:Oracle、Oracle with Spatial or Locator、Microsoft SQL
Server、Informix以及IBM DB2,PostgreSQL等。

多用户ArcSDE为用户提供了巨型空间数据库帮助,并且协理多用户编辑。

(3)连续、可伸缩的数据库

GIS工作流和长事务处理GIS中的数据管理工科作流。

(4)丰裕的地理消息数据模型

(5)灵活的安插

ArcSDE通道能够让用户在客户端应用程序内,或跨网络、跨总括机地对应用服务器实行八种多层结构的方案陈设。

 

以此时候修改地理数据库中对应表中的成分经纬度数据,服务就会相应的爆发变化,可是在网页中的服务所展现只是缓存在网页上内容,供给刷新网页才能博取改观后的服务。

贰 、ArcSDE是根据多层系列布局的利用和存款和储蓄

数量的囤积和提取由存款和储蓄层DBMS完毕,而高端的数额整合和数码处理功效则由使用层ArcGIS提供。

ArcSDE用于高效的储存、索引、访问和有限帮助DBMS中的矢量、栅格、元数据及别的空间数据。

ArcSDE使用DBMS协理的数据类型,以表格的花样管理底层存款和储蓄的空间数据,并可采纳SQL在DBMS中做客这一个数据。ArcSDE同时也提供了开放的客户端支付接口(C
API和JAVA API),通过那一个接口,用户定制的应用程序也足以完全访问底层的空间数据表。

 

上述均为私家支付经历所得,希望大家能够多多批评指正、交流。

3、结合ArcSDE是依照中间件的数据库模型

概述小字部分简要介绍了对象-关系模型数据库O宝马X5DB,它是面向对象思想与数据库管理连串组成的一个折中产物。O宝马X3DB与GIS结合,具有如下优势:援助中央项目扩张;扶助复杂对象;帮助继承;支持规则。

透过中间件(如ArcSDE),完结从空中对象模型到数据仓库储存款和储蓄的投射,能够制止对DBMS内核的间接修改,消除数据库和最后用户直接口的差别。那样子的数据库一般包含用户-中间件-数据存款和储蓄层的尤其3个层次,而中间件的基本点职责正是分析并实施空间对象访问命令。

四、ArcEngine/AO中的Geodatabase

1、Geodatabase体系布局(AO角度)

(1)要素类Feature Class

意味着全体相同几何样子的空中实体,分为点状、线状、面状要素类等。

(2)对象类Object Class

表示非空间实体,不可能在地图上直接表示,但与地图上的地形图成分直接关乎。

要素类和对象类的严重性区别是:前者存款和储蓄了空间新闻,对象类则并未。

(3)要素数据集Feature Datasets

由一组具有同等空间参考(Spatial
Reference)的因素类组成,用于存放矢量数据。

(4)栅格数据集Raster Datasets

用以存放栅格数据,帮衬海量数据与形象镶嵌。可建立金字塔索引。

(5)TIN数据集TIN Datasets

由一连串不规则的三角形构成,代表了地球表面的上涨或下落。

(6)关系类Relationship Class

用于定义五个差别的因素类或对象类之间的关系关系。

(7)属性域Domain

概念属性的有用取值范围。

(8)几何网络Geometric Network

在若干要素类的功底上创设的类,可回顾网络的边要素和点要素。

2、Geodatabase对象模型

(1)Geodatabase中的首要类

Geodatabase中的首要类分为工作区部分多少集部分,工作区部分首要承担对Geodatabase中的各个数据源进行宏观管理,而数据集部分关键用以对数据库中各个切实的数据展开描述和保管。

 

WorkspaceFactory类

该类可被成立。用于生成Workspace,连接属性一般接纳PropertySet指标定义,并提供浏览、管理基于文件系统的Workspace方法。该类达成IWorkspaceFactory和IWorkspaceFactory2四个接口,派生三种一定数据库工作空间类。

IWorkspaceFactory接口提供创制和开辟Workspace的艺术,如Open方法用于打开ArcSDE数据库。

 

Workspace类

Workspace是3个用来存放空间数据和非空间数据的器皿,能够存放FeatureDatasets、RasterDatasets和Tables等各个数据。该类达成IWorkspace、IWorkspace2等接口。

一个Workspace能够被当作是文件系统中的目录,也能够被当作贰个关周到据库。

 

FeatureDataset组件类

储存同空间参考的三个Feature Class的数据集,能够储存Geometric
Network和Relationship Class。完结IFeatureDataset接口,其CreateFeatureClass方法可用来创制新的Feature
Class。

 

(2)Geodatabase中的其余常用类

回顾与空间数据入库相关的类、与查询有关的类。

与空间数据入库相关的类实现了各类数码格式的更换,如FeatureDataConverter、FieldChecker、EnumFieldError等。

与查询相关的类有QueryFilter和SpatialFilter。

 

3、Geodatabase的运用与付出

程序界面设计如下:

澳门永利备用网址 40

运作程序前保险ArcSDE服务ersi_sde开启.

 

一对代码如下:

澳门永利备用网址 41澳门永利备用网址 42

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Text;
  7 using System.Windows.Forms;
  8 using ESRI.ArcGIS.esriSystem;
  9 using ESRI.ArcGIS.Carto;
 10 using ESRI.ArcGIS.Controls;
 11 using ESRI.ArcGIS.SystemUI;
 12 using ESRI.ArcGIS.Geometry;
 13 using ESRI.ArcGIS.Geodatabase;
 14 using ESRI.ArcGIS.DataSourcesFile;
 15 using ESRI.ArcGIS.Display;
 16 using ESRI.ArcGIS.DataSourcesGDB;
 17 using ESRI.ArcGIS.DataSourcesRaster;
 18 
 19 namespace lesson1
 20 {
 21     public partial class Form1 : Form
 22     {
 23         public Form1()
 24         {
 25             InitializeComponent();
 26         }
 27 
 28         private void Form1_Load(object sender, EventArgs e)
 29         {
 30             IAoInitialize pao = new ESRI.ArcGIS.esriSystem.AoInitialize();
 31             pao.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB);
 32 
 33         }
 34         // 工作空间
 35         IWorkspace workspace;
 36         //矢量数据工作空间
 37         IFeatureWorkspace featureWorkspace;
 38         //影像数据工作空间
 39         IRasterWorkspaceEx rasterWorkspace;
 40         //矢量数据集
 41         IFeatureDataset featureDataset;
 42         //影像数据集
 43         IRasterDataset rasterDataset;
 44         private void button1_Click(object sender, EventArgs e)
 45         {
 46             // SDE空间连接属性
 47             IPropertySet propertySet = new PropertySet();
 48             propertySet.SetProperty("server", this.textBox1.Text);
 49             propertySet.SetProperty("instance", this.textBox2.Text);
 50             propertySet.SetProperty("database", this.textBox3.Text);
 51             propertySet.SetProperty("user", this.textBox4.Text);
 52             propertySet.SetProperty("password", this.textBox5.Text);
 53             propertySet.SetProperty("version", "SDE.DEFAULT");
 54             IWorkspaceFactory workspaceFactory = new SdeWorkspaceFactory();
 55             //打开SDE工作空间
 56 
 57             workspace = workspaceFactory.Open(propertySet, 0);
 58             MessageBox.Show("连接SDE空间数据库成功");
 59 
 60         }
 61         //创建数据集(矢量数据集和影像数据集)
 62         private void button2_Click(object sender, EventArgs e)
 63         {
 64             featureWorkspace = workspace as IFeatureWorkspace;
 65             rasterWorkspace = workspace as IRasterWorkspaceEx;
 66             //定义空间参考
 67             ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironment();
 68             ISpatialReference spatialReference = spatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_Beijing1954);
 69             spatialReference.SetDomain(-1000, -1000, 1000, 1000);
 70 
 71             IEnumDatasetName enumDatasetName;
 72             IDatasetName datasetName;
 73             string dsName = "";
 74             enumDatasetName = workspace.get_DatasetNames(esriDatasetType.esriDTFeatureDataset);
 75             datasetName = enumDatasetName.Next();
 76             bool isExist = false;
 77             //创建矢量数据集
 78             dsName = "SDE." + this.textBox6.Text;
 79             while (datasetName != null)
 80             {
 81                 if (datasetName.Name == dsName)
 82                 {
 83                     isExist = true;
 84                 }
 85                 datasetName = enumDatasetName.Next();
 86             }
 87             if (isExist == false)
 88             {
 89                 featureDataset = featureWorkspace.CreateFeatureDataset(this.textBox6.Text, spatialReference);
 90             }
 91             //创建影像数据集
 92             isExist = false;
 93             enumDatasetName = workspace.get_DatasetNames(esriDatasetType.esriDTRasterDataset);
 94             datasetName = enumDatasetName.Next();
 95 
 96             dsName = "SDE." + this.textBox6.Text;
 97             while (datasetName != null)
 98             {
 99                 if (datasetName.Name == dsName)
100                 {
101                     isExist = true;
102                 }
103                 datasetName = enumDatasetName.Next();
104             }
105             if (isExist == false)
106             {
107                 //设置存储参数
108                 IRasterStorageDef rasterStorageDef = new RasterStorageDef();
109                 rasterStorageDef.CompressionType = esriRasterCompressionType.esriRasterCompressionUncompressed;
110                 rasterStorageDef.PyramidLevel = 1;
111                 rasterStorageDef.PyramidResampleType = rstResamplingTypes.RSP_BilinearInterpolation;
112                 rasterStorageDef.TileHeight = 128;
113                 rasterStorageDef.TileWidth = 128;
114                 //设置坐标系统
115                 IRasterDef rasterDef = new RasterDef();
116                 UnknownCoordinateSystem system = new UnknownCoordinateSystem();
117                 ISpatialReference rasterDpatialRefrence = system as ESRI.ArcGIS.Geometry.ISpatialReference;
118                 rasterDef.SpatialReference = rasterDpatialRefrence;
119 
120                 IGeometryDef geometryDef = new GeometryDef();
121                 IGeometryDefEdit geometryDefedit = (IGeometryDefEdit)geometryDef;
122                 geometryDefedit.AvgNumPoints_2 = 5;
123                 geometryDefedit.GridCount_2 = 1;
124                 geometryDefedit.set_GridSize(0, 1000);
125                 geometryDefedit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
126 
127                 UnknownCoordinateSystem system2 = new UnknownCoordinateSystem();
128                 ISpatialReference spatialReference2 = system2 as ESRI.ArcGIS.Geometry.ISpatialReference;
129                 geometryDefedit.SpatialReference_2 = spatialReference2;
130                 rasterDataset = rasterWorkspace.CreateRasterDataset(this.textBox7.Text, 1, rstPixelType.PT_LONG, rasterStorageDef, "DEFAULTS", rasterDef, geometryDef);
131 
132             }
133 
134         }
135         //加载矢量数据到SDE数据库
136         private void button3_Click(object sender, EventArgs e)
137         {
138             featureWorkspace = workspace as IFeatureWorkspace;
139             this.openFileDialog1.Filter = "shp file (*.shp)|*.shp";
140             this.openFileDialog1.Title = "打开矢量数据";
141             this.openFileDialog1.Multiselect = false;
142             string fileName = "";
143             if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
144             {
145                 fileName = this.openFileDialog1.FileName;
146                 string filepath;
147                 string file;
148                 int lastIndex;
149                 lastIndex = fileName.LastIndexOf(@"\");
150                 filepath = fileName.Substring(0, lastIndex);
151                 file = fileName.Substring(lastIndex + 1);
152                 //读取SHP数据
153                 IWorkspaceFactory shpwpf = new ShapefileWorkspaceFactory();
154                 IWorkspace shpwp = shpwpf.OpenFromFile(filepath, 0);
155                 IFeatureWorkspace shpfwp = shpwp as IFeatureWorkspace;
156                 IFeatureClass shpfc = shpfwp.OpenFeatureClass(file);
157 
158                 //导入SDE数据库 
159                 IFeatureClass sdeFeatureClass = null;
160                 FeatureClassDescription fClassD = new FeatureClassDescription();
161                 IFeatureClassDescription featureClassDescription = fClassD as IFeatureClassDescription;
162                 IObjectClassDescription objectClassDescription = featureClassDescription as IObjectClassDescription;
163                 IFields fields = shpfc.Fields;
164                 IFieldChecker fieldChecker = new FieldChecker();
165                 IEnumFieldError enumFieldError = null;
166                 IFields validateFields = null;
167                 fieldChecker.ValidateWorkspace = featureWorkspace as IWorkspace;
168                 fieldChecker.Validate(fields, out enumFieldError, out validateFields);
169                 featureDataset = featureWorkspace.OpenFeatureDataset(this.textBox6.Text);
170                 try
171                 {
172                     sdeFeatureClass = featureWorkspace.OpenFeatureClass(shpfc.AliasName);
173                 }
174                 catch (Exception ex)
175                 {
176                 }
177                 //在SDE数据库中创建矢量数据集
178                 if (sdeFeatureClass == null)
179                 {
180                     sdeFeatureClass = featureDataset.CreateFeatureClass(shpfc.AliasName, validateFields, objectClassDescription.InstanceCLSID, objectClassDescription.ClassExtensionCLSID, shpfc.FeatureType, shpfc.ShapeFieldName, "");
181                 }
182                 IFeatureCursor featureCursor = shpfc.Search(null, true);
183                 IFeature feature = featureCursor.NextFeature();
184                 IFeatureCursor sdeFeatureCursor = sdeFeatureClass.Insert(true);
185                 IFeatureBuffer sdeFeatureBuffer;
186                 //添加实体对象
187                 while (feature != null)
188                 {
189                     sdeFeatureBuffer = sdeFeatureClass.CreateFeatureBuffer();
190                     IField shpField = new Field();
191                     IFields shpFields = feature.Fields;
192                     for (int i = 0; i < shpFields.FieldCount; i++)
193                     {
194                         shpField = shpFields.get_Field(i);
195                         int index = sdeFeatureBuffer.Fields.FindField(shpField.Name);
196                         if (index != -1)
197                         {
198                             sdeFeatureBuffer.set_Value(index, feature.get_Value(i));
199                         }
200                     }
201                     sdeFeatureCursor.InsertFeature(sdeFeatureBuffer);
202                     sdeFeatureCursor.Flush();
203                     feature = featureCursor.NextFeature();
204                 }
205                 //加载数据到Mapcontrol
206                 IFeatureLayer sdeFeatureLayer = new FeatureLayer();
207                 sdeFeatureLayer.FeatureClass = sdeFeatureClass;
208                 this.axMapControl1.Map.AddLayer(sdeFeatureLayer as ILayer);
209                 this.axMapControl1.Extent = this.axMapControl1.FullExtent;
210                 this.axMapControl1.Refresh();
211             }
212 
213         }
214         //加载影像数据到SDE数据库
215         private void button4_Click(object sender, EventArgs e)
216         {
217             this.openFileDialog1.Filter = "TIFF file (*.tif)|*.tif";
218             this.openFileDialog1.Title = "打开影像数据";
219             this.openFileDialog1.Multiselect = false;
220             string fileName = "";
221             if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
222             {
223                 fileName = this.openFileDialog1.FileName;
224                 string filepath;
225                 string file;
226                 int lastIndex;
227                 lastIndex = fileName.LastIndexOf(@"\");
228                 filepath = fileName.Substring(0, lastIndex);
229                 file = fileName.Substring(lastIndex + 1);
230 
231                 //导入SDE数据库 
232                 rasterWorkspace = workspace as IRasterWorkspaceEx;
233                 IWorkspaceFactory tifwpf = new RasterWorkspaceFactory();
234                 IWorkspace tifwp = tifwpf.OpenFromFile(filepath, 0);
235                 IRasterWorkspace tifrwp = tifwp as IRasterWorkspace;
236                 IRasterDataset rasterDataset = tifrwp.OpenRasterDataset(file);
237                 IRasterDataset sdeRasterDataset = null;
238                 lastIndex = file.LastIndexOf(@".");
239                 file = file.Substring(0, lastIndex);
240                 try
241                 {
242                     sdeRasterDataset = rasterWorkspace.OpenRasterDataset(file);
243                 }
244                 catch (Exception Ex)
245                 {
246                 }
247                 if (sdeRasterDataset == null)
248                 {
249                     IGeoDataset geoDataset = rasterDataset as IGeoDataset;
250                     IRasterSdeServerOperation rasterSdeServeroperation;
251 
252                     IBasicRasterSdeConnection sdeCon = new BasicRasterSdeLoader();
253                     IPropertySet propertySet = new PropertySet();
254                     propertySet = workspace.ConnectionProperties;
255                     //建立与SDE数据库的连接
256                     sdeCon.ServerName = propertySet.GetProperty("server").ToString();
257                     sdeCon.Instance = propertySet.GetProperty("instance").ToString();
258                     sdeCon.UserName = propertySet.GetProperty("user").ToString();
259                     sdeCon.Password = "sde";
260                     sdeCon.Database = propertySet.GetProperty("database").ToString();
261                     sdeCon.SdeRasterName = file;
262                     sdeCon.InputRasterName = fileName;
263                     rasterSdeServeroperation = sdeCon as IRasterSdeServerOperation;
264                     //保存影像数据到SDE数据库中
265                     rasterSdeServeroperation.Create();
266                     rasterSdeServeroperation.Update();
267                     rasterSdeServeroperation.ComputeStatistics();
268                     IRasterLayer rasterLayer = new RasterLayer();
269                     sdeRasterDataset = rasterWorkspace.OpenRasterDataset(file);
270                     rasterLayer.CreateFromDataset(sdeRasterDataset);
271                     this.axMapControl1.Map.AddLayer(rasterLayer as ILayer);
272                     this.axMapControl1.Extent = this.axMapControl1.FullExtent;
273                     this.axMapControl1.Refresh();
274                 }
275             }
276         }
277 
278     }
279 }

Form1.cs