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.個人數據庫(PersonalGeodatabase、FileGeodatabase)
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);