ArcGIS Engine中的數據訪問

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

  1. Shapefile
  2. Coverage
  3. Personal Geodatabase
  4. Enterprise Geodatabase
  5. Tin
  6. Raster
  7. CAD
  8. RDBMS

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

Shapefile

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

 IWorkspaceFactory pWorkspaceFactory;pWorkspaceFactory = newShapefileWorkspaceFactoryClass();IFeatureWorkspace pFeatWS;pFeatWS = pWorkspaceFactory.OpenFromFile(@"D:\Data\", 0) as IFeatureWorkspace;//打開一個要素類IFeatureClass pFeatureClass = pFeatWS.OpenFeatureClass("Cities");

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 = newArcInfoWorkspaceFactoryClass();IWorkspace pWorkspace = pFactory.OpenFromFile(@"D:\ArcTutor\TopologyData", 0);IFeatureWorkspace pFeatWorkspace = pWorkspace as IFeatureWorkspace;IFeatureClass pFeatureClass = pFeatWorkspace.OpenFeatureClass("basin:polygon");

Personal Geodatabase

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

 IWorkspaceFactory pFactory = newAccessWorkspaceFactoryClass();IWorkspace pWorkspace = pFactory.OpenFromFile(@"D:\ArcTutor\Monto.mdb", 0);IFeatureWorkspace pFeatWorkspace = pWorkspace as IFeatureWorkspace;IFeatureClass pFeatureClass = pFeatWorkspace.OpenFeatureClass("Water")

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 = newSdeWorkspaceFactoryClass();IPropertySet propSet = newPropertySetClass();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");

TIN

TIN全稱不規則三角網,也叫不規則三角表面,採用一系列不規則的三角點來建立表面。例如,每一個採樣點有一對x,y座標和一個表面值(z值),這些點被一組互不重疊的三角形的邊所連接,從而構成一個表面。TIN數據是空間分析和三維分析重要的數據格式,以文件的形式在磁盤上存儲。TIN的工作空間是所在的文件夾,下面代碼是打開D:\ArcTutor\3DAnalyst文件夾下名稱爲mal的TIN。

 IWorkspaceFactory pWSFact = newTinWorkspaceFactoryClass();IWorkspace pWS = pWSFact.OpenFromFile(@"D:\ArcTutor\3DAnalyst\", 0);ITinWorkspace pTinWS = pWS as ITinWorkspace;ITin pTin = pTinWS.OpenTin("mal");

Raster

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

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

CAD

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

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

RDBMS

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

 //創建一個連接IPropertySet pPropset;pPropset = newPropertySetClass();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分析、數據處理和空間可視化的,在獲取到數據以後可以把數據加到圖層裏,也可以對數據進行檢索或維護等工作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章