Geodatabase是面向对象的空间数据存款和储蓄模型,等待安装到位

率先说一下感想呢,刚出道时感到深似海,掉到了GIS开发的陨石大坑里了,首先是学了小半年的Flex,用到了ArcGIS
API for
Flex,接着又是八个月的ArcEngine开发,以往好不不难摸到了少数时期的脚后跟,起先了自家的ArcGIS
API for
JavaScript的旅程。说实话依然蛮喜欢GIS开发这一行当的,很有趣,日常能够透过差异的接口来形成同二个效果,同时呢还足以因而同四个接口来做差异的事。言归正传,首先须要准备一下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自个儿只是二个能在各种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列的几何坐标和几何样子,表示在每一行定义了二个polygon。更加多详情参见ArcGIS字段数据类型

图片 2 

Geodatabase的3人命关天策略正是利用本田CR-VDBMS来保管从简单要素集到海量数据集,多用户并发操作的GIS数据集。二维表为几何数据集提供了宗旨的存储机制。SQL语言具有强有力的询问和操作表的机能,Geodatabase正是依照想使用这个效应而规划的。

在Geodatabase中,种种要素类(FeatureClass,见下)在三个独立的表中被管理。在要素类表中:各种要素类是二个表;单独的要素被贮存为行;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产品中保有十分重要概念意义。要素类是颇具同样几何类型和质量的成分的成团。对于实际使用中相见高级地理要素,能够依照属性特点,结合互连网模型和拓扑模型进行建立模型。比如,下水道管线和入孔井盖组成了2个小满管线网络;相邻的地块共享了公共的分界,大部分地块用户通过行使topology来维持在数量集中共享要素的完整性。

 

什么规定1个因素类?

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

1)  
点-用来表述那一个极小且无法用线或多边形来代表的地理要素(如GPS观测站)。

2)  
线—用来抒发那3个长条形的,格外狭窄也无法用多边形表示的地理要素,如街道中央线和溪水。线也得以发表那几个有长度却从未面积的成分,如概略线和边际。

3)  
多边形-是四个封闭的图纸,用来代表均质要素的形象和职位,如州、县、土地、土壤类型恐怕土地利用类型区等。

4)  
注记-地图像和文字本,包罗文件如何组织的质量;例如,除了各种注记的文本字符串。还包括其它品质,如放置文字形状,字体,字体大小和其他突显属性。注记也得以是feature-linked,也足以涵盖子类。

5)  
维度—一种尤其的注记,它展现具体的尺寸或离开;例如,为了展示3个建筑或一块地的一条边的长度,只怕三个不等因素之间的偏离。维度日常用来GIS设计、工程和工具应用中。

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

7)  
Multipatches—一个3D几何图形用于表明要素的外表表面或许外形,那一个成分占用3个离散的二维面积依然三维空间的体量。Multipatches由平面包车型大巴3D环和三角形组成。Multipatches可以被用来表明任何简单到复杂的靶子,如球体和立方体到表面和建筑。

要素数据集Feature Datasets

要素数据集是集体多个通用坐标系的相关要素类的汇集。要素数据集用于按空间或宗旨整合有关要素类。它们的主要用途是,将有关要素类编排成二个公用数据集,用以营造拓扑、网络数据集、地形数据集或几何网络。Feature
Datasets是在FeatureClass之上的多少个定义,分歧的FeatureClass具有拓扑关系时,应把它们组织在3个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是三个空的,须求向个中创造或添加要素及此外内容。一般选取导入,能够用要素类、表、栅格数据集足够数据库:

 图片 5

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

 图片 6

 

手续:打开ESHavalI.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)将有关要素类协会成要素数据集

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

图片 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

行使暗中认可实例名MSSQLSELANDVERAV4,设置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)能够被看成是开放的半空中数据库系统,那时通用关周全据模型的简单性和灵活性使数据库管理体系协理的应用程序范围13分普遍。数据的囤积和提取由存款和储蓄层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具有一个事务处理模型来管理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模型/OEscortDB。

DBMS作为一种存储地理数据集的贯彻机制而被采取。可是,DBMS并没有完全定义地理数据的语义。因而得以认为:Geodatabase选取两层连串布局,数据存款和储蓄层和应用层,在多少存款和储蓄层完成多少存款和储蓄和查找,在应用层完结高层数据完整性和音信处理。ArcSDE便是基于基于这种思维被设计出来的。

 

 图片 37

叁 、Geodatabase的存款和储蓄是什么样依据关系原则的?

DBMS管理Geodatabase有啥不一样吗?

总的来说,Geodatabase的储存模型是以DBMS原则为底蕴,利用了一层层简单却基本的关全面据库概念。DBMS(File
Geodatabase的文件系统)提供了简便易行而又正好的数据模型存款和储蓄和操作表。包蕴以下的第贰概念:

  • 多少被组织为表
  • 表包括行,表中具备的行具有相同的列
  • 每一列具有2个品种,如integer, decimal number, character, date等等。
  • 事关类用于三个表中的行和另1个表中的行发生关系,那是以各样表中都有贰个共用的列为基础的。
  • 提到完整性规则存在于具有表中。如,每一行总是有同等的列,2个域为每一列钦命了有效值或然值范围等等。

对ArcSDE Geodatabases来说,还有多量其余的DBMS成效能够行使:

  • SQL,一一日千里关系函数和操作符能够用于操作表和表中的成分。
  • SQL操作符同时被设计为能够处理常常的关周详据类型,如integers。

比如,3个要素类以DBMS表的款型储存。每一行代表四个元素,每一行中列描述了该因素的各类特色或质量,表中的某一列存款和储蓄了该因素的几何样子(如point,
line或polygon
coordinates)。就算shape字段存款和储蓄了polygon形状,在DBMS中山大学量的列类型用于shape字段,能够是真才实学的binary
large object
(BLOB)类型恐怕是扩充的上空类型,它们能够被某些DBMS所扶助。如,ESRubiconI提供了一个上空驶列车类型用于在ArcSDE
Geodatabases存款和储蓄要素,帮忙那种类型的关周详据库有Oracle, IBM DB2,
和Informix。SQL操作表中的行、列。那么些列类型(numbers, characters, dates,
BLOB’s, spatial
types等等)在SQL代数中被认为是目的。DBMS管理那么些简单的数据类型和表,同时别的应用逻辑实现更扑朔迷离的靶子行为和完整性约束。

 

*Geodatabase空间数据的情理存款和储蓄方式***

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

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

(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)代表了ESCRUISERI的地理数据库与其他外部系统里面开放的音信置换机制。ESOdysseyI将一体化的地理数据库方案和内容作为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奥迪Q5DB,它是面向对象思想与数据库管理种类组成的四个折中产物。OKugaDB与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