因為項目中已經支援ArcSDE、Shape和RDMBS(基於Oracle10g)之間的相互轉換,後面介紹空間資料管理有這個功能模組,如果你想實現更多中GIS資料格式之間的相互轉換,下面的內容提供很好的一個協助和支援。說明:此部分內容或資料大部分來至網上收集所得,以前放在自己電腦上,具體也不知道出處了!總結出來分享給需要的人,因為正好介紹的項目開發(如 題)用到其中的一些知識。因為項目中已經支援ArcSDE、Shape和RDMBS(基於Oracle10g)之間的相互轉換,後面介紹空間資料管理有這 個功能模組,如果你想實現更多中GIS資料格式之間的相互轉換,下面的內容提供很好的一個協助和支援。
0.介紹
資料是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訪問資料的機制是先開啟 資料對應的工作空間,然後用工作空間訪問資料。對於不同的資料格式,工作空間的具體情況也是不一樣的,下面分別進行闡述。
1.Shapefile
Shapefile是檔案型的空間資料格式,以檔案的形式在磁碟上進行儲存空間資料和屬性資料。下面的範例程式碼是開啟位於D:\Data檔案夾下的檔案名稱 為Cities的Shapefile要素類。對於Shapefile來說工作空間就是它所在的檔案夾, 開啟工作空間需要使用對應的工作空間工廠,即ShapefileWorkspaceFactoryClass,然後再調用 IWorkspaceFactory的OpenFromFile方法就可以得到一個工作空間了,這也是設計模式中Factory 方法的體現。工作空間工廠的開啟方法
返回的是一般意義的工作空間,根據具體資料還需要進行介面轉換,因為Shapefile是向量資料,所以把工作空間介面跳轉到 IFeatureWorkspace,從而讀取其中的要素類,這一點對於接下來的幾個資料格式也是同樣的開啟檔案。
view plain
- 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格式的資料,可以安裝ArcInfoworkstation,或者將 coverage資料轉換為其他可編輯的資料格式。Coverage是一個集合,它可以包含一個或多個要素類。 Coverage資料的工作空間也是它所在的檔案夾;由於Coverage可以包含多個要素類,得到工作空間後在開啟具體的要素類時可以 用"Coverage名稱:要素類名稱",例如下面代碼中的"basin:polygon"。
view plain
- 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要素類的代碼。
view plain
- 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。
view plain
- 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。
view plain
- 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格式的柵格資料。
view plain
- 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中的多邊形要素類。
view plain
- 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)就可以了。
view plain
- //建立一個串連
- 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 = new OLEDBWorkspaceFactoryClass();
- pFeatWorkspace = pWorkspaceFact.Open(pPropset, 0) as IFeatureWorkspace;
- ITable pTTable = pFeatWorkspace.OpenTable("Custom");
總結
以上為ArcGIS最常用的幾種資料的存取方法,訪問資料進行GIS分析、資料處理和空間可視化的,在擷取到資料以後可以把資料加到圖層裡,也可以對資料進行檢索或維護等工作。