利用Arcengine的GP工具实现缓冲区分析功能
来源:互联网 发布:pps网络电视在线观看 编辑:程序博客网 时间:2024/06/03 23:04
在项目中经常会用到缓冲区分析这个功能,首先想用ENGINE的GP工具必须了解GIS里面的相应功能,在利用GIS做缓冲区时,会让操作者输入要建立缓冲区的图层和输出的路径,先知道这是必须的,其他的先不讨论,大概这这个样子,
首先在窗体上有一个Button按钮,点击事件,
private void BufferButtonItem_ItemClick(object sender, ItemClickEventArgs e)
{
Frm3BufferAnalytics frmBuffer = new Frm3BufferAnalytics();
frmBuffer.GetFpList = GetFeatureLayerList();
frmBuffer.ShowDialog();
}
出现如下窗体,
点击上面的“确定”按钮
private void simpleButton1_Click(object sender, EventArgs e)
{
double bufferDistance;
double.TryParse(txtBufferDistance.Text, out bufferDistance);
if (0.0 == bufferDistance)
{
MessageBox.Show("缓冲距离不可为0!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
if (pFeatureLayers==null||pFeatureLayers.Count == 0)
{
MessageBox.Show("没有图层!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
IFeatureLayer layer = GetFeatureLayer((string)comboBoxEdit1.Text);
if (layer == null)
{
return;
}
Geoprocessor gp = new Geoprocessor();
gp.OverwriteOutput = true;
//create a new instance of a buffer tool
ESRI.ArcGIS.AnalysisTools.Buffer buffer = new ESRI.ArcGIS.AnalysisTools.Buffer(layer, this.OutputPath, Convert.ToString(bufferDistance) + " " + (string)comboBoxEdit2.EditValue.ToString());
//ESRI.ArcGIS.AnalysisTools.Buffer buffer = new ESRI.ArcGIS.AnalysisTools.Buffer(layer, this.OutputPath, "100"+" "+"Meters" );
buffer.dissolve_option = "ALL";//这个要设成ALL,否则相交部分不会融合
buffer.line_side = "FULL";//默认是"FULL",最好不要改否则出错
buffer.line_end_type = "ROUND";//默认是"ROUND",最好不要改否则出错
//execute the buffer tool (very easy :-))
IGeoProcessorResult results = null;
try
{
results = (IGeoProcessorResult)gp.Execute(buffer, null);
MessageBox.Show("缓冲区建立成功!");
}
catch (Exception ex)
{
MessageBox.Show("缓冲区建立失败!");
// txtMessages.Text += "Failed to buffer layer: " + layer.Name + "\r\n";
}
}
上个事件里面涉及的方法,这个是获得所选择的图层。
private IFeatureLayer GetFeatureLayer(string selectedItem)
{
IFeatureLayer pFeatureLayer = null;
foreach (IFeatureLayer item in pFeatureLayers)
{
if (item.Name == selectedItem)
{
pFeatureLayer = item;
break;
}
}
return pFeatureLayer;
}
这个方法是最上面主窗体上面的方法
private List<IFeatureLayer> GetFeatureLayerList()
{
List<IFeatureLayer> plist = new List<IFeatureLayer>();
GetLayerHelper pHelper = new GetLayerHelper();
List<ILayer> pLayerList = pHelper.GetFeatureLayerList(this.MapCtl.ActiveView.FocusMap);
foreach (ILayer item in pLayerList)
{
IFeatureLayer pFeatureLayer = item as IFeatureLayer;
plist.Add(pFeatureLayer);
}
return plist;
}
大家想要弄明白可以仔细的观察一下,
在这个窗体里面,定义入下的属性
public partial class Frm3BufferAnalytics : Form
{
List<IFeatureLayer> pFeatureLayers = new List<IFeatureLayer>();
public List<IFeatureLayer> GetFpList
{
set { this.pFeatureLayers = (List<IFeatureLayer>)value; }
get { return this.pFeatureLayers ;}
}
还有一个方法是获得地图上的图层对象,GetFeatureLayerList()
public List<ILayer> GetFeatureLayerList(IMap pMap)
{
List<ILayer> myLayers = new List<ILayer>();
UID layerFilter = new UIDClass();
layerFilter.Value = "{40A9E885-5533-11d0-98BE-00805F7CED21}";
IEnumLayer pEnumLayer = pMap.get_Layers(layerFilter, true);
pEnumLayer.Reset();
ILayer pLayer = pEnumLayer.Next();
while (pLayer != null)
{
myLayers.Add(pLayer);
pLayer = pEnumLayer.Next();
}
return myLayers ;
}
以上就是整个Engine调用GP工具进行缓冲区分析的全部代码。
- 利用Arcengine的GP工具实现缓冲区分析功能
- ArcEngine调用GP工具实现多边形Clip裁剪功能
- C#+arcengine调用GP工具实现feature to line 功能
- C#+arcengine调用GP工具实现产生随机点的功能
- C#+arcengine调用GP工具实现extract values to points的功能(可以用来高程)
- ArcEngine GP工具——Summary Statistics(汇总统计)功能的实现
- c# 调用ArcEngine的GP工具
- C#+Arcengine实现GP工具中Data Management Tool》raster》raster processing中的clip功能(矢量数据对栅格数据的裁剪)
- ArcEngine GP工具使用实例
- ArcEngine利用ITopologicalOperator实现裁剪功能
- ArcEngine利用ITopologicalOperator实现裁剪功能
- ArcEngine开发之缓冲区分析实现(C#)
- ArcEngine 调用GP样条插值工具,出错
- ArcEngine调用GP工具传入参数心得
- ArcEngine调用GP工具传入参数心得
- C#+Arcengine实现GP工具中的extract by mask(提取掩膜),可以实现提取shp范围的栅格数据,可用来获得shp范围的高程
- 自定义View利用缓冲区实现绘画板功能
- 利用Python分析GP服务运行结果的输出路径 & 实现服务输出路径的本地化
- 筛法求素数
- Javascript(一)-11-(JS语句-其他语句)
- 汉诺塔实现
- 数据结构与算法分析——最大的子序列和问题
- android 构建GPS Provide步骤及信息
- 利用Arcengine的GP工具实现缓冲区分析功能
- LeetCode---Remove Duplicates from Sorted Array II
- PHP isset()与empty()的使用区别详解
- iOS项目开发实战——制作视图的旋转动画
- 安卓 NDK JNI 使用(一) -- 环境配置(AS NDK cygwin)
- Javascript(一)-12-(JS语句-练习-九九乘法表)
- 对象实例化过程
- 怎样制作几何画板中的表格
- 二分图 KM算法(求二分图带权值的最大匹配)