《arcgis打開常用數(shù)據(jù)的源碼》由會員分享,可在線閱讀,更多相關(guān)《arcgis打開常用數(shù)據(jù)的源碼(7頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、數(shù)據(jù)是GIS的血液,訪問數(shù)據(jù)也是進行任何復(fù)雜的空間分析及空間可視化表達的前提。ArcGIS支持的數(shù)據(jù)格式比較豐富,對不同的數(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ù)的機制是先打開數(shù)據(jù)對應(yīng)的工作空間,然后用工作空間訪問數(shù)據(jù)。對于不同的數(shù)據(jù)
2、格式,工作空間的具體情況也是不一樣的,下面分別進行闡述。
Shapefile
Shapefile是文件型的空間數(shù)據(jù)格式,以文件的形式在磁盤上進行存儲空間數(shù)據(jù)和屬性數(shù)據(jù)。下面的示例代碼是打開位于D:/Data文件夾下的文件名為Cities的Shapefile要素類。對于Shapefile來說工作空間就是它所在的文件夾,打開工作空間需要使用對應(yīng)的工作空間工廠,即Shape,然后再調(diào)用IWorkspaceFactory的OpenFromFile方法就可以得到一個工作空間了,這也是設(shè)計模式中工廠方法的體現(xiàn)。工作空間工廠的打開方法返回的是一般意義的工作空間,根據(jù)具體數(shù)據(jù)還需要進行接口轉(zhuǎn)換,因
3、為Shapefile是矢量數(shù)據(jù),所以把工作空間接口跳轉(zhuǎn)到IFeatureWorkspace,從而讀取其中的要素類,這一點對于接下來的幾個數(shù)據(jù)格式也是同樣的打開方式。
IWorkspaceFactory pWorkspaceFactory;
pWorkspaceFactory = new Shape();
IFeatureWorkspace pFeatWS;
pFeatWS = pWorkspaceFactory.OpenFromFile(@"D:/Data/", 0) as IFeatureWorkspace;
//打開一個要素類
IFeatureClass pFeatureCla
4、ss = pFeatWS.OpenFeatureClass("Cities");
Coverage
Coverage是ArcInfo workstation的原生數(shù)據(jù)格式。該格式是基于文件夾存儲的,是因為在windows資源管理器下,它的空間信息和屬性信息是分別存放在兩個文件夾里。coverage是一個非常成功的早期地理數(shù)據(jù)模型,二十多年來深受用戶歡迎,很多早期的數(shù)據(jù)都是coverage格式的。ESRI不公開coverage的數(shù)據(jù)格式,但是提供了coverage格式轉(zhuǎn)換的一個交換文件(interchange file,即E00),并公開數(shù)據(jù)格式。但是ESRI為推廣其第三代數(shù)據(jù)模型g
5、eodatabase,從ArcGIS 8.3版本開始,屏蔽了對coverage的編輯功能。如果需要使用coverage格式的數(shù)據(jù),可以安裝ArcInfo workstation,或者將coverage數(shù)據(jù)轉(zhuǎn)換為其他可編輯的數(shù)據(jù)格式。Coverage是一個集合,它可以包含一個或多個要素類。Coverage數(shù)據(jù)的工作空間也是它所在的文件夾;由于Coverage可以包含多個要素類,得到工作空間后在打開具體的要素類時可以用"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)勢。Personal Geodatabase基于Microsoft Access一體化存儲空間數(shù)據(jù)和屬性數(shù)據(jù)。Enterprise Geodatabase通過大型關(guān)系數(shù)據(jù)庫+ArcSDE實現(xiàn),ArcSDE作為中間件把關(guān)系數(shù)據(jù)庫中的普通表轉(zhuǎn)化為空間對象。Personal Geodatabase數(shù)據(jù)的工作空間指的是擴展名為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)對應(yīng)的工作空間為數(shù)據(jù)庫連接,關(guān)系數(shù)據(jù)庫是Oracle時連接參數(shù)需要五個,分別是SER
9、VER、INSTANCE、USER、PASSWORD、VERSION。SERVER指服務(wù)器的主機名,INSTANCE指服務(wù)名或端口號,USER是數(shù)據(jù)庫的用戶名,PASSWORD數(shù)據(jù)庫對應(yīng)用戶的密碼,VERSION指Enterprise Geodatabase多版本機制中的某個版本,默認的一個版本是"SDE.DEFAULT",如果關(guān)系數(shù)據(jù)庫是SQL Server,那么連接參數(shù)還需要Database參數(shù)。下面是打開Enterprise Geodatabase中ControlPoint點要素類的代碼,關(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ī)則的三角點來建立表面。例如,每一個采樣點有一對x,y坐標(biāo)和一個表面值(z值),這些點被一組互不重疊的三角形的邊所連接,從而構(gòu)成一個表面。TIN數(shù)據(jù)是空
12、間分析和三維分析重要的數(shù)據(jù)格式,以文件的形式在磁盤上存儲。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ù)時需要使用柵格工作空間工廠(RasterWorkspaceFactory),然后再使用IRasterWorkspace接口的打開柵格數(shù)據(jù)集方法即可打開一個柵格數(shù)據(jù)集。在打開柵格數(shù)據(jù)集時,如果數(shù)據(jù)格式為是ESRI GRID,那么OpenRasterDataset()方法的參數(shù)為柵格要素集的名稱,如果數(shù)據(jù)格式為TIFF格式,那么該方法的參數(shù)為完整的文件名,即要加上.tif擴展名,例如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的工作空間工廠,以下是打開一個dxf的CAD數(shù)據(jù),在打開要素類時使用"cad文件名:要素類名稱",注意cad文件名要包含擴展名,否則會報錯。以下代碼是打開位于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ù)的共享提供了極大的便利,對于一些業(yè)務(wù)上的非空間數(shù)據(jù),通過使用OLE方式可以很方便
17、的實現(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)建一個連接
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)建一個新的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ù)進行GIS分析、數(shù)據(jù)處理和空間可視化,在獲取到數(shù)據(jù)以后可以把數(shù)據(jù)添加到圖層中,也可以對數(shù)據(jù)進行檢索或維護等工作。
7 / 7文檔可自由編輯打印