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

手续:打开ES奇骏I.exe,选取ArcSDE for Microsoft SQL
Server,最终告竣完结后打开ArcMap

一、概述

(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本人只是3个能在种种DBMS平台上提供高级的、高质量的GIS数据管理借口。

 图片 1

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

  • 地理数据库是ArcGIS的原生数据结构,并且是用以编辑和多少管理的重中之重数据格式。当ArcGIS使用两个地理音讯类别(GIS)文件格式的地理音信时,会使用地理数据库功用。
  • 它是地理音信的大体存款和储蓄,首要选择数据库管理体系(DBMS)或文件系统。通过ArcGIS或透过行使SQL的数据库管理种类,能够访问和动用数据集集合的此物理实例。
  • 地理数据库具有完善的新闻模型,用于表示和管理地理消息。此周全音信模型以一多级用于保存要素类、栅格数据集和属性的表的不二法门来落实。别的,高级GIS数据对象可增加以下内容:GIS行为;用于管理空间完整性的平整;以及用于拍卖主旨要素、栅格数据和性格的大气上空关系的工具。
  • 地理数据库软件逻辑提供了ArcGIS中利用的通用应用程序逻辑,用于访问和处理各个文件中以及各样格式的有所地理数据。该逻辑补助处理地理数据库,包含处理shapefile、总括机协理绘图(CAD)文件、不规则三角网(TIN)、格网CAD数据、影象、地理标志语言(青霉素L)文件和大度其余GIS数据源。
  • 地理数据库具有用于管理GIS数据工作流的事人体模型型。

 

如上均为个体支付经历所得,希望我们能够多多批评指正、交流。

四、ArcEngine/AO中的Geodatabase

1.ArcGIS Destop10.2

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

5、Geodatabase XML

地理数据库可扩展标记语言(XML)代表了ESLacrosseI的地理数据库与任何外部系统里头开放的新闻置换机制。ESLacrosseI将完全的地理数据库方案和内容作为XML规范开始展览精通的公布和保证,并且提供了一部分达成示例来阐释怎么样促成在异物系统里面共享数据更新。

因此选拔地理数据库XML规范,非常大地简化了地理数据库的XML地理空间音信双向交流。外部应用程序能够接收XML数据流,个中囊括:

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

地理数据库XML是用以在ArcGIS用户和外部用户间共享数据的严重性沟通机制。

 

选用属性图层功效,点击“Analyze”分析图层是或不是可以发表,如无错误提醒,点击“Publish”,宣布成功后

->新建几何网络

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

 图片 3

慎选取于建立几何网络的数据类:

 图片 4

图片 5

->新建要素数据集Feature Datasets

 图片 6

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

开发银行“File——Share as——Service——Publish a
service”,最要害的内需在Capabilities(能力)选拔“Feature Access”,

->创制sde帐户和sde空数据库

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

本条时候修改地理数据库中对应表中的元素经纬度数据,服务就会相应的产生变化,然而在网页中的服务所显示只是缓存在网页上内容,必要刷新网页才能博得改观后的劳务。

壹 、ArcSDE的有血有肉功效

(1)高品质的DBMS通道

ArcSDE是五种DBMS的坦途,它本人不是3个关周全据库或数量存款和储蓄模型。标准的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通道可以让用户在客户端应用程序内,或跨互连网、跨总计机地对应用服务器举行二种多层结构的方案布署。

 

能够在ArcGIS ServiceDirectory中见到通知的 http://localhost:6080/arcgis/rest/services/locator/FeatureServer/0

3、要素类FeatureClass

*FeatureClass的概念***

ArcGIS是使用Geodatabase作为地理数据模型的,而在Geodatabase中常用的因素类有多样:点、线、多边形和注记,那各种要素类在ArcGIS产品中具有至关心重视要概念意义。要素类是具有相同几何类型和特性的要素的汇聚。对于实际利用中境遇高级地理要素,能够依照属性特点,结合互联网模型和拓扑模型进行建立模型。比如,下水道管线和入孔井盖组成了一个立冬管线网络;相邻的地块共享了公共的疆界,超过5/10地块用户通过应用topology来维持在数额汇总共享要素的完整性。

 

怎么明确贰个因素类?

在ArcGIS中,要素类是持有相同空间参考和品质设置的一律要素的集结。注意:当在Geodatabase中创造3个成分类时,须求安装要素类型以定义要素类的种类(点、线、多边形等等)。平常,要素类是点、线或多边形的集纳,具体有7种成分类型。

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

2)  
线—用来表述这一个长条形的,12分狭小也不可能用多边形表示的地理要素,如街道中央线和溪水。线也足以发挥那多少个有长度却尚无面积的因素,如概况线和境界。

