ArcGIS Engine中的8種數據訪問 (轉)

數據是GIS的基礎, 訪問數據也是進行任何複雜的空間分析及空間可視化表達的前提。ArcGIS支持的數據格式比較豐富,對不一樣的數據格式支持的程度也有很大差別。本文主要介紹一下如下八種數據格式在ArcGIS Engine中如何訪問。對ArcGIS桌面應用有必定了解的讀者更適合閱讀本文。本文的示例代碼是用C#編寫。html

1.Shapefile數據庫

2.Coveragewindows

3.Personal Geodatabase設計模式

4.Enterprise Geodatabase服務器

5.Tinide

6.Rasterui

7.CADgoogle

8.RDBMSspa

在經過ArcGIS訪問數據以前,須要首先明確一下什麼是"工做空間"。在ArcGIS中工做空間指存放數據的位置,ArcGIS訪問數據的機制是先打開數據對應的工做空間,而後用工做空間訪問數據。對於不一樣的數據格式,工做空間的具體狀況也是不同的,下面分別進行闡述。.net

1.Shapefile

Shapefile是文件型的空間數據格式,以文件的形式在磁盤上進行存儲空間數據和屬性數據。下面的示例代碼是打開位於D:\Data文件夾下的文件名爲Cities的Shapefile要素類。對於Shapefile來講工做空間就是它所在的文件夾,打開工做空間須要使用對應的工做空間工廠,即ShapefileWorkspaceFactoryClass,而後再調用IWorkspaceFactory的OpenFromFile方法就能夠獲得一個工做空間了,這也是設計模式中工廠方法的體現。工做空間工廠的打開方法返回的是通常意義的工做空間,根據具體數據還須要進行接口轉換,由於Shapefile是矢量數據,因此把工做空間接口跳轉到IFeatureWorkspace,從而讀取其中的要素類,這一點對於接下來的幾個數據格式也是一樣的打開方式。

IWorkspaceFactory pWorkspaceFactory;

pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();

IFeatureWorkspace pFeatWS;

