using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesRaster;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.SpatialAnalyst;
using ESRI.ArcGIS.GeoAnalyst;
namespace 自然邻域法插值
{
public partial class FormINteroplation : Form
{
public FormINteroplation()
{
InitializeComponent();
}
private IRasterAnalysisEnvironment rasterEnv;//分析环境
private IInterpolationOp2 interOp;//空间插值对象
private IFeatureClass feaClass;
private IFeatureClassDescriptor feaDes;
private IGeoDataset inGeodataset;//输入栅格
private IGeoDataset outGeodataset;//输出栅格
#region 环境变量
private double cellSize = 500;//输出像元大小
private object Missing = Type.Missing;
private object cellSizeObj;
private object extentProObj;//处理范围
private IRasterRadius radius;
#endregion
private void btnNaturalNeighbor_Click(object sender, EventArgs e)
{
try
{
interOp = rasterEnv as IInterpolationOp2;
outGeodataset = interOp.NaturalNeighbor(inGeodataset);
ShowResult(outGeodataset, "NaturalNeighbor ");
MessageBox.Show("完成");
}
catch { }
}
private void FormINteroplation_Load(object sender, EventArgs e)
{
rasterEnv = new RasterInterpolationOpClass();
}
private void cmbLayers_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
cmbFields.Items.Clear();
ILayer layer = getLayerFromName(cmbLayers.SelectedItem.ToString());
IFeatureLayer fl = layer as IFeatureLayer;
feaClass = fl.FeatureClass;
for (int i = 0; i < feaClass.Fields.FieldCount; i++)
{
cmbFields.Items.Add(feaClass.Fields.get_Field(i).Name);
}
extentProObj = layer;
//设置空间处理范围
rasterEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref extentProObj, Missing);//设置空间处理范围
}
catch
{
MessageBox.Show("请输入栅格图层!");
}
}
private void cmbFields_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
feaDes = new FeatureClassDescriptorClass();
feaDes.Create(feaClass, null, cmbFields.SelectedItem.ToString());
inGeodataset = feaDes as IGeoDataset;
}
catch
{
MessageBox.Show("请输入栅格图层!");
};
}
private void cmbLayers_MouseClick(object sender, MouseEventArgs e)
{
ComboBox c = sender as ComboBox;
c.Items.Clear();
IMap map = axMapControl1.Map;
if (map != null)
{
for (int i = 0; i < map.LayerCount; i++)
{
c.Items.Add(map.get_Layer(i).Name);
}
}
}
//通过图层名得到图层
private ILayer getLayerFromName(string layerName)
{
ILayer layer;
IMap map = axMapControl1.Map;
for (int i = 0; i < map.LayerCount; i++)
{
layer = map.get_Layer(i);
if (layerName == layer.Name)
return layer;
}
return null;
}
//显示分析结果
private void ShowResult(IGeoDataset geoDataset, string interType)
{
IRasterLayer rasterLayer = new RasterLayerClass();
IRaster raster = new Raster();
raster = (IRaster)geoDataset;
rasterLayer.CreateFromRaster(raster);
rasterLayer.Name = interType;
axMapControl1.AddLayer((ILayer)rasterLayer, 1);
axMapControl1.ActiveView.Refresh();
}
private void txtCellSize_TextChanged(object sender, EventArgs e)
{
try
{
cellSize = Convert.ToDouble(txtCellSize.Text);
cellSizeObj = cellSize;
rasterEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref cellSizeObj);
}
catch { }
}
}
}
自然邻域插值
最新推荐文章于 2023-03-13 15:30:00 发布