转载:ArcEngine 中打开各种数据源的连接方式汇总
ArcEngine 可以接受多种数据源。在开发过程中我们使用了如下几种数据源
1.企业数据库 2.个人数据库 3.Shapefile 文件 4.AutoCAD dwg 文件 5.影像图文件
6.数据库中的影像数据集。
下面分别列举出打开上述数据源的方式:
1.企业数据库。
企业数据库需要使用 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","版本");
ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactory sdeWkspFact=new
SdeWorkspaceFactoryClass();
IFeatureWorkspace
pFeaWksp=(IFeatureWorkspace)sdeWkspFact.Open(pPropSet,0);
其中唯一需要解释的可能就是版本(version).对于没有使用版本或者第一次连接
(没有建立空间数据库,当然没有版本了).
该处使用 sde.DEFAULT 这个版本。这是默认的版本。
2.个人数据库
ArcEngine 中个人数据库为 Access。
string filePath="E:tt.mdb";
AccessWorkspaceFactory fac=new AccessWorkspaceFactoryClass();
IFeatureWorkspace space=(IFeatureWorkspace)fac.OpenFromFile(filePath,0);
这是用的最多的一种方式。由于 Access 在本机上也就没有设置用户和密码。不知道加
密的
Access 是如何连接的。估计也是用 IPropSet 吧,我们用不着,所以没有测试。
3.Shapefile 文件
Shapefile 和 Access 的打开方式有一点相同。也有差异。
//这是 Shape 所在的目录(注意:是目录);
string spacePath="E:\\shapefile";
ShapefileWorkspaceFactory fac=new
ESRI.ArcGIS .DataSourcesFile .ShapefileWorkspaceFactoryClass();
IFeatureWorkspace space=(IFeatureWorkspace)fac.OpenFromFile(spacePath,0);
4.AutoCAD。
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");
ayer=new CadFeatureLayerClass();
layer.FeatureClass =polygon;
//注记
IFeatureClass anno=space.OpenFeatureClass ("107.dwg:Annotation");
layer=new CadAnnotationLayerClass();
layer.FeatureClass =anno;
//其实还有 multiPatch。不演示了。
5.文件系统中的影像文件:
//文件路径
string filePath="E:\\image\\117.tif";
ESRI.ArcGIS.Carto.IRasterLayer
ESRI.ArcGIS.Carto.RasterLayerClass();
pRs=new pRs.CreateFromFilePath(filePath );
这个方法有一点奇怪。不知道大家看出来没有赫赫。
6.数据库中的影像图
//数据库连接
IWorkspace space=OpenSpace();//打开数据库的方式参见 1、2
IRasterWorkspaceEx rasterSpace=(IRasterWorkspaceEx)space;
IRasterDataset rasterDataset=rasterSpace.OpenRasterDataset (setName.Name );
IRasterLayer rasLayer=new RasterLayerClass();
rasLayer.CreateFromDataset(rasterDataset);
这个也一样奇怪,呵呵。
1.企业数据库 2.个人数据库 3.Shapefile 文件 4.AutoCAD dwg 文件 5.影像图文件
6.数据库中的影像数据集。
下面分别列举出打开上述数据源的方式:
1.企业数据库。
企业数据库需要使用 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","版本");
ESRI.ArcGIS.DataSourcesGDB.SdeWorkspaceFactory sdeWkspFact=new
SdeWorkspaceFactoryClass();
IFeatureWorkspace
pFeaWksp=(IFeatureWorkspace)sdeWkspFact.Open(pPropSet,0);
其中唯一需要解释的可能就是版本(version).对于没有使用版本或者第一次连接
(没有建立空间数据库,当然没有版本了).
该处使用 sde.DEFAULT 这个版本。这是默认的版本。
2.个人数据库
ArcEngine 中个人数据库为 Access。
string filePath="E:tt.mdb";
AccessWorkspaceFactory fac=new AccessWorkspaceFactoryClass();
IFeatureWorkspace space=(IFeatureWorkspace)fac.OpenFromFile(filePath,0);
这是用的最多的一种方式。由于 Access 在本机上也就没有设置用户和密码。不知道加
密的
Access 是如何连接的。估计也是用 IPropSet 吧,我们用不着,所以没有测试。
3.Shapefile 文件
Shapefile 和 Access 的打开方式有一点相同。也有差异。
//这是 Shape 所在的目录(注意:是目录);
string spacePath="E:\\shapefile";
ShapefileWorkspaceFactory fac=new
ESRI.ArcGIS .DataSourcesFile .ShapefileWorkspaceFactoryClass();
IFeatureWorkspace space=(IFeatureWorkspace)fac.OpenFromFile(spacePath,0);
4.AutoCAD。
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");
ayer=new CadFeatureLayerClass();
layer.FeatureClass =polygon;
//注记
IFeatureClass anno=space.OpenFeatureClass ("107.dwg:Annotation");
layer=new CadAnnotationLayerClass();
layer.FeatureClass =anno;
//其实还有 multiPatch。不演示了。
5.文件系统中的影像文件:
//文件路径
string filePath="E:\\image\\117.tif";
ESRI.ArcGIS.Carto.IRasterLayer
ESRI.ArcGIS.Carto.RasterLayerClass();
pRs=new pRs.CreateFromFilePath(filePath );
这个方法有一点奇怪。不知道大家看出来没有赫赫。
6.数据库中的影像图
//数据库连接
IWorkspace space=OpenSpace();//打开数据库的方式参见 1、2
IRasterWorkspaceEx rasterSpace=(IRasterWorkspaceEx)space;
IRasterDataset rasterDataset=rasterSpace.OpenRasterDataset (setName.Name );
IRasterLayer rasLayer=new RasterLayerClass();
rasLayer.CreateFromDataset(rasterDataset);
这个也一样奇怪,呵呵。