缓冲分析(BufferAnalysis)的结果是一个面状要素——即缓冲要素,点状要素、线状要素和面状要素,被缓冲分析功能处理过之后,它们的周围产生一个缓冲区域,该区域即新产生的面状要素。

在缓冲方向上,点状要素和线状要素只能进行向外缓冲,面状要素可以双向缓冲——向外缓冲和向内缓冲。

在ArcGIS Engine中,缓冲分析由ITopologicalOperator.Buffer(double Distance)来实现,函数的返回值为IGeometry(表5-12)。其中,输入的参数为正时向外缓冲,为负时向内缓冲。

缓冲分析实现的基本思路为:

1、设置缓冲距离

2、调用ITopologicalOperator.Buffer()方法生成缓冲区

3、向axMapControl中添加缓冲区。

//
// 摘要:
// Constructs a polygon that is the locus of points at a distance less than or equal
// to a specified distance from this geometry.
// 构造一个多边形,该多边形是距离此几何体小于或等于指定距离的点的轨迹。
IGeometry Buffer(double distance);

(1)Buffer方法的参数
Bulfer方法仅携带了唯一的一个参数:distance,它用以设置缓冲的距离。输入的数字为正时向外缓冲;为负时向内缓冲(仅面状对象)。

(2)Buffer功能的基本思路
Buffer方法并没有产生新的要素类(Feature Class),因为Buffer方法的返回值为lGeometry,仅为要素的几何形状,不携带任何要素属性特征。

所以说,在ArcGIS Engine中,Buffer方法并不能直接产生一个缓冲结果的要素对象。

显示了触发Bufer按钮事件,如图所示:

缓冲区分析函数:BufferArea(double BuffDistance)

/// <summary>
/// 缓冲区分析函数
/// </summary>
/// <param name="BuffDistance">缓冲区距离</param>
private void BufferArea(double BuffDistance)
{
//以主地图为缓冲区添加对象
IGraphicsContainer graphicsContainer = axMapControl1.Map as IGraphicsContainer;
//删除之前存留的所有元素
graphicsContainer.DeleteAllElements();
//选中索引值为0的图层
ILayer layer = axMapControl1.get_Layer();
//此循环用于查找图层名为LayerName的图层索引
/*
ILayer layer = null;
for (int i = 0; i < axMapControl1.LayerCount; i++)
{
if (axMapControl1.get_Layer(i).Name.Equals("Layer-Name"))
{
layer = axMapControl1.get_Layer(i);
break;
}
}
*/
//将图层名为LayerName的图层强转成要素选择集
IFeatureSelection pFtSel = (IFeatureLayer)layer as IFeatureSelection;
//将图层名为LayerName的图层中的所有要素加入选择集
pFtSel.SelectFeatures(null, esriSelectionResultEnum.esriSelectionResultNew, false); ICursor pCursor;
//获得遍历选择集中所有要素的游标
pFtSel.SelectionSet.Search(null, false, out pCursor);
IFeatureCursor pFtCursor = pCursor as IFeatureCursor;
IFeature pFt = pFtCursor.NextFeature();
//遍历所有选择集中的所有要素, 逐个要素地创建缓冲区
while (pFt != null)
{
//将要素的几何对象(pFt.Shape)强转成ITopologicalOperator
//pFt.Shape即为创建缓冲区的操作对象
ITopologicalOperator topologicalOperator = pFt.Shape as ITopologicalOperator;
//注意: BuffDIstance输入为正时向外缓冲, 为负时向内缓冲
IPolygon polygon = topologicalOperator.Buffer(BuffDistance) as IPolygon;
//实例化要素以装载缓冲区
IElement element = new PolygonElement();
//将几何要素赋值为多边形
element.Geometry = polygon;
//逐个显示
graphicsContainer.AddElement(element, );
//指向下一个
pFt = pFtCursor.NextFeature();
}
//这里清除选择集, 以免高亮显示的要素与缓冲结果相互混淆
pFtSel.Clear();
//刷新axMapControl1
axMapControl1.Refresh();
}

核心缓冲分析函数总结:

谢谢观看!本人初学GIS二次开发,如果有不对的地方,请多多包涵!

