基于Arcgis10.1 AO的一种查询属性值重复小工具开发实现

合集下载

基于ArcGIS 10.1的区图层批处理合并

基于ArcGIS 10.1的区图层批处理合并

基于ArcGIS 10.1的区图层批处理合并
吴战克
【期刊名称】《地理空间信息》
【年(卷),期】2015(13)4
【摘要】基于ArcGIS 10.1下AO开发接口,实现了存储在MDB数据格式中同坐标信息、同属性结构区图层的批处理合并,将批处理结果与ArcMap手动合并的精度进行了对比检验,结果证明该方法切实可行,能降低作业人员的劳动强度,提高工作效率。

【总页数】2页(P93-94)
【作者】吴战克
【作者单位】新疆地矿局测绘大队,新疆乌鲁木齐 830017
【正文语种】中文
【中图分类】P208
【相关文献】
1.基于ArcGIS 10.1的基础地理数据库升级及性能分析 [J], 李静兰
2.基于ArcGis10.1软件下遥感影像挂图的制作 [J], 陈慧芬
3.基于ArcGIS 10.1的merge接口拼接矢量数据对比研究 [J], 胡霓裳
4.基于ArcGIS 10.1的merge接口拼接矢量数据对比研究 [J], 胡霓裳
5.基于ArcGIS10.3.1的西藏自治区第二次全国重点保护野生植物资源调查目的物种分布范围矢量图层的生成、提取过程分析 [J], 吴云华
因版权原因,仅展示原文概要,查看原文内容请购买。

arcgis中的select by attributes like用法

arcgis中的select by attributes like用法

arcgis中的select by attributes like用法在ArcGIS中,`Select by Attributes`工具是一种基于属性查询的方法,可以用于筛选和提取满足特定条件的要素。

`Like`关键字在SQL表达式中用于模糊匹配属性值。

以下是在ArcGIS中使用`Select by Attributes`和`Like`关键字的一个示例:假设我们有一个名为“city_data”的图层,其中包含“name”和“population”两个属性字段。

我们想要筛选出人口规模在50,000到100,000之间的城市。

可以使用以下SQL表达式:```sqlSELECT * FROM city_dataWHERE population LIKE '50000%' AND population LIKE '%100000';```这个表达式表示:选取满足以下条件的城市:人口规模以50,000开头的城市,并且人口规模以100,000结尾。

在ArcGIS中,可以使用以下步骤实现这个查询:1. 打开ArcMap,加载“city_data”图层。

2. 选择图层,右键单击,然后选择“属性查询”(Attributes Query)。

3. 在“属性查询”对话框中,选择“SQL查询”(SQL Query)。

4. 在“SQL查询”文本框中输入上述SQL表达式。

5. 点击“应用”(Apply)按钮,ArcGIS将根据查询条件筛选出满足要求的城市。

需要注意的是,`Like`关键字支持通配符,如`%`表示任意数量的字符,`_`表示一个字符。

此外,`Like`关键字不区分大小写。

如果需要区分大小写,可以使用`ILIKE`关键字。

第10章ArcGIS的矢量分析

第10章ArcGIS的矢量分析
数据更新分析用于将更新数据层中的要素添加到输入数 据层中,并且将两个数据层的相交区域的原要素裁剪掉,如 图所示。
图 数据更新分析示意图
10.9.6 对称差分析
对称差分析用于计算输入数据层和更新数据层的几何交 叉,它们之间的公共部分将不会被输入到结果中,如图所示 。
图 对称差分析示意图
图 Split流程
10.5.3 选择
选择(Select)工具从输入要素类型或输入要素数据层 中选择要素,并将其保存在一个新的数据层分钟,可以根据 SQL表达式选择而确定输出要素,具体操作如下。
10.5.4 表格选择
表格选择(Table Select)工具是从输入要素或数据层 中提取选中的要素,并将其保存在一个新的输出表中。
10.6 缓冲区分析
缓冲区是地理空间目标的一种影响范围或服务范围,而 缓冲区分析研究根据地理信息系统数据库的点、线、面实体 ,自动建立齐周围一定范围内的缓冲多边形,帮助解决临近 空间问题。
缓冲区是给定一个几何图形和一个缓冲距离,进行缓冲 区运算后,返回一个多边形,此多边形覆盖了该几何图形的 距离小于或者等于缓冲距离的所有点。在一定程度上,缓冲 区运算也算是空间几何图形集合运算的一种。
10.2.2 利用要素属性选择
在GIS系统中,要素的图形与属性信息是一一对应的。 除了通过要素的图形查询要素的属性信息之外,还可以通过 要素的属性信息查询对应的要素图形。主要是通过属性查询 对话框,按照SQL查询语言,建立有属性字段、逻辑或算术 运算符号、属性值或字符串组成的查询条件表达式,按照条 件表达式查询所选择的图形。
10.6.1 添加缓冲向导工具
ArcMap应用程序在默认情况下,缓冲区向导工具是不 会出现在ArcMap的主菜单栏和标准工具栏上的,只有通过 人工添加才能够使用缓冲区向导工具,下面通过具体的操作 步骤介绍缓冲区向导工具的添加。

