/// <summary> /// 相交分析,返回相交部分的要素(注意输入要素类和叠加要素类不能有空几何等问题) /// </summary> /// <param name="inClass">输入的要素类</param> /// <param name="overlayClass">叠加的要素类</param> /// <param name="outPath">保存分析结果的工作空间路径</param> /// <param name="outName">保存分析结果的要素类名称</param> /// <returns></returns> public static IFeatureClass Intersect(this IFeatureClass inClass, IFeatureClass overlayClass, string outPath, string outName) { var workspaceType = WorkspaceEx.GetDefaultWorkspaceType(outPath); if (workspaceType == EWorkspaceType.Default) { throw new Exception($"工作空间路径(outPath)不存在!{outPath} 该路径必须是已存在的mdb文件路径,或shp所在文件夹路径,或gdb文件夹路径,或sde连接字符串"); } IFeatureClassName outClassName = new FeatureClassNameClass { ShapeType = inClass.ShapeType, ShapeFieldName = inClass.ShapeFieldName, FeatureType = esriFeatureType.esriFTSimple }; IWorkspaceName workspaceName = new WorkspaceNameClass { WorkspaceFactoryProgID = workspaceType.GetDescription(1), PathName = outPath }; IDatasetName datasetName = (IDatasetName)outClassName; datasetName.Name = outName; datasetName.WorkspaceName = workspaceName; return(new BasicGeoprocessorClass().Intersect((ITable)inClass, false, (ITable)overlayClass, false, 0.01, outClassName)); }
/// <summary> /// 设置图层数据源 /// </summary> /// <param name="layer">设置数据源的图层</param> /// <param name="workspacePath">工作空间路径</param> /// <param name="dataSetName">数据集名称,数据源不在数据集中则应为null</param> /// <param name="objectName">图层关联对象的名称,即要素类名称或栅格数据集名称</param> public static void SetSourcePath(this ILayer layer, string workspacePath, string dataSetName, string objectName) { if (!WorkspaceEx.IsWorkspacePath(workspacePath) && !WorkspaceEx.IsConnectionString(workspacePath)) { throw new ArgumentException($"找不到数据源({workspacePath}),请指定正确的数据源!"); } switch (layer) { case IFeatureLayer featureLayer: if (featureLayer is IDataLayer dataLayer) { IDatasetName datasetName = (IDatasetName)dataLayer.DataSourceName; EWorkspaceType eWorkspaceType = WorkspaceEx.GetDefaultWorkspaceType(workspacePath); datasetName.WorkspaceName.WorkspaceFactoryProgID = eWorkspaceType.GetDescription(1); datasetName.WorkspaceName.PathName = workspacePath; //TODO: if (!string.IsNullOrWhiteSpace(dataSetName)) { datasetName.Category = dataSetName; } if (!string.IsNullOrWhiteSpace(objectName)) { datasetName.Name = objectName; } } break; case IRasterLayer rasterLayer: objectName = string.IsNullOrWhiteSpace(objectName) ? ((rasterLayer as IDataLayer)?.DataSourceName as IDatasetName)?.Name : objectName; if (objectName == null) { throw new Exception($"指定数据源名称(参数{nameof(objectName)})不能为空!"); } rasterLayer.CreateFromFilePath(!string.IsNullOrWhiteSpace(dataSetName) ? Path.Combine(workspacePath, dataSetName, objectName) : Path.Combine(workspacePath, objectName)); break; case IGroupLayer groupLayer: throw new Exception("该图层对象为图层组(IGroupLayer),无法设置图层组的数据源,请指定到具体的图层"); default: throw new NotImplementedException( "图层不是要素图层(IFeatureLayer),也不是栅格图层(IRasterLayer),未实现其他类型图层的数据源设置"); } }