《arcgis打開常用數(shù)據(jù)的源碼》由會(huì)員分享,可在線閱讀,更多相關(guān)《arcgis打開常用數(shù)據(jù)的源碼(7頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、數(shù)據(jù)是GIS的血液,訪問數(shù)據(jù)也是進(jìn)行任何復(fù)雜的空間分析及空間可視化表達(dá)的前提。ArcGIS支持的數(shù)據(jù)格式比較豐富,對(duì)不同的數(shù)據(jù)格式支持的程度也有很大差異。本文主要以C#作為示例代碼介紹工作中常用的八種數(shù)據(jù)格式(Shape,Personal Geodatabase,Enterprise Geodatabase,Tin,Raster,CAD,RDBMS)在ArcGIS Engine中的訪問方法。
在通過ArcGIS訪問數(shù)據(jù)之前,需要首先明確一下什么是"工作空間"。在ArcGIS中工作空間指存放數(shù)據(jù)的位置,ArcGIS訪問數(shù)據(jù)的機(jī)制是先打開數(shù)據(jù)對(duì)應(yīng)的工作空間,然后用工作空間訪問數(shù)據(jù)。對(duì)于不同的數(shù)據(jù)
2、格式,工作空間的具體情況也是不一樣的,下面分別進(jìn)行闡述。
Shapefile
Shapefile是文件型的空間數(shù)據(jù)格式,以文件的形式在磁盤上進(jìn)行存儲(chǔ)空間數(shù)據(jù)和屬性數(shù)據(jù)。下面的示例代碼是打開位于D:/Data文件夾下的文件名為Cities的Shapefile要素類。對(duì)于Shapefile來說工作空間就是它所在的文件夾,打開工作空間需要使用對(duì)應(yīng)的工作空間工廠,即Shape,然后再調(diào)用IWorkspaceFactory的OpenFromFile方法就可以得到一個(gè)工作空間了,這也是設(shè)計(jì)模式中工廠方法的體現(xiàn)。工作空間工廠的打開方法返回的是一般意義的工作空間,根據(jù)具體數(shù)據(jù)還需要進(jìn)行接口轉(zhuǎn)換,因
3、為Shapefile是矢量數(shù)據(jù),所以把工作空間接口跳轉(zhuǎn)到IFeatureWorkspace,從而讀取其中的要素類,這一點(diǎn)對(duì)于接下來的幾個(gè)數(shù)據(jù)格式也是同樣的打開方式。
IWorkspaceFactory pWorkspaceFactory;
pWorkspaceFactory = new Shape();
IFeatureWorkspace pFeatWS;
pFeatWS = pWorkspaceFactory.OpenFromFile(@"D:/Data/", 0) as IFeatureWorkspace;
//打開一個(gè)要素類
IFeatureClass pFeatureCla
4、ss = pFeatWS.OpenFeatureClass("Cities");
Coverage
Coverage是ArcInfo workstation的原生數(shù)據(jù)格式。該格式是基于文件夾存儲(chǔ)的,是因?yàn)樵趙indows資源管理器下,它的空間信息和屬性信息是分別存放在兩個(gè)文件夾里。coverage是一個(gè)非常成功的早期地理數(shù)據(jù)模型,二十多年來深受用戶歡迎,很多早期的數(shù)據(jù)都是coverage格式的。ESRI不公開coverage的數(shù)據(jù)格式,但是提供了coverage格式轉(zhuǎn)換的一個(gè)交換文件(interchange file,即E00),并公開數(shù)據(jù)格式。但是ESRI為推廣其第三代數(shù)據(jù)模型g
5、eodatabase,從ArcGIS 8.3版本開始,屏蔽了對(duì)coverage的編輯功能。如果需要使用coverage格式的數(shù)據(jù),可以安裝ArcInfo workstation,或者將coverage數(shù)據(jù)轉(zhuǎn)換為其他可編輯的數(shù)據(jù)格式。Coverage是一個(gè)集合,它可以包含一個(gè)或多個(gè)要素類。Coverage數(shù)據(jù)的工作空間也是它所在的文件夾;由于Coverage可以包含多個(gè)要素類,得到工作空間后在打開具體的要素類時(shí)可以用"Coverage名稱:要素類名稱",例如下面代碼中的"basin:polygon"。
IWorkspaceFactory pFactory = new ArcInfoWorksp
6、aceFactoryClass();
IWorkspace pWorkspace = pFactory.OpenFromFile(@"D:/ArcTutor/TopologyData", 0);
IFeatureWorkspace pFeatWorkspace = pWorkspace as IFeatureWorkspace;
IFeatureClass pFeatureClass = pFeatWorkspace.OpenFeatureClass("basin:polygon");
Personal Geodatabase
Geodatabase作為ArcGIS的原生數(shù)據(jù)
7、格式,體現(xiàn)了很多第三代地理數(shù)據(jù)模型的優(yōu)勢(shì)。Personal Geodatabase基于Microsoft Access一體化存儲(chǔ)空間數(shù)據(jù)和屬性數(shù)據(jù)。Enterprise Geodatabase通過大型關(guān)系數(shù)據(jù)庫+ArcSDE實(shí)現(xiàn),ArcSDE作為中間件把關(guān)系數(shù)據(jù)庫中的普通表轉(zhuǎn)化為空間對(duì)象。Personal Geodatabase數(shù)據(jù)的工作空間指的是擴(kuò)展名為mdb的文件。以下是打開位于Monto.mdb中的Water要素類的代碼。
IWorkspaceFactory pFactory = new AccessWorkspaceFactoryClass();
IWorkspace pWorks
8、pace = pFactory.OpenFromFile(@"D:/ArcTutor/Monto.mdb", 0);
IFeatureWorkspace pFeatWorkspace = pWorkspace as IFeatureWorkspace;
IFeatureClass pFeatureClass = pFeatWorkspace.OpenFeatureClass("Water")
EnterpriseGeodatabase
ArcSDE(Enterprise Geodatabase)對(duì)應(yīng)的工作空間為數(shù)據(jù)庫連接,關(guān)系數(shù)據(jù)庫是Oracle時(shí)連接參數(shù)需要五個(gè),分別是SER
9、VER、INSTANCE、USER、PASSWORD、VERSION。SERVER指服務(wù)器的主機(jī)名,INSTANCE指服務(wù)名或端口號(hào),USER是數(shù)據(jù)庫的用戶名,PASSWORD數(shù)據(jù)庫對(duì)應(yīng)用戶的密碼,VERSION指Enterprise Geodatabase多版本機(jī)制中的某個(gè)版本,默認(rèn)的一個(gè)版本是"SDE.DEFAULT",如果關(guān)系數(shù)據(jù)庫是SQL Server,那么連接參數(shù)還需要Database參數(shù)。下面是打開Enterprise Geodatabase中ControlPoint點(diǎn)要素類的代碼,關(guān)系數(shù)據(jù)庫為Oracle9i。
IWorkspaceFactory pWorkspaceFacto
10、ry = new SdeWorkspaceFactoryClass();
IPropertySet propSet = new PropertySetClass();
propSet.SetProperty("SERVER", "actc");propSet.SetProperty("INSTANCE", "5151");
propSet.SetProperty("USER", "apdm");
propSet.SetProperty("PASSWORD", "apdm");
propSet.SetProperty("VERSION", "SDE.DEFAULT");
IWorks
11、pace pWorkspace = pWorkspaceFactory.Open(propSet, 0);
IFeatureWorkspace pFeatWS = pWorkspace as IFeatureWorkspace;
IFeatureClass pFeatureClass= pFeatWS.OpenFeatureClass("ControlPoint");
TIN
TIN全稱不規(guī)則三角網(wǎng),也叫不規(guī)則三角表面,采用一系列不規(guī)則的三角點(diǎn)來建立表面。例如,每一個(gè)采樣點(diǎn)有一對(duì)x,y坐標(biāo)和一個(gè)表面值(z值),這些點(diǎn)被一組互不重疊的三角形的邊所連接,從而構(gòu)成一個(gè)表面。TIN數(shù)據(jù)是空
12、間分析和三維分析重要的數(shù)據(jù)格式,以文件的形式在磁盤上存儲(chǔ)。TIN的工作空間是所在的文件夾,下面代碼是打開D:/ArcTutor/3DAnalyst文件夾下名稱為mal的TIN。
IWorkspaceFactory pWSFact = new TinWorkspaceFactoryClass();
IWorkspace pWS = pWSFact.OpenFromFile(@"D:/ArcTutor/3DAnalyst/", 0);
ITinWorkspace pTinWS = pWS as ITinWorkspace;
ITin pTin = pTinWS.OpenTin("mal")
13、;
Raster
柵格數(shù)據(jù)也是GIS數(shù)據(jù)中很重要的一部分,ArcGIS中最常用的文件型有GRID、TIFF、ERDAS IMAGE等,這幾種柵格數(shù)據(jù)的工作空間也是所在的文件夾。打開柵格數(shù)據(jù)時(shí)需要使用柵格工作空間工廠(RasterWorkspaceFactory),然后再使用IRasterWorkspace接口的打開柵格數(shù)據(jù)集方法即可打開一個(gè)柵格數(shù)據(jù)集。在打開柵格數(shù)據(jù)集時(shí),如果數(shù)據(jù)格式為是ESRI GRID,那么OpenRasterDataset()方法的參數(shù)為柵格要素集的名稱,如果數(shù)據(jù)格式為TIFF格式,那么該方法的參數(shù)為完整的文件名,即要加上.tif擴(kuò)展名,例如OpenRaste
14、rDataset("hillshade.tif")。下面代碼為打開GRID格式的柵格數(shù)據(jù)。
IWorkspaceFactory rasterWorkspaceFactory = new RasterWorkspaceFactoryClass();
IRasterWorkspace rasterWorkspace = rasterWorkspaceFactory.OpenFromFile(@"D:/data/grid", 0) as IRasterWorkspace;
IRasterDataset rasterDataset= rasterWorkspace.OpenRasterDatas
15、et("ca_hillshade")
CAD
CAD數(shù)據(jù)也可以通過AO直接訪問,訪問CAD數(shù)據(jù)的方式與Coverage類似,但是注意要使用CAD的工作空間工廠,以下是打開一個(gè)dxf的CAD數(shù)據(jù),在打開要素類時(shí)使用"cad文件名:要素類名稱",注意cad文件名要包含擴(kuò)展名,否則會(huì)報(bào)錯(cuò)。以下代碼是打開位于D:/ArcTutor /Editor/ExerciseData/EditingFeatures文件夾下的buildings.dxf中的多邊形要素類。
IWorkspaceFactory pCadwf = new CadWorkspaceFactoryClass();
IWorks
16、pace pWS = pCadwf.OpenFromFile(@"D:/ArcTutor/Editor/ExerciseData/EditingFeatures", 0);
IFeatureWorkspace pCadFWS = pWS as IFeatureWorkspace;
IFeatureClass pFeatClass = pCadFWS.OpenFeatureClass("buildings.dxf:polygon");
RDBMS
一般關(guān)系表中的數(shù)據(jù)也可以通過ArcGIS直接讀取,這為數(shù)據(jù)的共享提供了極大的便利,對(duì)于一些業(yè)務(wù)上的非空間數(shù)據(jù),通過使用OLE方式可以很方便
17、的實(shí)現(xiàn)數(shù)據(jù)訪問,業(yè)務(wù)數(shù)據(jù)可以位于各種關(guān)系數(shù)據(jù)庫中,以下代碼是訪問位于Microsoft Access中的Custom表,當(dāng)然也可以訪問Oralce或SQL Server中的數(shù)據(jù),只要變化以下連接字符串(CONNECTSTRING)就可以了。
//創(chuàng)建一個(gè)連接
IPropertySet pPropset;pPropset = new PropertySetClass();
pPropset.SetProperty("CONNECTSTRING",@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:/Company.mdbl/ersist Sec
18、urity Info=False");
//創(chuàng)建一個(gè)新的OleDB工作空間并打開
IWorkspaceFactory pWorkspaceFact;
IFeatureWorkspace pFeatWorkspace;
pWorkspaceFact = new OLEDBWorkspaceFactoryClass();
pFeatWorkspace = pWorkspaceFact.Open(pPropset, 0) as IFeatureWorkspace;
ITable pTTable = pFeatWorkspace.OpenTable("Custom");
以上為幾種ArcGIS中常用的數(shù)據(jù)格式訪問方法,用以訪問數(shù)據(jù)進(jìn)行GIS分析、數(shù)據(jù)處理和空間可視化,在獲取到數(shù)據(jù)以后可以把數(shù)據(jù)添加到圖層中,也可以對(duì)數(shù)據(jù)進(jìn)行檢索或維護(hù)等工作。
7 / 7文檔可自由編輯打印