ArcEngine根据属性分割要素类的实现方法
在做数据处理时,我们经常遇到的一个问题就是分类问题,如下图所示,现有一份中国各省、自治区、直辖市的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根据属性分割要素类的实现方法相关推荐
- ArcEngine实现要素类排序的四种方法
ArcEngine的排序方法有多种,下面介绍一下主要的四种方法. 准备数据 测试数据如下图所示:新建一个Geodatabase的要素类,其中Name为道路名称,Width为道路宽度,下面将根据Widt ...
- ArcGIS基础:通过创建渔网四等份分割要素【提取-分割】工具
如上图所示,共有三个要素图层,分别是:点.线.面,本操作通过四分法(分成同等大小四份)分幅方式对要素进行分割 [创建渔网]:如上图所示,在工具箱里找到右侧的[数据管理工具-要素类]下的[创建渔网]工具 ...
- ArcEngine编辑模块——创建要素
1.前言 在ArcEngine中,创建要素一般分为两部分,即:设置空间信息.设置属性信息.下面给出实现代码. 2.定义实体类 首先在ArcMap中创建一个点文件,其属性字段如下表所示: 字段名称 字段 ...
- arcgis 同名图层合并_ArcGIS实践教程(37)ArcGIS/ArcMap多个图层(要素类)的合并
方法一:Arctoolbox\Data Management Tools\General\Merge 方法二:Arctoolbox\Data Management Tools\General\Appe ...
- arcgis python实例_arcgis python脚本工具实例教程—栅格范围提取至多边形要素类
arcgis python脚本工具实例教程-栅格范围提取至多边形要素类 商务合作,科技咨询,版权转让:向日葵,135-4855_4328,xiexiaokui#qq.com 功能:提取栅格数据的范围, ...
- 线面要素类相互转换-原创
一.线转面的步骤 1.线几何属性转面几何属性ArcToolbox-Data Management Tools-Features-Feature To polygon,此过程只是将几何属性做了转换,得到 ...
- html语言arc属性,为要素图层设置 HTML 弹出窗口属性
ArcGIS 中的许多地图图层都可用于访问要素的丰富的属性及其他信息.一种机制是,单击每个要素时显示一个 HTML 弹出窗口.这就潜在地提供了一种有效的方法来共享每个要素的 HTML 格式的信息(例如 ...
- ArcGIS GDB中要素类不可编辑
要编辑存储于gdb中的要素类时,提示"no editable layers". 图层警告"check to see that you have the appropria ...
- ArcGIS教程:要素类基础知识(一)
要素类具有相同空间制图表达(如点.线或面)和一组通用属性列的常用要素的同类集合,例如,表示道路中心线的线类要素.最常用的四个要素分别是点.线.面和注记(地图文本的地理数据库名称等). 要素类是具有相同 ...
最新文章
- snort2安装及卸载教程
- 调整[0,x)区间上出现的概率
- 04-CA/TA编程:hash demo
- python基础语法-三大内建数据结构之集合(set)
- python画图灰白_python 站点资料插值画图及白化
- mysql所以字段_MySQL|mysql-索引
- mysql5.7 备份恢复_RDS for MySQL 5.7 备份恢复为本地实例-阿里云开发者社区
- 烹佛烹祖大炉鞴,锻凡锻圣恶钳锤
- 强连通分量(Tarjan)模板
- 特殊的栈GetMin
- CTFmisc常见音频隐写总结
- Sybase数据库知识总结
- 广义线性模型(Generalized Linear Model)之三:Poisson回归
- html给图片坐标没连接,4-HTML中的 a, img/标签使用及锚点,路径相关
- python处理grd格式文件_python json pickle 模块
- FAQ01【Hadoop】:Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
- 洛谷 P1007 独木桥
- 必考面试题:浏览器怎么渲染页面的
- 【海外合作】效率源智能手机取证系统入选克罗地亚大学教学工具
- 真正的人品,藏在对弱者的态度里
热门文章
- 前端开发知识库工具之网文快捕
- TQ210_裸机编程(一)——点亮LED灯
- eprime提示计算机内存不足,线程数不足旗舰平台拒绝旗舰表现_技嘉 G1.Assassin 2_主板评测-中关村在线...
- GVP(Go 领域最具价值专家) 群像终揭晓,附竞猜获奖名单
- go语言并发下载电影和视频,根据m3u8索引url下载视频.下载网页中的图片,可以从当前页向下搜索层数.
- 什么是网盾,什么是网盾工程?
- python 图片中物体识别_使用TensorFlow识别照片中的物体
- 【181008】VC++ 妙手连珠五子棋源码
- 条码打印软件如何连接Access数据库
- 每日案例(第四期):智慧金融08-10 | 知识图谱实践案例集(速读版)