/// <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); } }
/// <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)); }
/// <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)); }
/// <summary> /// 创建新的字段 /// </summary> /// <param name="vectorFile"></param> /// <param name="newFieldTable"></param> public NewFieldCreateClass(string vectorFile, DataTable newFieldTable) { newFieldLayer = FeatureInfoClass.GetFeatureLayer(vectorFile); this.newFieldTable = newFieldTable; }
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; }