ArcGIS中的三种查询

ArcGIS中的三种查询

随笔- 115 文章- 0 评论- 117 ArcGIS中的三种查询ArcGIS r untime SDK for WPF/Silverlight中的三种常用的查询:QueryTask、FindTask、IdentifyTask都是继承自ESRI.ArcGIS.Client.Tasks,关系如下图所示:1、QueryTask:是一个进行空间和属性查询的功能类,它可以在某个地图服务的某个子图层内进行查询,顺便提一下的是,QueryTask进行查询的地图服务并不必须加载到Map中进行显示。

QueryTask的执行需要两个先决条件:一个是需要查询的图层URL、一个是进行查询的过滤条件。

下面是QueryTask的基本过程://新建一个QueryTaskQueryTask queryTask = newQueryTask("/ArcGIS/rest/services/Demographics/ESRI _Census_USA/MapServer/5");// Query对象Query query = new Query();//传入空间几何范围,可以不设置//合法的geometry类型是Extent, Point, Multipoint, Polyline, Polygonquery.Geometry = geometry;//是否返回查询结果的空间几何信息query.ReturnGeometry = true;//查询结果返回的字段,字段必须在图层中,字段的大小写可忽略query.OutFields.AddRange(new string[] { "AREANAME", "POP2000" });//quer.OutField.Add("*"); //返回所有字段//查询的where条件,可以是任何合法的SQL语句,可以不设置query.Where = "POP2000 > 350000";//异步查询,需要绑定queryTask的两个事件,通过ExecuteCompleted得到查询结果 queryTask.ExecuteCompleted += QueryTask_ExecuteCompleted;queryTask.Failed += QueryTask_Failed;queryTask.ExecuteAsync(query);//同步查询,不需要绑定事件,直接返回查询结果//FeatureSet featureSet = queryTask.Execute(query);2、FindTask:允许对地图中一个或多个图层的要素进行基于属性字段值的查询(search one or more layer s in a map for features with attribute values that match or c ontain an input value)。

Arcgis统计查询

Arcgis统计查询

基于Arcgis软件进行简单的查询统计
利用Arcgis软件的统计分析功能能够很好地对数据进行统计分析。

具体的操作步骤如下:1、准备工作
(1)打开地图文档,如图所示,打开对应图层的属性表。

(2)这里以材质为生铁,口径为300作为例子筛选的条件,点击“按属性选择”,打开SQL 对话框。

2、查询
接下去就要输入SQL语句了。

这里示例筛选口径为300,管质材料为生铁的对应的数据。

对应的SQL语句为:( MA TERIAL = '生铁' ) AND( D_S = 300 )(MATERIAL为管质材料对应的字段,D_S为口径所对应的字段),具体操作过程如下图:
(1)选择字段获取其对应的唯一值:
(2)输入完整的SQL表达式:
(3)点击右下角的“应用”按钮,就可以执行SQL语句,如果语法没有错误的话,那么就会完成了我们的按条件查询的工作了。

查询的结果如下图:
这时可以查询已经完成,一共有172条符合条件的记录。

我们可以把数据切换到只显示对应的查询到的数据。

3、汇总计算
接下去就是要对统计出来的数据在进行一个汇总,切换到所选的记录页面,在属性表中找到长度这个字段。