ArcGIS Engine空间分析之缓冲区分析的实现的更多相关文章

  1. ArcGIS Engine空间分析之拓扑分析的实现

    简单介绍: 拓扑学是一门研究几何图形位置关系的科学. GIS所关注的拓扑主要集中在拓扑关系——存在于地理实体间的拓扑关系. 拓扑关系在GIS中起着描述两个地理实体的相对空间位置的重要作用.它是GIS空 ...

  2. ArcGIS Engine空间查询功能的实现(QueryFilterClass+SpatialFilterClass)

    地图中包含大量的信息,为了快速地了解所需信息,必须借助为空间数据专门编写的空间查询功能. 空间查询主要有两种类型: 基于属性的查询,也称为属性查询. 基于空间位置的查询,也称为空间查询. 查询类的基本 ...

  3. AE二次开发中几个功能速成归纳(符号设计器、创建要素、图形编辑、属性表编辑、缓冲区分析)

    /* * 实习课上讲进阶功能所用文档,因为赶时间从网上抄抄改改,凑合能用,记录一下以备个人后用. * * ----------------------------------------------- ...

  4. ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区

    原文:ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 使用ArcGIS进行空间分析 1.1 GIS分析基础 G ...

  5. ArcGIS API for JavaScript 4.2学习笔记[26] 缓冲区分析【基于geometryEngine工具类】

    要说GIS空间分析最经典的例子,就是缓冲区分析了. 本例使用geometryEngine来绘制缓冲区环.因为官方给的例子有3D和2D场景,所以就会显得比较复杂. 当鼠标在视图上点击时,就会生成一个缓冲 ...

  6. ArcGIS Engine开发之旅09--几何对象和空间参考

    原文:ArcGIS Engine开发之旅09--几何对象和空间参考 1.Geometry  Geometry 是 GIS 中使用最为广泛的对象集之一,用户在创建.删除.编辑和进行地理分析的时候,就是处 ...

  7. 使用python制作ArcGIS插件(6)案例分析

    利用ArcPy制作航空制图插件 By 李远祥 这是笔者两年多前写的一个面向航路图做的一个插件,基本上将航路图的制作进行流程化,制作成为可交互的插件,只要有航路和机场的信息,就可以直接生成一个航路图,每 ...

  8. geotrellis使用(十)缓冲区分析以及多种类型要素栅格化

    目录 前言 缓冲区分析 多种类型要素栅格化 总结 参考链接 一.前言        上两篇文章介绍了如何使用Geotrellis进行矢量数据栅格化以及栅格渲染,本文主要介绍栅格化过程中常用到的缓冲区分 ...

  9. 基于ArcGIS for Server的服务部署分析 分类: ArcGIS for server 云计算 2015-07-26 21:28 11人阅读 评论(0) 收藏

    谨以此纪念去年在学海争锋上的演讲. ---------------------------------------------------- 基于ArcGIS for Server的服务部署分析 -- ...

随机推荐

  1. springboot 集成druid

    1.druid简介 Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBo ...

  2. 【转+】python为什么推荐使用多进程

    最近在看Python的多线程,经常我们会听到老手说:“Python下多线程是鸡肋,推荐使用多进程!”,但是为什么这么说呢?                要知其然,更要知其所以然.所以有了下面的深入研 ...

  3. C# 服务里面调用Python.exe 来执行python文件

    问题描述:在WCF服务里面通过调用python.exe来执行py文件,像下面这样py文件路径+参数,用空格隔开.会出现调用结果为空的现象 System.Diagnostics.ProcessStart ...

  4. CSS技巧(1)· CSS渐变 linear-gradient

    前言: 不论在网页设计中,还是传统的媒介中,各种尺寸,颜色,角度的图案在视觉中无处不在,要想在网页中实现复杂的图案,其过程往往不够理想,过去,我们可以创建一个单独的位图文件,然后每次需要做调整的时候, ...

  5. vue-cli 脚手架安装

    1.安装node;选择适合自己系统的文件,下载一路next , a安装成功后,打开运行输入cmd 进入命令行: 在命令行工具中输入 npm -v  检查版本号 如果出现 则安装成功:(npm为node ...

  6. Python3 GUI开发(PyQt)安装和配置

    Python3 GUI开发(PyQt5)安装和配置: 下载安装好Miniconda3, 并且安装好jupyter 注意:最好关闭360杀毒软件或者把cmd加入信任,否则运行activate会有问题. ...

  7. linux shell 统计当前目录下的文件个数

    shell 统计当前目录下文件个数,使用管道组合命令: ls -1 | wc -l 解释: ls -1 表示一行一个列出文件名. wc -l 表示打印统计的行数. 两个命令通过管道连在一起表示打印列出 ...

  8. .Net Core删除ClientApp目录,重新生成报错解决办法

    因为在老的项目上做修改,需要删除单独的spa目录,就把ClientApp删掉了.但是重新生成报错,在VS2017界面上也没找到在什么地方配置.最后发现在csproj上里面可以去掉spa的配置 < ...

  9. Web Storage和cookie的区别——每日一题20190629

    Web Storage? 使用HTML5可以在本地存储用户的浏览数据. 使用的主要目的是为了克服Cookie带来的一些限制,当数据需要被严格控制在客户端上时,无需持续的将数据发回服务器 主要目标: 1 ...

  10. 使用低版本的VS打开高版本项目的解决方案(以VS2008打开VS2010开发的项目为例)

    使用低版本的VS打开高版本项目的解决方案,这里以VS2008打开VS2010开发的项目为例. 右键项目的sln文件以记事本的方式打开: 将对应的前两列版本各降到对应的版本,这边的11.00改为10.0 ...