3)  
多边形-是四个封闭的图样,用来表示均质要素的造型和岗位,如州、县、土地、土壤类型或许土地使用类型区等。

4)  
注记-地图像和文字本,包含文件怎么样组织的个性;例如,除了各样注记的文本字符串。还包蕴别的品质,如放置文字形状,字体,字体大小和任何展现属性。注记也足以是feature-linked,也足以包含子类。

5)  
维度—一种独特的注记,它展现具体的长度或离开;例如,为了显得3个构筑物或一块地的一条边的长度,只怕多少个不等因素之间的距离。维度平时用来GIS设计、工程和工具应用中。

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

7)  
Multipatches—1个3D几何图形用于表明要素的外表表面或然外形,那些成分占用二个离散的二维面积依旧三维空间的容积。Multipatches由平面包车型大巴3D环和三角形组成。Multipatches能够被用于表明任何不难到复杂的目的,如球体和立方体到表面和构筑物。

要素数据集Feature Datasets

要素数据集是公私二个通用坐标系的相干要素类的晤面。要素数据集用于按空间或核心整合有关要素类。它们的重要用途是,将有关要素类编排成三个公用数据集,用以营造拓扑、互联网数据集、地形数据集或几何互连网。Feature
Datasets是在FeatureClass之上的二个定义,差别的FeatureClass具有拓扑关系时,应把它们组织在三个Feature
Datasets里面,同样在AO开发中是2个很重点的基础性的类/Class。越来越多参见本文Geodatabase的体系布局

 

④ 、Geodatabase基本功用/职责

规划八个Geodatabase;

建立1个Geodatabase;

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

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

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

扩张栅格数据集;

加载和爱抚Geodatabase中各种数据集的数据;

管制Geodatabase的翻新和作业;

管理File或者Personal
Geodatabase;

管理ArcSDE Geodatabase。

图片 7

(3)将有关要素类协会成要素数据集

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

图片 8

非得采取要素数据集来保存插足以下任什么地点理数据库功用的因素类集合:

  • 拓扑
  • 互联网数据集(必须拥有ArcGIS Network Analyst扩充模块以供役使)
  • 形势(必须持有ArcGIS 3D Analyst扩大模块以供役使)
  • 几何网络
  • 地籍结构

开拓ArcToolbox,Data ManageMent(数据管理工科具)——Geodatabase
Administration(地理数据库管理)——Create Enterprise
Geodatabase(成立公司版地理数据库)

(2)添加、编辑Geodatabase要素

3.ArcGIS SDE10.2

3、Geodatabase的行使与开销

程序界面设计如下:

图片 9

运行程序前保证ArcSDE服务ersi_sde开启.

 

某些代码如下:

图片 10图片 11

  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

 

 图片 12

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

地理数据库是各个类型地理数据集(Geodataset)的集结。数据集是在
ArcGIS
中团队和利用地理音信的重要路径。地理数据库包涵三种关键数据集类型:

  • 要素类
  • 栅格数据集

创设那一个数据集类型的聚集是统一筹划和创设地理数据库的首先步。用户常常是以营造若干上述三种为主数据集来初始营造地理数据库的。然后,用户能够选取更尖端的机能(例如添加拓扑、互联网或子类型)来添加或扩展地理数据库,以便建模GIS 行为、维护数据完整性和处理重大的上空关系集。

 

