Exemple #1
0
        /// <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));
        }
Exemple #2
0
        /// <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),未实现其他类型图层的数据源设置");
            }
        }