(最后一个SHAPE.LEN字段)
在字段上方右键,选择“统计”,系统会给我们算出所有行的总和,也就是说算出了300口径大小的生铁管道的总长度。

4、总结
如上,我们要筛选统计300口径的生铁材质的管道工作就完成了,得出一共有172条该种管
道,管道的总长度为7175.6米。

同理也可以利用Arcgis对其他的管道进行统计查询。

Arcgis属性表操作讲解

Arcgis属性表操作讲解
02
ArcGIS提供了强大的地图制作和 空间分析工具,帮助用户更好地 理解和管理地理信息数据。
属性表的重要性
属性表是ArcGIS中用于存储和管理地 理要素属性信息的数据表。
属性表包含了地理要素的各种属性字 段,如名称、类型、面积等,是进行 空间分析和地图制作的重要基础数据。
02
创建和打开属性表
创建新的属性表
未来,属性表操作将更加智能化和自动化,例如通过机器学习和 人工智能技术实现自动分类、自动识别和自动提取等功能。
同时,随着数据量的不断增加和数据类型的多样化,属性表操作 将面临更多的挑战和机遇,需要不断更新和完善相关技术和方法, 以适应不断变化的需求和应用场景。
THANKS
感谢观看
关联矢量数据
通过属性表,可以关联到其他矢量数据图层,实现属性信息 在图层间的传递和共享。
联合查询
基于属性表,可以执行跨图层的联合查询,获取不同矢量数 据图层间的关联信息。
与栅格数据的关联
属性表与栅格数据关联
通过属性表,可以关联到栅格数据,实现基 于属性的栅格数据筛选和提取。
栅格数据属性提取
基于属性表,可以从栅格数据中提取特定的 属性信息,如提取特定区域的平均高程值。
空间查询
空间关系筛选
空间查询允许用户基于空间关系对属性表进行筛选。例如,用户可以筛选出与指定点、线或面具有相 交、包含或距离等空间关系的要素。
05
属性表数据转换与导出
数据导
导出整个属性表
将整个属性表导出为CSV、Excel等格式,方便与其 他软件进行数据交换和共享。
导出特定字段
仅导出属性表中的特定字段,满足用户对特定数据的 需求。
与地图文档的关联
地图文档与属性表关联

基于ArcGIS10.1的区图层批处理合并

基于ArcGIS10.1的区图层批处理合并
理 的 MD B数据 库 ,MDB数 据库名称 和其 中 图层名 称
同样 需要 对应 设 定 。
2 . 3 合并 、调用显示生成图层
获取 到 需要合 并 的 MDB数 据 库 集合后 ,分 别调
用A E的工作 空间工厂 ,打 开 MD B数据 库 ,获取 筛选
2 开发实现
软件 的开发 主要 分为 3个 步骤 ,其 开发技 术路 线
如 图 1所 示 。
收稿 日期 : 2 0 1 4 — 0 7 — 1 0 项 目来 源 : 新描 维吾 尔 治 Ⅸ第一 一 次 全阁地 羁 j 阳情普 资 助项 口 ,
Di r e c t o r y I n f o类 .F o l d e r Br o ws e r Di lo a g设 置 对 应 的 目
1 作业环境部署 Байду номын сангаас
1 ) 开 发 环 境 设 置 。 开 发 的 架 构 是 C/ S; 开 发 的
I DE平 台是 Mi c r o s o  ̄Vi s u a l S t u d i 0 2 0 1 0;开发 的地 图 平 台是 Ar c GI S 1 0 . 1: 开 发 的 语 言和 组件 分 别 是 c 和 AO S DK 组 件 。
文 章编 号 : 1 6 7 2 — 4 6 2 3( 2 0 1 5) 0 4 — 0 0 9 3 — 0 2
在地 理数据 信 息化 处理的数 据收 集和初 步加 工过
程 中,作业人 员几乎都会 遇到 重复操 作 同样 的 工作 步
骤 这 一 问题 ,这 主要 是 因 为 项 目初 期 的 数 据 收 集 工 作
标 文件 夹 名 称 ,Di r e c t o r y l n f o类根 据 文 件 层 级 分 别将 多

ArcGISEngine空间查询功能的实现(QueryFilterClass+Spatia。。。

ArcGISEngine空间查询功能的实现(QueryFilterClass+Spatia。。。

ArcGISEngine空间查询功能的实现(QueryFilterClass+Spatia。

地图中包含⼤量的信息,为了快速地了解所需信息,必须借助为空间数据专门编写的空间查询功能。

空间查询主要有两种类型:基于属性的查询,也称为属性查询。

基于空间位置的查询,也称为空间查询。

查询类的基本思路(适⽤于属性查询以及空间查询)1、属性查询基于属性的查询,即属性查询,是通过对要素的属性信息设定查询条件来查询、定位空间位置。

QueryFilterClass是专门⽤于属性查询的属性查询过滤器。

被称为过滤器是因为拥有WhereClause属性——能够设置查询条件的Sql语句。

注意:使⽤WhereClause应该注意以下⼏点:(1)⼤⼩写——字段值不区分⼤⼩写。

(2)通配符的使⽤——“?”代表单个字符,“*”代表⼀组字符。

(3)不⽀持Orderby关键字,可以通过ITablesort接⼝完成。

2、空间查询基于空间位置查询,即空间查询,是根据要素之间的空间位置关系进⾏的查询,查询结果包括了被查询对象的空间信息以及属性信息。

SpatialFilterClass对象类被称为空间查询过滤器。

它是属性过滤器的⼦类,它拥有的ISpatialFilter也继承了IQueryFilter接⼝。

因此,空间查询过滤器既能进⾏空间查询也能进⾏属性查询。

⼀般地,要素之间的空间关系,即查询范围与被查询对象的空间关系主要有以下⼏种:相交(Intersect)、叠加(Overlap)、穿越(Cross)、在内部(Within)和包含(Con-tain)。

空间关系(SpatialRel)属性成员不需要⽤户⾃定义,系统以枚举常量的⽅式(即ESRISpatialRelEnum)向⽤户提供了多种空间关系。

(1)ESRISpatialRellntersects:空间相交(2)ESRISpatialRelTouches:空间相接(3)ESRISpatialRelOverlaps:覆盖(4)ESRISpatialRelCrosses:穿越(5)ESRISpatialRelWithin:在内部(6)ESRISpatialRelContains:包含I.数据类型转换(底层模块)///<summary>///转换数据类型///</summary>///<param name="type"></param>///<returns></returns>private static string ParseFieldType(esriFieldType FieldType){switch (FieldType){case esriFieldType.esriFieldTypeInteger:return"System.Int32";case esriFieldType.esriFieldTypeOID:return"System.Int32";case esriFieldType.esriFieldTypeDouble:return"System.Double";case esriFieldType.esriFieldTypeDate:return"System.DateTime";default:return"System.String";}}II.属性查询实现模块///<summary>///核⼼属性查询函数///</summary>///<param name="pFtClass"></param>///<param name="pWhereClause"></param>///<returns></returns>public static DataTable Search(IFeatureClass pFtClass, string pWhereClause){//定义过滤器对象IQueryFilter pQueryFilter = new QueryFilter();//设置sql查询语句pQueryFilter.WhereClause = pWhereClause;//设置游标//调⽤.Search⽅法;false表⽰游标到达最后⼀条要素以后不回收//IFeatureCursor Search(IQueryFilter filter, bool Recycling);IFeatureCursor pFtCursor = pFtClass.Search(pQueryFilter, false);//声明⼀个pFt要素并将查询结果中的第⼀条Feature赋值给它IFeature pFt = pFtCursor.NextFeature();//实例化⼀个DataTable内存表对象, ⽤以存储从要素中读取出来的各属性字段值DataTable DT = new DataTable();for (int i = 0; i < pFtCursor.Fields.FieldCount; i++){//构建表结构:字段名和数据类型DataColumn dc = new DataColumn(pFtCursor.Fields.get_Field(i).Name,System.Type.GetType(ParseFieldType(pFtCursor.Fields.get_Field(i).Type)));//字段⽣成完成后添加到DT的列中DT.Columns.Add(dc);}//当pFt不为空, 遍历查询属性值放到DataTable中显⽰while (pFt != null){//遍历查询结果逐个写⼊到DT中DataRow dr = DT.NewRow();//以DT的表结构新建⾏对象for (int i = 0; i < pFt.Fields.FieldCount; i++){dr[i] = pFt.get_Value(i);}//完成某⼀⾏的字段值录⼊后向DT中添加此⾏对象DT.Rows.Add(dr);//指向下⼀个要素pFt = pFtCursor.NextFeature();}return DT;//返回DataTable对象}III.空间查询实现模块///<summary>///核⼼空间查询函数///</summary>///<param name="pFtClass">查询要素类</param>///<param name="pWhereClause">SQL语句</param>///<param name="pGeometry">空间查询范围</param>///<param name="pSpRel">空间关系</param>///<returns></returns>private DataTable SpatialSearch(IFeatureClass pFtClass, string pWhereClause, IGeometry pGeometry, esriSpatialRelEnum pSpRel) {//定义空间查询过滤器对象ISpatialFilter pSpatialFilter = new SpatialFilterClass();//设置sql查询语句pSpatialFilter.WhereClause = pWhereClause;//设置查询范围pSpatialFilter.Geometry = pGeometry;//给定范围与查询对象的空间关系pSpatialFilter.SpatialRel = pSpRel;//查询结果以游标的形式返回(下⾯与属性查询⼀样)IFeatureCursor pFtCursor = pFtClass.Search(pSpatialFilter, false);IFeature pFt = pFtCursor.NextFeature();DataTable DT = new DataTable();for (int i = 0; i < pFtCursor.Fields.FieldCount; i++){DataColumn dc = new DataColumn(pFtCursor.Fields.get_Field(i).Name,System.Type.GetType(ParseFieldType((pFtCursor.Fields.get_Field(i).Type))));DT.Columns.Add(dc);}while (pFt != null){DataRow dr = DT.NewRow();for (int i = 0; i < pFt.Fields.FieldCount; i++){dr[i] = pFt.get_Value(i);}DT.Rows.Add(dr);pFt = pFtCursor.NextFeature();}return DT;}IV.调⽤⽅法、显⽰1、属性查询向ListBox中添加图层字段:///<summary>///获取ComboBox被选定的索引号///</summary>///<param name="sender"></param>///<param name="e"></param>private void cboSelectLayer_SelectedIndexChanged(object sender, EventArgs e){AddFields();}///<summary>///向ListBox中添加图层字段///</summary>private void AddFields(){//清空ListBoxlbShow.Items.Clear();//将pWorkspace强转成要素⼯作空间IFeatureWorkspace pFtWorkspace = pWorkspace as IFeatureWorkspace;//通过要素⼯作空间打开cboSelectLayer选择的图层, 并放在要素类中IFeatureClass pFtClass = pFtWorkspace.OpenFeatureClass(cboSelectLayer.Text);//打开游标, null为查询全部, false表⽰游标到达最后⼀条要素以后不回收IFeatureCursor pFtCursor = pFtClass.Search(null, false);//使⽤for循环逐⼀添加图层字段for (int i = 0; i < pFtCursor.Fields.FieldCount; i++){IField pField = pFtCursor.Fields.get_Field(i); //获取字段的下标lbShow.Items.Add(.ToString());//将字段名加到ListBox中}}获取唯⼀值:///<summary>///获取唯⼀值///</summary>///<param name="sender"></param>///<param name="e"></param>private void btnGetValue_Click(object sender, EventArgs e){lbValue.Items.Clear();//将pWorkspace强转成要素⼯作空间IFeatureWorkspace pFtWorkspace = pWorkspace as IFeatureWorkspace;//通过要素⼯作空间打开cboSelectLayer选择的图层, 并放在要素类中IFeatureClass pFtClass = pFtWorkspace.OpenFeatureClass(cboSelectLayer.Text); //打开游标, null为查询全部, false表⽰游标到达最后⼀条要素以后不回收IFeatureCursor pFtCursor = pFtClass.Search(null, false);//声明⼀个pFt要素并将查询结果中的第⼀条Feature赋值给它IFeature pFt = pFtCursor.NextFeature();//声明index作为下标使⽤int index = 0;//将index赋值为找到选中字段下标index = pFtCursor.FindField(lbShow.Text);//当要素不为空时while(pFt!=null){//如果lbValue中包含要素下标则游标到下⼀个要素, 跳过本次循环if(lbValue.Items.Contains(pFt.get_Value(index))){pFt = pFtCursor.NextFeature();continue;}//将游标的的要素加到lbValue中lbValue.Items.Add(pFt.get_Value(index));//转到下⼀个要素pFt = pFtCursor.NextFeature();}}查询按钮:private void btnSelect_Click(object sender, EventArgs e){//将⼯作空间强转成要素⼯作空间IFeatureWorkspace pFtWorkspace = pWorkspace as IFeatureWorkspace;//通过要素⼯作空间打开cboSelectLayer选择的图层, 并放在要素类中IFeatureClass pFtClass = pFtWorkspace.OpenFeatureClass(cboSelectLayer.Text); try{//调⽤核⼼查询⽅法, 返回类型为DataTableGlobal.myDGV1.DataSource = Search(pFtClass, txtSql.Text.Trim());}catch (Exception ex){MessageBox.Show(ex.Message);}}2、空间查询主视图的OnMouseDown事件:///<summary>///主视图的OnMouseDown事件///</summary>///<param name="sender"></param>///<param name="e"></param>private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e) {//当空间查询的状态为真时if (IsSpatialSearch){//获取精确图层ILayer pLayer = axMapControl1.get_Layer(Get_Layer("北部湾"));//将图层强转成要素图层IFeatureLayer pFtLayer = pLayer as IFeatureLayer;//将要素图层的图层类强转成要素类IFeatureClass pFtClass = pFtLayer.FeatureClass as IFeatureClass;//随着⿏标拖动得到⼀个矩形框IEnvelope pEnvelope = axMapControl1.TrackRectangle();//调⽤核⼼空间查询函数(采⽤空间相交的⽅法esriSpatialRelIntersects)dataGridView1.DataSource = SpatialSearch(pFtClass,"",pEnvelope,esriSpatialRelEnum.esriSpatialRelIntersects);axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);}}获得精确图层名下的index///<summary>///获得精确图层名下的index///</summary>///<param name="LayerName">图层名字</param>///<returns></returns>private int Get_Layer(string LayerName){//遍历主视图的图层for (int i = 0; i < yerCount; i++){//如果图层索引对应的名字和⽤户输⼊的名字相同则返回索引if (axMapControl1.get_Layer(i).Name.Equals(LayerName)){return i;}}return -1;//返回-1}⽤于判断空间查询的状态://⽤于判断空间查询的状态bool IsSpatialSearch = false;谢谢观看!本⼈初学GIS⼆次开发,如果有不对的地⽅,请多多包涵!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于Arcgis10.1 AO的一种查询属性值重复小工具开发实现
作者:王龙赵兴刚
来源:《科技视界》2015年第28期
【摘要】由于土地地块空间数据需要做空间和属性的检查,属性检查中包括属性值重复性检查,涉及包括不同数据类型的字段,根据需求扩展开发后,基于Arcgis10.1下AO组件提供的基础开发接口,实现了属性字段重复值检查与结果显示,在空间数据属性检查中应用范围较大。

【关键词】Arcgis 10.1;AO开发;属性值;重复值检查
【Abstract】Due to the spatial data of land plots need to do examination of spatial and attribute, attribute inspection in the include attribute values to check for reproducibility, including the fields of different data types, according to the expansion and development needs, based on the basis development interface for Arcgis10.1 under the Ao component, the realization of the belongs to the field of duplicate values check and results display. In spatial data attribute inspection application range is larger.
【Key words】Arcgis 10.1; AO development; Attribute value; Repeated values check
0 背景
在地理国情项目、土地类别数据测量与收集整理等项目中,都牵涉到数据质量检查及数据精度检查,其中针对空间成果数据包含一系列检查,同类型质检软件较多[1-7]。

本文依据项目实际需求,依据Arcgis10.1提供的AO组件接口,实现了土地地类空间数据属性表中重复值的检查,开发的初衷是检查地块编码是否输入重复,最终检查出来的结果列表显示,可与地图进行联动,查询结果输出。

本文的程序核心是空间数据属性表重复性检查及相应联动显示、输出,类似于Python脚本的批处理,属于桌面端插件,最终程序扩展到可检查空间数据属性表其它不同数据类型字段。

1 开发的架构
开发的语言为基于VS2010 .net Framework 4平台下C#,二次开发空间插件为Arcgis10.1 A0,使用的数据为赤壁市农村宅基地及集体建设用地使用权调查登记发证项目shp数据,属性字段类型包括了常见的整形和字符串型。

开发的系统为win7 64位旗舰版。

无其它第三方美化插件。

程序的调用采用树状调用的方式,主界面获取子界面的信息及参数,采用委托的方式,如能动态的获取当前所选查重的图层信息。

2 开发的流程与需求
本文的开发流程如下:
①安装Arcgis10.1平台及AO插件、VS2010开发IDE平台,收集并整理测试开发用数据,数据为赤壁地区土地类别面shp文件。

②按照需求,搭建平台,调用合理的接口进行数据的获取使用,编写查重的代码,检查合理性和准确性,实现核心查重功能和相关的功能。

③进行插件的功能测试,使用测试用的数据,进行不同类别的属性字段的测试。

④程序打包使用。

本文插件的主要需求如下:
①导入数据、地图显示数据;
②用户选择相应的图层、相应的字段或输入字段下的需查重的值,最终实现相应选择的字段能够自检查及自定义输入属性值进行排查;
③查询结果的列表显示、属性数据与地图的联动、属性结果数据的导出,设定为excel。

3 查重代码设计
这里的alldt是整个空间数据的属性表单,fieldname是被选择的属性字段,采用了DATATABLE方法下Select的方式,选出每一条数据对应的重复数据,如果有超过一条的数据,则添加到新的表单selcf中,最终selcf被datagridview获取,重新显示到界面上。

而用户输入检查,主要依靠Arcgis10.1 AO接口提供的IQueryFilter查询接口,根据用户输入的值,构建查询SQL语句,将查询结果获取到datagridview控件。

用户选择字段直接查重则先利用Arcgis10.1 AO接口查询到属性表所有值,再根据以上设计的方法进行查重,最后也将结果显示到datagridview控件。

程序的最终实现效果如下图1所示。

插件其它辅助功能包括属性表与地图空间联动,能查询显示对应数据的空间位置,结果输出为excel方便用户保持结果数据,及进行后期修改校对。

4 特点分析
(一)这里的查重代码,也可以采用方便的linq语句查询,不过本质上和datatable.select 下使用sql查询已经相差不大,同样是查询出同属性值的数据。

因为查询的结果都返回datarow 数据。

(二)可扩展行较高,本查询代码即可满足同一图层不同类型的字段重复性检查,又满足用户输入检查,可检查的图层可以是土地面图层以外不同类型图层。

(三)关于Arcgis开发接口的问题,作为桌面的开发接口,AO与AE的存在开发范围区别,以及不同版本Arcgis的接口已有些细微区别,路径发生了变化。

5 总结
基于Arcgis10.1平台AO组件实现了属性查重的功能,属性检查中包括属性字段类型、属性类型长度等检查,本文按照项目实际需要完成了插件的开发,获得了较好的效果,有良好的扩展性,为基础测绘及土地地块空间数据管理检查等项目方面提供了有效的技术支持。

【参考文献】
[1]张岳,陶校君.1:5万DLG更新中的数据处理与检查[J].浙江测绘,2007(2):43-44.
[2]卓云,何政伟,赵银兵.基于COM-GIS的软件模版快速搭建及应用[J].地理空间信息,2012,10(4):105-106.
[3]张雅彬,孙在宏,吴长彬.基于GIS的土地利用总体规划管理信息系统的开发与研究[J].南京师大学报自然科学版,2004,2:107-110.
[4]朱道强,关海涛.Python在ArcGIS中的应用[J].测绘与空间地理信息,2013,36(7):152-154.
[5]占伟,武艳强,刘志广.GAMIT/GLOBK数据自处理程序的应用[J].测绘科学,2009
(S1):46-47.
[6]肖泽云,陶光贵.基于ArcGIS的地籍管理信息系统的设计与实现[J].灾害与防治工程,2009,2:29-32.
[7]孙丽,高飞,胡小华.ArcEngine插件式GIS二次开发框架的设计与实现[J].测绘科学,2011,5:214-216.
[责任编辑:杨玉洁]。

相关文档
最新文档