高档地理数据类型完毕对要素类、栅格和属性表的扩充

恢宏的Geodatabase成分用来扩大不难的表,要素类、栅格数据集,包蕴丰硕丰硕的行为,数据完整性、数据管理等能力。Geodatabase的情势包涵定义、完整性规则和表现。个中包蕴坐标系属性coordinate
systems、坐标分辨率coordinate resolution、要素类feature
classes、拓扑topologies、网络networks、栅格目录raster
catalogs、关系relationships和属性域domains。格局新闻囤积在DBMS的Geodatabase元数据表的聚集中,那个表定义了数量的完整性和表现。

 

另外,Geodatabase(ArcSDE)还支持事务和版本化,除了协助可在超大规模高品质数据库中运用的有余数据类型(如注记、拓扑、互连网、地形和地点定位器)以外,还协理功用完善的业务框架,可对各类多少管理工科作流程和操作举行田管。

 

安装好后,打开ArcCatalog,图片 13,添加完地理数据库一定要记得注册哦!(很关键)

->安装SQL Server 2008 R2

应用暗中同意实例名MSSQLSE奥德赛VE途观,设置sa用户密码,选择双记有名的模特式。

2.ArcGIS Server10.2

贰 、Geodatabase为对象-关全面据模型

Geodatabase选拔两层协会:数据存款和储蓄层和应用层。数据存款和储蓄层是将GIS数据存款和储蓄为File、XML、DBMS等两种格式(关系型数据库),而应用层则是维护数据的高级逻辑和行为,例如Feature
Classes、Raster Dataset、Topology、Network、Address Locators等等(面向对象的思维)。多层的Geodatabase体系布局被喻为object-relational模型/OSportageDB。

DBMS作为一种存储地理数据集的落到实处机制而被使用。但是,DBMS并没有完全定义地理数据的语义。因而得以认为:Geodatabase选取两层连串布局,数据存储层和应用层,在数额存款和储蓄层实现多少存款和储蓄和寻找,在应用层完毕高层数据完整性和新闻处理。ArcSDE正是基于基于那种思想被规划出来的。

 

图片 14

(1)构建Geodatabase

连带软件:ArcCatalog、ArcMap

表明:用户可轻松成立地理数据库并向其拉长行为,并且应用ArcGIS for
Desktop中的数据管理工具时不供给开始展览编制程序工作。在ArcMap(用于编辑、分析地图和以及依据数据创设地图的应用程序)中询问和编辑地理数据库时,可以很轻松地利用地理数据库中的数据和表现,而无需进行其余自定义。通过成立子类型、验证规则、关系和几何互联网将表现添加到地理数据库。能够动用ArcMap通过编写制定地理数据库中的一些存世要素并丰裕一些新因一直采用该作为。

4.Microsoft SQL Server2008R2

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

属性域是讲述字段类型合法值的平整。四个要素类和表能够共享数据库中存款和储蓄的属性域。例如,在供水管网中,区别用途的支管的压力值能够在区别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

2、Geodatabase的存储

Geodatabase存款和储蓄的数额范围

Geodatabase的贮存不仅囊括不难的空中坐标和属性数据的表格,还包蕴那几个地理数据集的情势和规则。Geodatabase的两种基础数据集(要素类,属性表和栅格数据集)和此外的Geodatabase成分都是表格的款型储存。在Geodataset中空间表示还是以矢量要素的样式储存,恐怕以栅格数据存款和储蓄。几何对象和历史观的习性字段一起存款和储蓄在表的列中。

 

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

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

图片 22 

Geodatabase的2个生死攸关策略正是利用陆风X8DBMS来保管从简单要素集到海量数据集,多用户并发操作的GIS数据集。二维表为几何数据集提供了主旨的存款和储蓄机制。SQL语言具有强有力的询问和操作表的效用,Geodatabase正是依照想行使那几个效应而规划的。