pFeatWS = pWorkspaceFactory.OpenFromFile(@"D:\Data\", 0) as IFeatureWorkspace;

//打開一個要素類

IFeatureClass pFeatureClass = pFeatWS.OpenFeatureClass("Cities");

2.Coverage

Coverage是ArcInfo workstation的原生數據格式。該格式是基於文件夾存儲的,是由於在windows資源管理器下,它的空間信息和屬性信息是分別存放在兩個文件夾裏。coverage是一個很是成功的早期地理數據模型,二十多年來深受用戶歡迎,不少早期的數據都是coverage格式的。ESRI不公開coverage的數據格式,可是提供了coverage格式轉換的一個交換文件(interchange file,即E00),並公開數據格式。可是ESRI爲推廣其第三代數據模型geodatabase,從ArcGIS 8.3版本開始,屏蔽了對coverage的編輯功能。若是須要使用coverage格式的數據,能夠安裝ArcInfo workstation,或者將coverage數據轉換爲其餘可編輯的數據格式。Coverage是一個集合,它能夠包含一個或多個要素類。 Coverage數據的工做空間也是它所在的文件夾;因爲Coverage能夠包含多個要素類,獲得工做空間後在打開具體的要素類時能夠用"Coverage名稱:要素類名稱",例以下面代碼中的"basin:polygon"。

IWorkspaceFactory pFactory = new ArcInfoWorkspaceFactoryClass();IWorkspace pWorkspace = pFactory.OpenFromFile(@"D:\ArcTutor\TopologyData", 0);

IFeatureWorkspace pFeatWorkspace = pWorkspace as IFeatureWorkspace;IFeatureClass pFeatureClass = pFeatWorkspace.OpenFeatureClass("basin:polygon");

3.Personal Geodatabase

Geodatabase做爲ArcGIS的原生數據格式,體現了不少第三代地理數據模型的優點。Personal Geodatabase基於Microsoft Access一體化存儲空間數據和屬性數據。Enterprise Geodatabase經過大型關係數據庫+ArcSDE實現,ArcSDE做爲中間件把關係數據庫中的普通錶轉化爲空間對象。Personal Geodatabase數據的工做空間指的是擴展名爲mdb的文件。如下是打開位於Monto.mdb中的Water要素類的代碼。

IWorkspaceFactory pFactory = new AccessWorkspaceFactoryClass();

IWorkspace pWorkspace = pFactory.OpenFromFile(@"D:\ArcTutor\Monto.mdb", 0);

IFeatureWorkspace pFeatWorkspace = pWorkspace as IFeatureWorkspace;

IFeatureClass pFeatureClass =pFeatWorkspace.OpenFeatureClass("Water")

4.Enterprise Geodatabase

ArcSDE(Enterprise Geodatabase)對應的工做空間爲數據庫鏈接,關係數據庫是Oracle時鏈接參數須要五個,分別是SERVER、INSTANCE、USER、PASSWORD、VERSION。SERVER指服務器的主機名,INSTANCE指服務名或端口號,USER是數據庫的用戶名,PASSWORD數據庫對應用戶的密碼,VERSION指Enterprise Geodatabase多版本機制中的某個版本,默認的一個版本是"SDE.DEFAULT",若是關係數據庫是SQL Server,那麼鏈接參數還須要Database參數。下面是打開Enterprise Geodatabase中ControlPoint點要素類的代碼,關係數據庫爲Oracle9i。

IWorkspaceFactory pWorkspaceFactory = 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");

IWorkspace pWorkspace = pWorkspaceFactory.Open(propSet, 0);

IFeatureWorkspace pFeatWS = pWorkspace as IFeatureWorkspace;

IFeatureClass pFeatureClass= pFeatWS.OpenFeatureClass("ControlPoint");

5.TIN

TIN全稱不規則三角網,也叫不規則三角表面,採用一系列不規則的三角點來創建表面。例如,每個採樣點有一對x,y座標和一個表面值(z值),這些點被一組互不重疊的三角形的邊所鏈接,從而構成一個表面。TIN數據是空間分析和三維分析重要的數據格式,以文件的形式在磁盤上存儲。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");

6.Raster

柵格數據也是GIS數據中很重要的一部分,ArcGIS中最經常使用的文件型有GRID、TIFF、ERDAS IMAGE等,這幾種柵格數據的工做空間也是所在的文件夾。打開柵格數據時須要使用柵格工做空間工廠(RasterWorkspaceFactory),而後再使用IRasterWorkspace接口的打開柵格數據集方法便可打開一個柵格數據集。在打開柵格數據集時,若是數據格式爲是ESRI GRID,那麼OpenRasterDataset()方法的參數爲柵格要素集的名稱,若是數據格式爲TIFF格式,那麼該方法的參數爲完整的文件名,即要加上.tif擴展名,例如OpenRasterDataset("hillshade.tif")。下面代碼爲打開GRID格式的柵格數據。

IWorkspaceFactory rasterWorkspaceFactory = new RasterWorkspaceFactoryClass();IRasterWorkspace rasterWorkspace = rasterWorkspaceFactory.OpenFromFile(@"D:\data\grid", 0) as IRasterWorkspace;IRasterDataset rasterDataset= rasterWorkspace.OpenRasterDataset("ca_hillshade");

7.CAD

CAD數據也能夠經過AO直接訪問,訪問CAD數據的方式與Coverage相似,可是注意要使用CAD的工做空間工廠,如下是打開一個dxf的CAD數據,在打開要素類時使用"cad文件名:要素類名稱",注意cad文件名要包含擴展名,不然會報錯。如下代碼是打開位於D:\ArcTutor\Editor\ExerciseData\EditingFeatures文件夾下的buildings.dxf中的多邊形要素類。

IWorkspaceFactory pCadwf = new CadWorkspaceFactoryClass();IWorkspace pWS = pCadwf.OpenFromFile(@"D:\ArcTutor\Editor\ExerciseData\EditingFeatures", 0);IFeatureWorkspace pCadFWS = pWS as IFeatureWorkspace;IFeatureClass pFeatClass = pCadFWS.OpenFeatureClass("buildings.dxf:polygon");

8.RDBMS

通常關係表中的數據也能夠經過ArcGIS直接讀取,這爲數據的共享提供了極大的便利,對於一些業務上的非空間數據,經過使用OLE方式能夠很方便的實現數據訪問,業務數據能夠位於各類關係數據庫中,如下代碼是訪問位於Microsoft Access中的Custom表,固然也能夠訪問Oralce或SQL Server中的數據,只要變化如下鏈接字符串(CONNECTSTRING)就能夠了。

//建立一個鏈接IPropertySet pPropset;

pPropset = new PropertySetClass();

pPropset.SetProperty("CONNECTSTRING", @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Company.mdb;Persist Security Info=False");//建立一個新的OleDB工做空間並打開IWorkspaceFactory pWorkspaceFact;IFeatureWorkspace pFeatWorkspace;pWorkspaceFact = newOLEDBWorkspaceFactoryClass();pFeatWorkspace = pWorkspaceFact.Open(pPropset, 0) as IFeatureWorkspace;ITable pTTable = pFeatWorkspace.OpenTable("Custom");

以上爲ArcGIS最經常使用的幾種數據的訪問方法,訪問數據進行GIS分析、數據處理和空間可視化的,在獲取到數據之後能夠把數據加到圖層裏,也能夠對數據進行檢索或維護等工做。

轉帖。來源未知

轉:http://blog.chinaunix.net/uid-18899774-id-120895.html

相關文章
相關標籤/搜索