若进行叠加求交分析时,如果要进行多个图层的叠加,而此时输入的参数是图层,那么我们可以利用示例二,通过图层对象获取其数据源的路径。
实际上在ArcMap中的 Table of Contents(如下图)应该就是这样实现的:(左:图层)(右:数据源)
数据转换:IFeatureDataConverter 接口
例子:
- IFeatureLayer featureLayer=pLayer as IFeatureLayer;
- IFeatureClass inputFeatureClass = featureLayer.FeatureClass;
- IDataset inputDataset = (IDataset)inputFeatureClass;
- // IDatasetName inputDatasetName = (IDatasetName)inputDataset.FullName;
- IFeatureClassName inputclassName = (IFeatureClassName)inputDataset.FullName ;
- // Get the layer's selection set.
- //利用属性打开
- IPropertySet ps = new PropertySetClass();
- ps.SetProperty("DATABASE", fd.SelectedPath);
- IWorkspaceFactory wsf = new FileGDBWorkspaceFactoryClass();
- IWorkspace ws = null;
- try
- {
- ws = wsf.Open(ps, 0);
- }
- catch (Exception e)
- {
- }
- //设置输出要素属性
- IDataset ds = (IDataset)ws;
- IWorkspaceName wsName = (IWorkspaceName)ds.FullName;
- IFeatureClassName featClsName = new FeatureClassNameClass();
- IDatasetName dsName = (IDatasetName)featClsName;
- dsName.WorkspaceName = wsName;
- dsName.Name = pLayer.Name;
- //// Use the IFieldChecker interface to make sure all of the field names are valid for a shapefile.
- IFieldChecker fieldChecker = new FieldCheckerClass();
- IFields shapefileFields = null;
- IEnumFieldError enumFieldError = null;
- fieldChecker.InputWorkspace = inputDataset.Workspace;
- fieldChecker.ValidateWorkspace = ws;
- //out and ref
- //////////////////用Ref型参数时,传入的参数必须先被初始化。而Out则不要要,对Out而言,就必须在方法中对其完成初始化。
- // ///////////////用Ref和Out时都必须注意,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。
- /////////////////// Out更适合用在要要Return多个返回值的地方,而Ref则用在要要被调出使用的方法修改调出使用者的引用的时候。
- fieldChecker.Validate(inputFeatureClass.Fields, out enumFieldError, out shapefileFields);
- // At this point, reporting/inspecting invalid fields would be useful, but for this example it's omitted.
- // We also need to retrieve the GeometryDef from the input feature class.
- int shapeFieldPosition = inputFeatureClass.FindField(inputFeatureClass.ShapeFieldName);
- IFields inputFields = inputFeatureClass.Fields;
- IField shapeField = inputFields.get_Field(shapeFieldPosition);
- IGeometryDef geometryDef = shapeField.GeometryDef;
- IGeometryDef pGeometryDef = new GeometryDef();
- IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit;
- pGeometryDefEdit.GeometryType_2 = inputFeatureClass.ShapeType;
- pGeometryDefEdit.SpatialReference_2 = mapcontrol3.Map.SpatialReference;
- // Now we can create a feature data converter.
- IFeatureDataConverter featureDataConverter = new FeatureDataConverterClass();
- IEnumInvalidObject enumInvalidObject = featureDataConverter.ConvertFeatureClass(inputclassName, null,
- null, featClsName, pGeometryDef, shapefileFields, "", 1000, 0);
• esriDataSourcesGDB.AccessWorkspaceFactory
• esriDataSourcesFile.ArcInfoWorkspaceFactory
• esriDataSourcesFile.CadWorkspaceFactory
• esriDataSourcesGDB.FileGDBWorkspaceFactory
• esriDataSourcesOleDB.OLEDBWorkspaceFactory
• esriDataSourcesFile.PCCoverageWorkspaceFactory
• esriDataSourcesRaster.RasterWorkspaceFactory
• esriDataSourcesGDB.SdeWorkspaceFactory
• esriDataSourcesFile.ShapefileWorkspaceFactory
• esriDataSourcesOleDB.TextFileWorkspaceFactory• esriDataSourcesFile.TinWorkspaceFactory
• esriDataSourcesFile.VpfWorkspaceFactory
Iworkspace接口的一些说明:
工作空间是空间和非空间数据集的容器,例如特征类、光栅数据集和表。它提供了实例化现有数据集和创建新数据集的方法。工作空间被分类为esriWorkspaceType枚举器指定的类型;FileSystemWorkspace、LocalDatabaseWorkspace RemoteDatabaseWorkspace。shapefile和ArcInfo工作区是文件系统工作空间的示例。存储在Access或文件地理数据库中的个人地理数据库是LocalDatabaseWorkspace的一个示例。存储在Oracle、DB2、SqlServer或Informix等RDBMS中的地理数据库,并通过ArcSDE访问是一个远程数据库工作区示例。
工作空间的工作空间可以被持久化,例如,在一个映射文档中。应用程序可以在将其从持久存储中载入之后调用Open方法,以便连接到工作区,并获得一个对象引用。WorkspaceName name对象可以通过使用IDataset.FullName来从工作空间返回。
IWorkspace接口提供了访问工作空间的各种属性的方法,例如它的连接属性,以及它所包含的数据集的集合。
WorkSpace类不能直接实例化,必须要由IWorkSpaceFactory的Create方法创建。