在Geodatabase中,各类要素类(FeatureClass,见下)在七个独门的表中被管制。在要素类表中:每个要素类是二个表;单独的成分被积存为行;Shape存款和储蓄各类要素的geometry
(point, line, polygon);Object ID列存款和储蓄每种要素的唯一标识符。在ArcSDE
Geodatabase中,关周密据库存款和储蓄各种要素类为3个表。有两种DBMSs(Oracle,
DB2,和Informix)提供了SQL访问Geodatabase中的要素的geometry。

 

 

->将Table添加进Geodatabase

(注:早期版本的Geodatabase与高版本的拓展数据沟通时有时会时有发生错误,那时能够在高版本环境下新建数据集,再将坐标系、字段、记录等各种增加进去。)

 图片 23

 

图片 24

->建立拓扑

同等,右键New->Topology,能够建立拓扑:

 图片 25

 

接下去正是今日的主菜了,打开ArcMap添加3个矢量图层

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

概述小字部分简要介绍了对象-关系模型数据库O安德拉DB,它是面向对象思想与数据库管理类别组成的三个折中产物。O安德拉DB与GIS结合,具有如下优势:协助宗旨项目扩展;援助复杂对象;援救继承;协理规则。

因而中间件(如ArcSDE),完结从半空对象模型到数据仓库储存款和储蓄的照射,能够幸免对DBMS内核的直白修改,消除数据库和最后用户直接口的差异。那规范的数据库一般包涵用户-中间件-数据存款和储蓄层的相当3个层次,而中间件的机要职责正是分析并执行空间对象访问命令。

图片 26

三 、ArcSDE——空间数据引擎

ArcSDE是数据库系统中管理地理数据库的接口,通过该接口可以后关周全据库中进入空间数据,提供地理要素的长空地方及形状等新闻,是ArcGIS与关周全据库之间的GIS通道。它同意用户在各个数据管理体系中管理地理音讯,并使拥有的ArcGIS应用程序都能够选拔那个多少。

一样的能够在数据库软件中找到新建的地理数据库(抽象意义上的,SDE只是ArcGIS
和 SQL之间的中间件,数据库依旧放在SQL
Server上的),如下图中的spatial数据库–>RES2_4M表就是大家属性服务图层的始末,你会意识这么些数据库同时具有了空间属性

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

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

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

->新建并添加要素类

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

 图片 27

接下去设置坐标系,能够选择将已部分坐标系音信导入,此处略;

接下来进入字段设计,能够添加供给的字段,编辑其性格,如外号、数据类型、是不是为空、默许值等,设计好之后保存。

 图片 28

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

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

 图片 29

接下去进行字段匹配与编写制定:

 图片 30

点击达成,能够在Preview查看是或不是中标。

 图片 31

依照上述手续填写内容后,导入SDE授权文件,点击finish完毕操作,会出现上面的界面,等待安装到位。

② 、Geodatabase的系统布局

 图片 32

一 、Geodatabase扮演的角色

严峻来说,Geodatabase并不是数据库。在ArcGIS和相关的用户系统中,通过Geodatabase这一规范化的地理数据模型,数据库管理连串(DBMS)能够被用作是开放的上空数据库系统,那时通用关周到据模型的简单性和灵活性使数据库管理类别支持的应用程序范围格外广泛。数据的囤积和提取由存款和储蓄层DBMS达成,高端的多少整合和数目处理功效则由运用层ArcGIS提供。

只是向DBMS添加对空间属性的长空类型以及SQL帮助并不足以支撑GIS,拓扑、网络、线性参考系、栅格目录、注记、terrain、地图图层等都以GIS用以基于DBMS中所存款和储蓄的简要空间表现格局来贯彻GIS行为的高档对象。

 

从地点所述,能够看看Geodatabase在利用上的性状:

a)Geodatabase有二个常见的音讯模型来抒发和治本地理消息。那几个音讯模型的完结是通过一种种简单数据表,这一个表是存款和储蓄在要素类、栅格数据集和总体性表中的。

b)高级的GIS数据对象通过扩展GIS行为、规则来管理空间完整性,以及扩大工具来拍卖要素、栅格和属性表的多量的上空关系。

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

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

图片 33

->关联SDE

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

 图片 34

事业有成总是时如下图所示:

 图片 35

那时候能够把gis-HP sde当作前边讲述的地理数据库,进行新建要素类/数据集。

 图片 36

在SQL Server中查看如下:

 图片 37

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

诸如此类就足以在ArcGIS和DBMS中一起管理地理数据了。

第1说一下感想呢,刚出道时感觉深似海,掉到了GIS开发的陨石大坑里了,首先是学了小7个月的Flex,用到了ArcGIS
API for
Flex,接着又是3个月的ArcEngine开发,今后好不不难摸到了几许时期的脚后跟,开端了本人的ArcGIS
API for
JavaScript的旅程。说实话照旧蛮喜欢GIS开发这一行当的,很风趣,日常能够因而差别的接口来形成同一个效果,同时呢还足以因而同3个接口来做分歧的事。言归正传,首先供给预备一下ArcGIS
属性图层编辑的工具:

->安装ArcSDE for Microsoft SQL Server

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

安装成功的声明为esri_sde服务成功运维。查看方法:在微型总括机图标上右键“管理”,在“服务与应用程序”中找到“服务”,运转ArcSde
瑟维斯(esri_sde)。

图片 38

点开空间结果能够见见图层中逐条要素的空中地点

->创建Geodatabase

打开ArcCatalog,并选取Folder
Connections连接受地理数据文件地方:图片 39

在文书夹图标上右键,采取New选项,新建私人住房Geodatabase:

 图片 40

 此时创设的地理数据库myPGdb.mdb是贰个空的,要求向里面创制或添加要素及其余内容。一般选拔导入,能够用要素类、表、栅格数据集丰盛数据库:

 图片 41

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

 图片 42

 

④ 、地理数据库事务管理

在不少景况下,用户可使用数据库管理系列(DBMS)的事务框架来管理地理数据库的编撰和更新。GIS用户会遇见重重长工作工作流极其关键的情状。在大部分情景下,通过利用多用户DBMS和ArcSDE并选取版本化方法来治本对GIS数据库的更新,能够应对那个情形。

使用基于版本的政工模型的GIS数据编写翻译工作流能够成功:

  • 八个编辑会话 –
    单个GIS数据库更新大概须求开始展览持续数天或数周的关系三个编辑会话的汪洋改成。
  • 多用户编辑 –
    多个编辑职员时时索要同时更新相同的半空中组成要素。每位用户都亟待利用各自的数据库状态,从而查看种种更新,而忽略任何编写制定人士所做的革新。最终,每位用户必要交给更新并与任何编写制定人士展开和谐,以识别并化解全数争持。
  • 检出/检入事务 –
    在广大意况下都亟待将数据库中与某一定区域或地方对应的那有些数额检出到个人计算机中,然后在大概无休止数天或数周的离线会话中立异此信息,甚至带到实地进展移动编辑和更新。那个立异必须交给到主数据库中。
  • 正史 –
    有时,在GIS数据库中保存每一个要素的野史版本(即使在此特定版本更新后)、在存档中保存已不复采纳且发出转移的成分的副本或跟踪各种要素的野史是足够实用的,例如,国家地图数据库中的宗地谱系或因素更新属性。
  • 传输只改变更新 –
    公司数据库和空间数据基础设备(当中的音讯在逐一组织之间共享)的保证要求联合合作,那种搭档需求采纳定义完善的可扩充标记语言(XML)架构并经过Internet来共享革新,从而在数据库之间共享只改变更新。
  • 分布式地理数据库复本 –
    区域数据库能够是总店GIS数据库中与某一定地理区域对应的那有个别多少的副本。那四个数据库必须经过置换更新的点子定期开始展览同步。
  • DBMS之间的松懈耦合复制 –
    常常,GIS数据必须在一多级数据库副本(复本)之间维持同步,每种站点将在其当地数据库上执行各自的立异。经常,这么些数据库只是为期通过Web进行连接。更新必须定期从各样数据库复本传输到其余数据库,同时本人的始末也会获得更新。在无数状态下,DBMS是区别的-例如,在Microsoft
    SQL Server、Oracle和IBMDB2之间复制数据集。

