ArcEngine讀取數據(數據訪問) (轉)


讀取和訪問數據是進行任何復雜的空間分析及空間可視化表達的前提,ArcGIS支持的數據格式比較豐富,下面就這些格式Shapefile、Coverage、Personal Geodatabase、Enterprise Geodatabase、Tin、Raster
、CAD、RDBMS等類型。


一 Shapefile

Shapefile是ESRI提供的一種無拓撲信息的矢量數據格式,一個 Shape file由一組文件組成,其中必要的基本文件包括坐標文件(主文件)(*.shp )、索引文件(*.shx )和屬性文件(*.dbf )三個文件。主文件每個記錄描述構成一個地理特征(Feature)的所有vertices坐標值;索引文件(.shx)主要包含坐標文件的索引信息;屬性文件包含SHP文件中每一Feature的特征屬性;

 

// 打開工作空間需要使用對應的工作空間工廠,即ShapefielWorkspaceFactoryClass

 

IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass() ;

// 打工作空間工廠的打開方法返回的是一般意義的工作空間,根據具體數據還需要進行接口轉換

IWorkspace pWorkSpace= pWorkspaceFactory.OpenFromFile ( @"D:"Data"" , 0 ) ;

IFeatureWorkspace pFeatWorkSpace = pWorkSpace as IFeatureWorkspace

// 打開一個要素類

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

 

 

 

 

二 Coverage



 

Coverage是ArcInfo workstation的原生數據格式。該格式是基於文件夾存儲的,Coverage文件夾可能存儲lab.adf、arc.adf、sec.adf、pal.adf、cnt.adf、tic.adf、lnk.adf、bnd.adf等坐標文件,arx.adf、pax.adf等索引文件和pat.adf、aat.adf等屬性文件。(.Lab) 表示標識點坐標數據文件 (.Prj) 表示投影信息文件 (.Tol) 表示記錄坐標距離容限和懸掛長度的值的文件 (.Arx) 表示弧段索引文件 (.Cnx) 表示多邊形中心點索引文件 (.Pax)表示標識點索引文件 (.arf)表示弧坐標和拓撲關系表 (.cnt)表示多邊形中心表 (.log)表示工作空間的日志文件(.msk)表示記錄修改過的geometry的信息,重建拓撲時用到。(.pal)表示多邊形圖形文件 (.pat)表示多邊形屬性文件 (.arc)表示弧線圖形文件 (.aat)表示弧線屬性文件 (.bnd)表示邊框文件 (.tic)表示控制點文件。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" ) ;

 

三 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" )

四 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" ) ;

五 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" ) ;

六 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 ) asIRasterWorkspace;

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 = new CadWorkspaceFactoryClass() ;

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 = 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 分析、數據處理和空間可視化的,在獲取到數據以后可以把數據加到圖層里,也可以對數據進行檢索或維護等工作。

鏈接:http://hi.baidu.com/wl05031/blog/item/143efb1fd2d400f9e1fe0bbe.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM