
ArcEngine
HerryDong
保持学习
展开
-
ArcEngine提取面要素公共边的实现方法
很久没写ArcEngine的内容了,正好这次有同志提了一个问题:如何用ArcEngine实现批量提取面要素之间的公共边?捣鼓了半天总算是解决了,下面就来说一说解决思路。本文主要介绍了ArcEngine中提取公共边的实现方法。其实对于第二种方法,即:利用空间关系和拓扑工具提取公共边,我个人是不太满意的,因为这是纯粹的暴力解法,数据量一旦较多,效率肯定是个大问题。可惜不知道ESRI是怎么实现的,有了解的同志也可以讲讲这个问题最优的解决方法是什么。原创 2024-08-19 09:09:25 · 458 阅读 · 0 评论 -
ArcEngine编辑模块——构造平行线的方法
1、前言在ArcEngine中,平行线的构造主要使用IConstructCurve接口实现,如果你想在生成平行线的同时对平行线的拐点进行一些特殊处理,那就需要使用IConstructCurve4接口,下面开始介绍。2、构造一般平行线构造一般平行线需要使用IConstructCurve接口的ConstructOffset方法,代码如下:using ESRI.ArcGIS.ADF.BaseClasses;using ESRI.ArcGIS.ADF.CATIDs;using ESRI.ArcGIS.C原创 2021-11-30 00:34:59 · 930 阅读 · 0 评论 -
ArcEngine编辑模块——将线段按距离、按比例分割成N条线段
1、前言前面一篇博客介绍了如何按距离或按比例将1条线段分成2条线段的方法,核心就是利用IFeatureEdit接口的Split方法进行分割。但就像之前说的,该方法只适用于将1条线段分成2条线段,如果我们希望将1条线段分成n条线段(n >= 2),那又该怎么做呢?下面开始介绍。2、获取分割点假设有一条长度为100米的线段,现在按照30米的距离间隔对其进行分割,那么就会得到如下图所示的结果,线段被A、B、C三个分割点分成了4份,现在第一个问题来了:如何获取这些分割点?其实这个问题很简单,在IPo原创 2021-11-27 22:49:27 · 1592 阅读 · 7 评论 -
ArcEngine编辑模块——将线段按距离、按比例分割成两部分
1、前言在ArcEngine中,线段的分割主要使用IFeatureEdit接口的Split方法实现。需要注意的是:该方法只能将1条线段按距离或按比例分割成 2条线段,关于如何将1条线段分成n条线段(n >= 2)的方法我会在下一篇博客介绍,下面给出实现代码。2、线段分割2.1、主界面代码using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.SystemUI;using System;using System.Windows.Forms;using W原创 2021-11-27 19:04:54 · 884 阅读 · 0 评论 -
ArcEngine编辑模块——批量删除要素
1、前言在ArcEngine中,删除要素的方法有很多,你可以使用IFeatureCursor或ITable查询出部分要素然后依次删除。但这两个接口只能针对单个图层的要素进行删除,而在编辑状态下,我们可能一次选中了多个图层下的多个要素,这时候就得使用IFeature接口的Delete方法进行操作,下面给出实现代码。2、删除要素2.1、主界面代码using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.SystemUI;using System;using Syst原创 2021-11-27 16:01:29 · 2180 阅读 · 3 评论 -
ArcEngine编辑模块——批量旋转要素
1、前言在ArcEngine中,要素的批量旋转可以使用IFeatureEdit实现,下面给出实现代码。2、旋转要素2.1、主界面代码using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.SystemUI;using System;using System.Windows.Forms;using WindowsFormsApplication1.Command;namespace WindowsFormsApplication1{ public原创 2021-11-26 20:25:22 · 893 阅读 · 0 评论 -
ArcEngine实现运动轨迹的播放
1、前言在ArcEngine中,轨迹播放的实现方法很简单:创建一个定时器Timer在定时器的Tick事件中绘制IElement我这里做了一个例子,效果如下图所示:2、实现方法using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Display;using ESRI.ArcGIS.Geodatabase;using ESRI.ArcGIS.Geometry;using System;using System.Windows.Forms;namesp原创 2021-11-25 23:09:49 · 977 阅读 · 10 评论 -
ArcEngine编辑模块——创建要素
1、前言在ArcEngine中,创建要素一般分为两部分,即:设置空间信息、设置属性信息。下面给出实现代码。2、定义实体类首先在ArcMap中创建一个点文件,其属性字段如下表所示:字段名称字段类型FID整型Shape几何Longitude(经度)双精度Latitude(纬度)双精度SchoolName(学校名称)文本SchoolType(学校类型)文本根据该属性表创建一个实体类——SchoolModel,代码如下:using Sys原创 2021-11-23 21:16:10 · 2027 阅读 · 9 评论 -
ArcEngine编辑模块——移动多个要素的实现方法
1、前言前一篇博客介绍了在ArcEngine中移动单个要素的实现方法,这篇博客来介绍一下如何移动多个要素。移动多个要素需要使用IMoveGeometryFeedback接口,下面给出实现方法。2、移动多个要素跟上一篇博客一样,首先搭建一个如下图所示的界面:2.1、主界面代码using System;using System.Windows.Forms;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.SystemUI;using EditApp.C原创 2021-11-19 22:51:52 · 1118 阅读 · 0 评论 -
ArcEngine编辑模块——移动单个要素的实现方法
1、前言在ArcEngine中,移动单个点、线、面要素主要使用以下三个接口:IMovePointFeedbackIMoveLineFeedbackIMovePolygonFeedback需要注意的是:这三个接口每次只能移动一个要素,要素的批量移动将会在下篇博客给出实现方法。2、移动单个面要素以移动单个面要素为例,首先构建如下图所示的界面:2.1、主界面代码using System;using System.Windows.Forms;using ESRI.ArcGIS.Contr原创 2021-11-18 23:39:26 · 1104 阅读 · 0 评论 -
ArcEngine图层标注
1、前言在ArcEngine中,图层标注用的还是很多的,下面就来介绍一下ArcEngine中的标注功能。首先准备一份面要素文件,其属性表如下图所示:2、图层标注2.1、基本标注基本标注可以利用ITextSymbol接口实现,代码如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Li原创 2021-04-29 23:17:27 · 2099 阅读 · 2 评论 -
ArcEngine导出地图
1、前言在利用ArcEngine导出地图的时候,一般有两种情况:全图导出和区域导出,下面分别介绍两种导出地图的方法。首先搭建如下图所示的界面:2、全图导出2.1、利用IPrintAndExport接口using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Display;using ESRI.ArcGIS.Output;using System;using System.Text;using System.Windows.Forms;namespace W原创 2021-04-25 19:32:12 · 2364 阅读 · 1 评论 -
ArcEngine符号化——填充符号选择器
1、前言最后来介绍一下填充符号选择器,如下图所示:在开发填充符号选择器的时候有一个小坑需要注意:有两个填充符号的填充色为无颜色,即颜色为空。如下图所示:2、实现代码2.1、主界面代码using System.Windows.Forms;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.Geometry;namespace Win{ public partial class frmMain原创 2021-04-20 19:45:44 · 1312 阅读 · 0 评论 -
ArcEngine符号化——线符号选择器
1、前言这篇博客来实现一个如下图所示的线符号选择器,由于前面已经介绍过点符号选择器的实现了,所以这里就直接贴代码了。2、实现代码2.1、主界面代码using System.Windows.Forms;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.Geometry;namespace Win{ public partial class frmMain : Form {原创 2021-04-20 18:18:20 · 621 阅读 · 0 评论 -
ArcEngine符号化——点符号选择器
1、前言前面的博客介绍了在ArcEngine中如何创建各类符号,但是回顾一下ArcMap中的操作,你肯定会想:一个一个创建符号实在是太过麻烦,如果有一个符号选择器供我们使用就好了。这篇博客就来介绍一下如何创建一个如下图所示的点符号选择器。2、符号样式文件对于ArcEngine来说,它是不能直接使用ArcMap中的符号库的,它能使用的是一种后缀名为*.ServerStyle的文件。以我的电脑为例,我将ArcGIS安装在了C:\Program Files (x86)\目录下,则ServerStyle文件原创 2021-04-19 22:13:05 · 2355 阅读 · 0 评论 -
ArcEngine符号化——文本符号
1、前言在ArcEngine中,文本符号主要用于设置IElement的样式,涉及到的接口为ITextSymbol,下面开始介绍。2、实现代码demo的主要功能为:在PageLayoutControl中添加一个地图标题,代码如下:using System;using System.Windows.Forms;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Display;using stdole;using ESRI.ArcGIS.Geodatabase;原创 2021-04-18 22:04:43 · 894 阅读 · 0 评论 -
ArcEngine符号化——点密度符号
1、前言这篇博客主要介绍一下点密度填充。准备一份面要素数据,其属性表如下图所示:下面我们会使用A和B这两个值类型字段来实现点密度符号化。2、实现代码using System;using System.Windows.Forms;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Display;using stdole;using ESRI.ArcGIS.Geodatabase;namespace Win{ public partial cl原创 2021-04-18 21:25:59 · 676 阅读 · 0 评论 -
ArcEngine符号化——填充符号
1、前言这篇博客来介绍一下ArcEngine中的填充符号。填充符号一般有简单填充、点填充、线填充等等,有一类特殊的点密度填充将在下一篇博客介绍。2、常用的填充符号2.1、简单填充符号2.2、点填充符号2.3、线填充符号2.4、叠加填充符号2.5、图片填充符号2.6、渐变填充符号3、实现代码using System;using System.Windows.Forms;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Display;usin原创 2021-04-18 21:18:06 · 1556 阅读 · 0 评论 -
ArcEngine符号化——线符号
1、前言在ArcEngine中,线要素的符号有很多种,如简单线、制图线、离散线、点线等等,下面开始介绍。2、常用的线符号2.1、简单线符号2.2、离散线符号2.3、制图线符号2.4、点线线符号2.5、叠加线符号2.6、图片线符号3、实现代码using System;using System.Windows.Forms;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Display;using stdole;using ESRI.A原创 2021-04-18 19:57:24 · 1413 阅读 · 0 评论 -
ArcEngine符号化——统计图表符号
1、前言前一篇博客介绍了如何在ArcEngine中对点状要素进行符号化的方法,而在某些特殊的情况下,我们需要使用点状符号对面状要素进行符号化,也就是本篇要介绍的统计图表符号化。2、数据准备当前有一份面数据,其属性字段表如下图所示:下面我们使用A和B这两个字段对该面要素进行统计图表符号化。3、统计图表符号3.1、柱状图符号3.2、饼状图符号3.3、堆积图符号4、实现代码using System;using System.Windows.Forms;using ESRI.ArcG原创 2021-04-18 16:53:07 · 1019 阅读 · 0 评论 -
ArcEngine符号化——点符号
1、前言在GIS系统的开发过程中,地图符号化其实是非常重要的一块内容。ArcEngine为我们提供了很多种符号样式,现在就来介绍一下ArcEngine中的点状符号。2、常用的点符号2.1、简单符号2.2、箭头符号2.3、叠加符号2.4、字符标记符号2.5、图片符号3、实现代码using System;using System.Windows.Forms;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Display;using stdole原创 2021-04-17 23:01:55 · 4280 阅读 · 0 评论 -
ArcEngine子类型字段的操作
先来了解一下什么是ArcGIS中的子类型字段。新建一个要素类,名称为道路,其字段如下图所示:其中Type为长整型字段,用以标识道路的类别。现在我们选择该要素类,单击右键,弹出界面后选择子类型选项卡,如下图所示:子类型字段选择Type,然后添加国道、省道、县道、乡道这四个字类型,点击确定即可。下面开始编辑该要素类,可以发现图层列表和编辑框内已经将该要素类分为四类,如下图所示:其实在设置...原创 2020-04-22 22:02:57 · 1495 阅读 · 0 评论 -
ArcEngine字段属性域的操作
首先来了解一下什么是ArcGIS中的属性域。假设现在要在文件里地数据库中新建一个道路要素类,其属性字段如下图所示:其中,Name表示道路名称,Width表示道路宽度,Type表示道路类型。按照一般常识,道路的宽度肯定是在一定范围内的,不太可能出现宽度为1000米的道路。同样的,道路的类别也是有限的,无非就是国道、省道、县道等等。因此在对道路要素进行编辑时,我们需要对其中的部分字段做出一定约束,...原创 2020-04-22 21:10:30 · 1314 阅读 · 2 评论 -
ArcEngine修改要素类字段别名
对于Geodatabase中的要素类,我们可以对它们的字段别名进行修改。下图为数据库中某要素类的属性表:我们现在将Name修改为Name_1,Code修改为Code_1,代码如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Syste...原创 2020-04-22 19:29:31 · 1410 阅读 · 2 评论 -
ArcEngine根据属性分割要素类的实现方法
在做数据处理时,我们经常遇到的一个问题就是分类问题,如下图所示,现有一份中国各省、自治区、直辖市的shp文件,现在要求根据Name字段将该shp文件分割成多个shp文件,每个shp文件代表一个省、自治区或直辖市。熟悉ArcGIS的同志应该清楚,在ArcToolbox工具箱下有一个分割工具可以帮我们实现该功能,如下图所示:其实在ArcEngine中我们也可以实现这一功能,核心接口为IFea...原创 2020-04-21 18:31:54 · 1004 阅读 · 1 评论 -
ArcEngine实现伸缩变换、平移变换、旋转变换的方法
初中的时候就学过几何图形的伸缩、平移、旋转变换。在ArcEngine中,我们也可以借助ITransform2D接口实现IGeometry的伸缩、平移、旋转变换。先来看一下效果图:代码如下:using System;using System.Collections;using System.Collections.Generic;using System.ComponentModel;...原创 2020-04-21 00:57:44 · 1787 阅读 · 0 评论 -
ArcEngine中的空间参考操作代码
GIS中的坐标系一般分为地理坐标系和投影坐标系。地理坐标系就是用经纬度来表示位置,投影坐标系则是按照一定的数学规则,将球体投影到平面上,一般用X、Y表示位置,单位为米。若要进行投影转换,如果转换前和转换后的空间参考是基于同一参考椭球体,则可在ArcGIS中直接进行转换,如果转换前和转换后的空间参考基于不同的参考椭球体,则首先需要计算七参数,然后才能在ArcGIS中进行转换。下面是ArcEngine...原创 2020-04-20 21:32:16 · 1640 阅读 · 0 评论 -
ArcEngine中的叠置分析
对于叠置分析,想必用过ArcGIS的同志应该都很了解。ArcGIS的工具箱提供了各种叠置分析的工具,如下图所示:那么在ArcEngine中该如何实现叠置分析呢?其实ArcEngine已经给我们提供了IBasicGeoprocessor接口来实现叠置分析,下面就以求两个图层的相交部分来进行说明。测试数据叠置分析代码如下:using System;using System.Collec...原创 2020-04-19 19:40:29 · 3632 阅读 · 9 评论 -
ArcEngine实现多边形内部的挖洞操作
在一般的数据编辑流程中,有些时候可能会涉及到多边形内部的挖洞操作。在ArcEngine中,一般可以通过两种方式实现挖洞操作。一种是叠置分析,这主要是针对图层与图层之间的操作,我会在后续的博客中进行介绍,另一种则是用户自己绘制多边形实现挖洞操作,这主要是利用ITopologicalOperator接口进行实现。先来看一下效果图:代码如下:using System;using System.C...原创 2020-04-19 18:51:51 · 874 阅读 · 0 评论 -
ArcEngine获取字段唯一值的三种方法
在做GIS数据处理时,我们经常需要获取某个字段的唯一值。我在这里总结了三种方法,下面分别进行说明。方法一:读取表记录这种方法就是逐条读取记录,然后选用合适的数据结构进行查重,它的好处就在于:不必去考虑数据源是shp还是geodatabase,代码如下:using System;using System.Collections;using System.Collections.Generi...原创 2020-04-18 22:50:26 · 3232 阅读 · 0 评论 -
ArcEngine实现要素类排序的四种方法
ArcEngine的排序方法有多种,下面介绍一下主要的四种方法。准备数据测试数据如下图所示:新建一个Geodatabase的要素类,其中Name为道路名称,Width为道路宽度,下面将根据Width字段进行倒序排序。方法一:IQueryFilterDefinition接口利用IQueryFilterDefinition接口我们可以定义排序语句,代码如下:using System;us...原创 2020-04-18 20:31:02 · 1456 阅读 · 2 评论 -
ArcEngine实现IElement元素的编辑
目前市面上的ArcEngine教程一般只会介绍shp、geodatabase等数据的编辑操作,基本不会涉及IElement的编辑操作。举个例子,当你在ArcMap中添加一个指北针或比例尺的时候,你可以利用鼠标动态更改它们的大小及位置,其实在ArtcEngine中也可以实现类似操作,先给大家看看效果:主界面代码using System;using System.Collections.Gen...原创 2020-04-13 01:39:30 · 2074 阅读 · 1 评论 -
ArcEngine线分割面的实现方法
在一般的GIS数据编辑中,利用线分割面是常见的一项操作。很多同志不清楚如何在ArcEngine实现这一功能,其代码写得无比复杂。其实ArcEngine给我们提供了一个接口:IFeatureConstruction,利用这个接口可以轻松完成线分割面的操作。下面给出示例代码。情况一:利用选中的线要素分割面要素如下图所示:当前选择了两条线要素,我希望用这两条选中的线对面进行分割,这种情况在编辑流程中...原创 2020-04-08 20:12:38 · 2238 阅读 · 1 评论 -
ArcEngine中的仿射变换
用过CAD的同志应该清楚,在CAD中可以指定对称轴,然后根据对称轴生成镜像,ArcEngine中也可以进行类似操作,如下图所示:代码如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using Syst...原创 2020-04-07 21:33:59 · 436 阅读 · 0 评论 -
ArcEngine创建平头缓冲区的方法
好久没写ArcEngine了,今天有人问我怎么在ArcEngine里生成平头缓冲区。这个问题其实很简单,图省事的话调用GP就能做,但对我个人来说,除非是到了万不得已的情况下,否则我绝不会用GP来做。ArcEngine中有一个接口IBufferConstruction,看这个接口的名字就知道它是用来构造缓冲区的,下面给出创建平头缓冲区、圆角缓冲区、单边缓冲区的代码:using System;us...原创 2020-04-07 20:27:23 · 1106 阅读 · 3 评论 -
ArcEngine绘制点、线、多边形、矩形、圆形、椭圆的代码
熟悉ArcGIS的同志应该知道在ArcMap中编辑shp文件时,我们可以绘制点、线、多边形、矩形、圆形、椭圆等几何图形。其实在ArcEngine中也可以实现同样的功能,我们可以利用INewLineFeedback等接口实现不同几何图形的绘制。我在这里做了一个demo,界面如下图所示:1、绘制点using System;using System.Drawing;using System.R...原创 2020-01-17 23:17:05 · 5542 阅读 · 1 评论 -
ArcEngine实现要素属性表分页查询
用过ArcGIS的同志应该都知道它的属性表分页功能,如下图所示:这次我也照葫芦画瓢,自己做了一个ArcEngine + DevExpress的分页Demo,效果如下图所示:MainForm.cs代码:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;...原创 2020-01-16 02:39:31 · 1419 阅读 · 3 评论 -
ArcEngine将高版本MXD文档保存为低版本MXD文档的方法
读大学的时候,班里有些同学装的是ArcGIS10.0,有些是10.1,我则是安装了10.2,这就导致我做的MXD文档别人用不了。下面来说一下ArcEngine中如何将高版本的MXD文档保存为低版本的MXD文档,我这里的用的是ArcEngine 10.4,代码如下:using System;using System.Collections.Generic;using System.Compon...原创 2019-12-23 21:46:13 · 3301 阅读 · 0 评论 -
ArcEngine调整栅格图层的透明度、对比度、亮度
ArcEngine中主要是用ILayerEffects接口对栅格图层的透明度、对比度、亮度进行调整,其中透明度的取值范围为0-100,对比度和亮度的取值范围为-100-100,代码如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Syst...原创 2019-12-12 20:24:09 · 1379 阅读 · 1 评论 -
ArcEngine加载栅格数据
一直以来对栅格数据接触较少,曾经大二的时候用ERDAS做过监督分类和蓝藻提取,后来接触了GIS开发也就没再做过了,不过现在还是准备探索一下ArcEngine针对栅格数据的相关操作。既然数据是GIS的血液,那就从加载栅格数据开始吧。栅格数据大致分为两种形式进行存储:一种是以文件的形式存储,例如TIFF文件,另一种则是存储在地理数据库中。在ArcEngine中,IRasterWorkspace接口用于...原创 2019-12-11 21:10:34 · 3248 阅读 · 0 评论