ArcEngine中打開各種數據源(WorkSpace)的連接(轉)


ArcEngine中打開各種數據源(WorkSpace)的連接

(SDE、personal/File、ShapeFile、CAD數據、影像圖、影像數據集)

ArcEngine 可以接受多種數據源。在開發過程中我們使用了如下幾種數據源

1.企業數據庫(SDE

   企業數據庫需要使用SDE來管理,所以需要使用SDE的Workspace來表示連接。在AE接口中,Workspace是由Factory打開的。代碼如下: // //准備連接參數

ESRI.ArcGIS.esriSystem.IPropertySet pPropSet=new PropertySetClass();

pPropSet.SetProperty("server","服務器機器名" );

pPropSet.SetProperty("instance","SDE運行的端口號");

pPropSet.SetProperty("user","用戶名");

pPropSet.SetProperty("password","口令" );

pPropSet.SetProperty("version","版本");

SdeWorkspaceFactory sdeWkspFact=new SdeWorkspaceFactoryClass();

IFeatureWorkspace pFeaWksp=(IFeatureWorkspace)sdeWkspFact.Open(pPropSet,0);

其中唯一需要解釋的可能就是版本(version).對於沒有使用版本或者第一次連接(沒有建立空間數據庫,當然沒有版本了). 該處使用sde.DEFAULT這個版本。這是默認的版本。

iPropertySet:: setProperty

public void setProperty(string name,object value)

2.個人數據庫(PersonalGeodatabaseFileGeodatabase)

ArcEngine中個人數據庫為Access。

string filePath="E:\\tt.mdb";

AccessWorkspaceFactory fac=new AccessWorkspaceFactoryClass();

IFeatureWorkspace space=(IFeatureWorkspace)fac.OpenFromFile(filePath,0); 這是用的最多的一種方式.

如果是FileGeodatabasse,則將

FileGDBWorkspaceFactory pWSF = New FileGDBWorkspaceFactory;

IFeatureWorkspace pWS1= pWSF.OpenFromFile(sPath, 0);

 

如果用IPropertySet。如下:

//Personal Geodatabase e.g., database = "C:\\myData\\mypGDB.mdb"

public IWorkspace open_pGDB_Workspace(string database)

{

IPropertySet propertySet = new PropertySetClass();

propertySet.SetProperty("DATABASE", database);

IWorkspaceFactory workspaceFactory = new AccessWorkspaceFactoryClass();

return workspaceFactory.Open(propertySet, 0);

}

3.Shapefile文件

   Shapefile和Access的打開方式有一點相同。也有差異。

//這是Shape所在的目錄(注意:是目錄)

string spacePath="E:\\shapefile";

IShapefileWorkspaceFactory fac=new ShapefileWorkspaceFactoryClass(); IFeatureWorkspace space=(IFeatureWorkspace)fac.OpenFromFile(spacePath,0);

IFeatureClass fc=space.openFeatureClass(“china”);

4.AutoCAD dwg文件

   AutoCAD文件和一般的ESRI格式不同。所以代碼會有一點點奇怪。假設有一個dwg文件為E:\\cad\\107.dwg 下面是打開的代碼:

CadWorkspaceFactoryClass fac=new CadWorkspaceFactoryClass ();

String filePath="E:\\cad";

IFeatureWorkspace space=fac.OpenFromFile(filePath,0) as IFeatureWorkspace ;

下面是打開FeatureClass的代碼:

//線

IFeatureClass polyline =space.OpenFeatureClass("107.dwg:Polyline");

IFeatureLayer layer=new CadFeatureLayerClass ();

layer.FeatureClass =polyline;

//點

IFeatureClass point=space.OpenFeatureClass ("107.dwg:Point");

layer=new CadFeatureLayerClass ();

layer.FeatureClass =point;

//面

IFeatureClass polygon=space.OpenFeatureClass ("107.dwg:Polygon");

layer=new CadFeatureLayerClass();

layer.FeatureClass =polygon;

//注記

IFeatureClass anno=space.OpenFeatureClass ("107.dwg:Annotation"); layer=new CadAnnotationLayerClass();

layer.FeatureClass =anno;

5.影像圖文件

//文件路徑

string filePath="E:\\image\\117.tif";

IRasterLayer rasterLayer=new RasterLayerClass();

rasterLayer.CreateFromFilePath(filePath );

6.數據庫中的影像數據集。

   //數據庫連接

IWorkspace space=OpenSpace();

//打開數據庫的方式

IRasterWorkspaceEx rasterSpace=(IRasterWorkspaceEx)space;

IRasterDataset rasterDataset=rasterSpace.OpenRasterDataset (setName.Name );

IRasterLayer rasLayer=new RasterLayerClass();

rasLayer.CreateFromDataset(rasterDataset);

IRasterWorkspaceEx:提供創建和打開柵格目錄或柵格數據集的方法。

但是IRasterWorkspaceEx,IRasterWorkspace, IRasterWorkspace2都有OpenRasterDataset。IRasterWorkspace經常也可用於打開柵格數據,如: pWorkspaceFactory = new RasterWorkspaceFactoryClass();

            pRasterWorkspace = (IRasterWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0);

           IRasterDataset pRasterDataset = (IRasterDataset)pRasterWorkspace.OpenRasterDataset(fileName);

           IRasterLayer pRasterLayer = new RasterLayerClass();

            pRasterLayer.CreateFromDataset(pRasterDataset);


免責聲明!

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



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