示例#1
0
        /// <summary>
        /// 复制旧要素图层(只包含选中字段)
        /// </summary>
        /// <param name="featureWorkspace">要素工作空间</param>
        /// <param name="selectionLayer">被复制要素图层</param>
        /// <param name="newLayerName">新图层名称</param>
        /// <returns></returns>
        private IFeatureLayer CopyOldFeatureLayerWithSelectFiled(IFeatureWorkspace featureWorkspace,
                                                                 IFeatureLayer selectionLayer, string newLayerName)
        {
            Dictionary <string, int> fidValue      = DataTableInfoClass.GetColumnValueDictionary(newAttributeTable, "FID"); //FID值列表
            List <string>            columnName    = DataTableInfoClass.GetAllColumnName(newAttributeTable);                //表格所有列名
            IWorkspaceEdit           workspaceEdit = featureWorkspace as IWorkspaceEdit;

            if (workspaceEdit == null)
            {
                return(null);
            }
            //开始编辑
            StartEdit(workspaceEdit);
            try
            {
                //以旧图层为基础创建新图层要素集合
                IFeatureClass newFeatureClass = CreateNewFeatureClass(featureWorkspace, selectionLayer, newLayerName);
                //复制旧要素值到新要素集合
                CopyFeatureValueToNewFeature(selectionLayer, newFeatureClass, fidValue, columnName);
                //停止并保存编辑
                EndAndSaveEdit(workspaceEdit);

                //删除非选中字段
                DeleteFeatureClassFields(newFeatureClass, columnName);
                return(FeatureInfoClass.GetFeatureLayer(newFeatureClass));
            }
            finally
            {
                //撤销编辑
                UndoEdit(workspaceEdit);
            }
        }
示例#2
0
        /// <summary>
        /// 计算要素FID和面积
        /// </summary>
        /// <param name="vectorFile"></param>
        /// <returns></returns>
        public static Dictionary <string, double> ComputeFeatureFidAndArea(string vectorFile)
        {
            IFeatureLayer featureLayer = FeatureInfoClass.GetFeatureLayer(vectorFile);
            IQueryFilter  pFilter      = new QueryFilterClass();

            pFilter.SubFields = "Shape, FID";  //设置过滤字段,提高效率
            IFeatureCursor featureCursor = featureLayer.Search(pFilter, false);

            return(ComputeAreaByCursor(featureCursor));
        }
示例#3
0
        /// <summary>
        /// 复制图层
        /// </summary>
        /// <param name="inFile">输入文件</param>
        /// <param name="outFile">输出文件</param>
        /// <returns></returns>
        private static IFeatureLayer CopyLayer(string inFile, string outFile)
        {
            IFeatureClass featureClass = FeatureInfoClass.GetFeatureClass(inFile);
            IDataset      dataset      = featureClass as IDataset;

            if (dataset == null || !dataset.CanCopy())
            {
                return(null);
            }
            DatasetHelper.CopyDatasetAsFeatureLayer(dataset, outFile);
            return(FeatureInfoClass.GetFeatureLayer(outFile));
        }
示例#4
0
        /// <summary>
        /// 创建新图层
        /// </summary>
        /// <param name="saveFile">保存路径</param>
        /// <returns></returns>
        private IFeatureLayer CreateNewLayer(string saveFile)
        {
            string saveName = Path.GetFileNameWithoutExtension(saveFile);
            IFeatureLayerDefinition featureLayerDefinition = oldFeatureLayer as IFeatureLayerDefinition;

            if (featureLayerDefinition == null)
            {
                return(null);
            }
            //从要素图层的选择集中创建新要素图层
            IFeatureLayer selectionLayer = featureLayerDefinition.CreateSelectionLayer(saveName, true, null, null);
            //打开要素工作空间
            IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)FeatureInfoClass.GetShapefileWorkspace(saveFile);

            if (pFeatureWorkspace == null || selectionLayer == null)
            {
                return(null);
            }
            IFeatureLayer copyFeatureLayer = CopyOldFeatureLayerWithSelectFiled(pFeatureWorkspace, selectionLayer, saveName);

            return(copyFeatureLayer);
        }
示例#5
0
 /// <summary>
 /// 创建新的字段
 /// </summary>
 /// <param name="vectorFile"></param>
 /// <param name="newFieldTable"></param>
 public NewFieldCreateClass(string vectorFile, DataTable newFieldTable)
 {
     newFieldLayer      = FeatureInfoClass.GetFeatureLayer(vectorFile);
     this.newFieldTable = newFieldTable;
 }
示例#6
0
        private readonly IFeatureLayer oldFeatureLayer; //被查询的旧图层

        /// <summary>
        /// 创建新的要素图层
        /// </summary>
        /// <param name="inVectorFile"></param>
        /// <param name="newLayerTable"></param>
        public NewFeatureLayerCreateClass(string inVectorFile, DataTable newLayerTable)
        {
            oldFeatureLayer   = FeatureInfoClass.GetFeatureLayer(inVectorFile);
            newAttributeTable = newLayerTable;
        }