依照版本的地理数据库事务模型绝对而言非凡简约,即把创新记录在变更表中。版本会显式地将地理数据库的对象情状记录在添加表和删除表那多少个增量表中。

三 、Geodatabase的仓储是什么样依照关系原则的?

DBMS管理Geodatabase有何差别吧?

因此看来,Geodatabase的贮存模型是以DBMS原则为根基,利用了一多元不难却基本的关周全据库概念。DBMS(File
Geodatabase的文件系统)提供了简易而又恰到好处的数据模型存款和储蓄和操作表。包涵以下的重点概念:

  • 数据被集团为表
  • 表包括行,表中具有的行具有相同的列
  • 每一列具有一个种类,如integer, decimal number, character, date等等。
  • 提到类用于1个表中的行和另二个表中的行爆发关联,那是以每一个表中都有3个公家的列为基础的。
  • 论及完整性规则存在于全部表中。如,每一行总是有雷同的列,贰个域为每一列钦命了有效值或然值范围等等。

对ArcSDE Geodatabases来说,还有多量别样的DBMS功效能够采纳:

  • SQL,一密密麻麻关系函数和操作符能够用来操作表和表中的因素。
  • SQL操作符同时被规划为能够处理平时的关周全据类型,如integers。

比如说,3个要素类以DBMS表的样式储存。每一行代表2个因素,每一行中列描述了该因素的各类风味或品质,表中的某一列存款和储蓄了该因素的几何样子(如point,
line或polygon
coordinates)。要是shape字段存款和储蓄了polygon形状,在DBMS中山大学量的列类型用于shape字段,能够是出类拔萃的binary
large object
(BLOB)类型或许是扩大的空间类型,它们能够被部分DBMS所匡助。如,ESLANDI提供了二个空间列类型用于在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)的预订义列表

 

② 、ArcSDE是基于多层体系布局的施用和储存

数据的贮存和领取由存款和储蓄层DBMS达成,而高端的数码整合和数码处理效果则由运用层ArcGIS提供。

ArcSDE用于高效的储存、索引、访问和保障DBMS中的矢量、栅格、元数据及其他空间数据。

ArcSDE使用DBMS帮衬的数据类型,以表格的款式管理底层存款和储蓄的空间数据,并可选择SQL在DBMS中做客那几个数量。ArcSDE同时也提供了开放的客户端支出接口(C
API和JAVA API),通过那个接口,用户定制的应用程序也足以完全访问底层的长空数据表。

 

2、Geodatabase对象模型

(1)Geodatabase中的重要类

Geodatabase中的主要类分为工作区部分数据集部分,工作区部分重点担负对Geodatabase中的各样数据源进行宏观管理,而数据集部分首要用以对数据库中各个切实的数额拓展描述和管制。

 

WorkspaceFactory类

此类可被创设。用于生成Workspace,连接属性一般选取PropertySet对象定义,并提供浏览、管理基于文件系统的Workspace方法。该类实现IWorkspaceFactory和IWorkspaceFactory2多少个接口,派生种种一定数据库工作空间类。

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

 

Workspace类

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

1个Workspace能够被视作是文件系统中的目录,也足以被当做一个关周全据库。

 

FeatureDataset组件类

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

 

(2)Geodatabase中的别的常用类

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

与空间数据入库相关的类落成了各类数码格式的转移,如FeatureDataConverter、FieldChecker、EnumFieldError等。

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