在做数据处理时,我们经常遇到的一个问题就是分类问题,如下图所示,现有一份中国各省、自治区、直辖市的shp文件,现在要求根据Name字段将该shp文件分割成多个shp文件,每个shp文件代表一个省、自治区或直辖市。

熟悉ArcGIS的同志应该清楚,在ArcToolbox工具箱下有一个分割工具可以帮我们实现该功能,如下图所示:


其实在ArcEngine中我们也可以实现这一功能,核心接口为IFeatureDataConverter,代码如下:

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Output;
using ESRI.ArcGIS.SystemUI;namespace WindowsFormsApplication1
{public partial class MainForm : Form{public MainForm(){InitializeComponent();}// 分割private void btnSplit_Click(object sender, EventArgs e){IFeatureClass pFeatureClass = GetFeatureClass(@"E:\Users\dsf\Desktop\data\china.shp");List<string> list = GetUniqueValue(pFeatureClass, "Name");foreach (string item in list){IQueryFilter pQueryFilter = new QueryFilter();pQueryFilter.WhereClause = "Name='" + item + "'";SplitByAttribute(pFeatureClass, pQueryFilter, @"E:\Users\dsf\Desktop\新建文件夹\" + item + ".shp");}}// 获取要素类private IFeatureClass GetFeatureClass(string filePath){IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();IWorkspaceFactoryLockControl pWorkspaceFactoryLockControl = pWorkspaceFactory as IWorkspaceFactoryLockControl;if (pWorkspaceFactoryLockControl.SchemaLockingEnabled){pWorkspaceFactoryLockControl.DisableSchemaLocking();}IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(filePath), 0);IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(System.IO.Path.GetFileName(filePath));return pFeatureClass;}// 获取唯一值private List<string> GetUniqueValue(IFeatureClass pFeatureClass, string fieldName){IQueryFilter pQueryFilter = new QueryFilter();pQueryFilter.AddField(fieldName);// 要素游标IFeatureCursor pFeatureCursor = pFeatureClass.Search(pQueryFilter, true);ICursor pCursor = pFeatureCursor as ICursor;// 设置统计信息IDataStatistics pDataStatistics = new DataStatistics();pDataStatistics.Field = fieldName;pDataStatistics.Cursor = pCursor;// 获取唯一值IEnumerator uniqueValues = pDataStatistics.UniqueValues;uniqueValues.Reset();// 遍历唯一值List<string> list = new List<string>();while (uniqueValues.MoveNext()){list.Add(uniqueValues.Current.ToString());}return list;}// 根据属性分割private void SplitByAttribute(IFeatureClass pSourceFeatureClass, IQueryFilter pQueryFilter, string filePath){// 源数据工作空间IDataset pSourceDataset = pSourceFeatureClass as IDataset;IFeatureClassName pSourceFeatureClassName = pSourceDataset.FullName as IFeatureClassName;IWorkspace pSourceWorkspace = pSourceDataset.Workspace;// 目标数据工作空间IWorkspaceFactory pTargetWorkspaceFactory = new ShapefileWorkspaceFactory();IWorkspace pTargetWorkspace = pTargetWorkspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(filePath), 0);IDataset pTargetDataSet = pTargetWorkspace as IDataset;// 设置目标数据属性IWorkspaceName pTargetWorkspaceName = pTargetDataSet.FullName as IWorkspaceName;IFeatureClassName pTargetFeatureClassName = new FeatureClassName() as IFeatureClassName;IDatasetName pTargetDatasetName = pTargetFeatureClassName as IDatasetName;pTargetDatasetName.WorkspaceName = pTargetWorkspaceName;pTargetDatasetName.Name = System.IO.Path.GetFileName(filePath);// 检查字段IFieldChecker pFieldChecker = new FieldChecker();pFieldChecker.InputWorkspace = pSourceWorkspace;pFieldChecker.ValidateWorkspace = pTargetWorkspace;// 字段转换IFields pSourceFields = pSourceFeatureClass.Fields;IFields pTargetFields = null;IEnumFieldError pEnumFieldError = null;pFieldChecker.Validate(pSourceFields, out pEnumFieldError, out pTargetFields);// 数据转换IFeatureDataConverter pFeatureDataConverter = new FeatureDataConverter();pFeatureDataConverter.ConvertFeatureClass(pSourceFeatureClassName, pQueryFilter, null, pTargetFeatureClassName, null, pTargetFields, "", 1000, 0);}}
}

最终的分割结果如下图所示:

ArcEngine根据属性分割要素类的实现方法相关推荐

  1. ArcEngine实现要素类排序的四种方法

    ArcEngine的排序方法有多种,下面介绍一下主要的四种方法. 准备数据 测试数据如下图所示:新建一个Geodatabase的要素类,其中Name为道路名称,Width为道路宽度,下面将根据Widt ...

  2. ArcGIS基础:通过创建渔网四等份分割要素【提取-分割】工具

    如上图所示,共有三个要素图层,分别是:点.线.面,本操作通过四分法(分成同等大小四份)分幅方式对要素进行分割 [创建渔网]:如上图所示,在工具箱里找到右侧的[数据管理工具-要素类]下的[创建渔网]工具 ...

  3. ArcEngine编辑模块——创建要素

    1.前言 在ArcEngine中,创建要素一般分为两部分,即:设置空间信息.设置属性信息.下面给出实现代码. 2.定义实体类 首先在ArcMap中创建一个点文件,其属性字段如下表所示: 字段名称 字段 ...

  4. arcgis 同名图层合并_ArcGIS实践教程(37)ArcGIS/ArcMap多个图层(要素类)的合并

    方法一:Arctoolbox\Data Management Tools\General\Merge 方法二:Arctoolbox\Data Management Tools\General\Appe ...

  5. arcgis python实例_arcgis python脚本工具实例教程—栅格范围提取至多边形要素类

    arcgis python脚本工具实例教程-栅格范围提取至多边形要素类 商务合作,科技咨询,版权转让:向日葵,135-4855_4328,xiexiaokui#qq.com 功能:提取栅格数据的范围, ...

  6. 线面要素类相互转换-原创

    一.线转面的步骤 1.线几何属性转面几何属性ArcToolbox-Data Management Tools-Features-Feature To polygon,此过程只是将几何属性做了转换,得到 ...

  7. html语言arc属性,为要素图层设置 HTML 弹出窗口属性

    ArcGIS 中的许多地图图层都可用于访问要素的丰富的属性及其他信息.一种机制是,单击每个要素时显示一个 HTML 弹出窗口.这就潜在地提供了一种有效的方法来共享每个要素的 HTML 格式的信息(例如 ...

  8. ArcGIS GDB中要素类不可编辑

    要编辑存储于gdb中的要素类时,提示"no editable layers". 图层警告"check to see that you have the appropria ...

  9. ArcGIS教程:要素类基础知识(一)

    要素类具有相同空间制图表达(如点.线或面)和一组通用属性列的常用要素的同类集合,例如,表示道路中心线的线类要素.最常用的四个要素分别是点.线.面和注记(地图文本的地理数据库名称等). 要素类是具有相同 ...

最新文章

  1. snort2安装及卸载教程
  2. 调整[0,x)区间上出现的概率
  3. 04-CA/TA编程:hash demo
  4. python基础语法-三大内建数据结构之集合(set)
  5. python画图灰白_python 站点资料插值画图及白化
  6. mysql所以字段_MySQL|mysql-索引
  7. mysql5.7 备份恢复_RDS for MySQL 5.7 备份恢复为本地实例-阿里云开发者社区
  8. 烹佛烹祖大炉鞴,锻凡锻圣恶钳锤
  9. 强连通分量(Tarjan)模板
  10. 特殊的栈GetMin
  11. CTFmisc常见音频隐写总结
  12. Sybase数据库知识总结
  13. 广义线性模型(Generalized Linear Model)之三:Poisson回归
  14. html给图片坐标没连接,4-HTML中的 a, img/标签使用及锚点,路径相关
  15. python处理grd格式文件_python json pickle 模块
  16. FAQ01【Hadoop】:Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
  17. 洛谷 P1007 独木桥
  18. 必考面试题:浏览器怎么渲染页面的
  19. 【海外合作】效率源智能手机取证系统入选克罗地亚大学教学工具
  20. 真正的人品,藏在对弱者的态度里

热门文章

  1. 前端开发知识库工具之网文快捕
  2. TQ210_裸机编程(一)——点亮LED灯
  3. eprime提示计算机内存不足,线程数不足旗舰平台拒绝旗舰表现_技嘉 G1.Assassin 2_主板评测-中关村在线...
  4. GVP(Go 领域最具价值专家) 群像终揭晓,附竞猜获奖名单
  5. go语言并发下载电影和视频,根据m3u8索引url下载视频.下载网页中的图片,可以从当前页向下搜索层数.
  6. 什么是网盾,什么是网盾工程?
  7. python 图片中物体识别_使用TensorFlow识别照片中的物体
  8. 【181008】VC++ 妙手连珠五子棋源码
  9. 条码打印软件如何连接Access数据库
  10. 每日案例(第四期):智慧金融08-10 | 知识图谱实践案例集(速读版)