ArcGIS10.0和Oracle10g的空間資料管理平台(C#開發)-ArcGIS_Engine中的資料訪問

來源:互聯網
上載者:User
因為項目中已經支援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
  1.  IWorkspaceFactory pWorkspaceFactory;  
  2.  pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();  
  3.  IFeatureWorkspace pFeatWS;  
  4.  pFeatWS = pWorkspaceFactory.OpenFromFile(@"D:\Data\", 0) as IFeatureWorkspace;  
  5. //開啟一個要素類  
  6. 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
  1. IWorkspaceFactory pFactory = new ArcInfoWorkspaceFactoryClass();  
  2. IWorkspace pWorkspace = pFactory.OpenFromFile(@"D:\ArcTutor\TopologyData", 0);  
  3. IFeatureWorkspace pFeatWorkspace = pWorkspace as IFeatureWorkspace;  
  4. 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
  1. IWorkspaceFactory pFactory = new AccessWorkspaceFactoryClass();  
  2. IWorkspace pWorkspace = pFactory.OpenFromFile(@"D:\ArcTutor\Monto.mdb", 0);  
  3. IFeatureWorkspace pFeatWorkspace = pWorkspace as IFeatureWorkspace;  
  4. 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
  1. IWorkspaceFactory pWorkspaceFactory = new SdeWorkspaceFactoryClass();  
  2. IPropertySet propSet = new PropertySetClass();propSet.SetProperty("SERVER", "actc");  
  3. propSet.SetProperty("INSTANCE", "5151");propSet.SetProperty("USER", "apdm");  
  4. propSet.SetProperty("PASSWORD", "apdm");propSet.SetProperty("VERSION", "SDE.DEFAULT");  
  5. IWorkspace pWorkspace = pWorkspaceFactory.Open(propSet, 0);  
  6. IFeatureWorkspace pFeatWS = pWorkspace as IFeatureWorkspace;  
  7. IFeatureClass pFeatureClass= pFeatWS.OpenFeatureClass("ControlPoint");  
5.TIN


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

view plain
  1. IWorkspaceFactory pWSFact = new TinWorkspaceFactoryClass();  
  2. IWorkspace pWS = pWSFact.OpenFromFile(@"D:\ArcTutor\3DAnalyst\", 0);  
  3. 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
  1. IWorkspaceFactory rasterWorkspaceFactory = new RasterWorkspaceFactoryClass();  
  2. IRasterWorkspace rasterWorkspace = rasterWorkspaceFactory.OpenFromFile(@"D:\data\grid", 0) as  
  3. IRasterWorkspace;  
  4. 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
  1. IWorkspaceFactory pCadwf = new CadWorkspaceFactoryClass();  
  2. IWorkspace pWS = pCadwf.OpenFromFile(@"D:\ArcTutor\Editor\ExerciseData\EditingFeatures", 0);  
  3. IFeatureWorkspace pCadFWS = pWS as IFeatureWorkspace;  
  4. IFeatureClass pFeatClass = pCadFWS.OpenFeatureClass("buildings.dxf:polygon");  


 

8.RDBMS


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


 

view plain
  1. //建立一個串連  
  2. IPropertySet pPropset;pPropset = new PropertySetClass();  
  3. pPropset.SetProperty("CONNECTSTRING", @"Provider=Microsoft.Jet.OLEDB.4.0;Data  
  4. Source=E:\Company.mdb;Persist Security Info=False");  
  5. //建立一個新的OleDB工作空間並開啟  
  6. IWorkspaceFactory pWorkspaceFact;  
  7. IFeatureWorkspace pFeatWorkspace;  
  8. pWorkspaceFact = new OLEDBWorkspaceFactoryClass();  
  9. pFeatWorkspace = pWorkspaceFact.Open(pPropset, 0) as IFeatureWorkspace;  
  10. ITable pTTable = pFeatWorkspace.OpenTable("Custom");  
總結

     以上為ArcGIS最常用的幾種資料的存取方法,訪問資料進行GIS分析、資料處理和空間可視化的,在擷取到資料以後可以把資料加到圖層裡,也可以對資料進行檢索或維護等工作。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.