/// <summary>
/// 获取栅格图层中像元的最大值最小值
/// </summary>
/// <param name="pRasterLayer"></param>
/// <param name="max"></param>
/// <param name="min"></param>
static public void GetMaxAndMin(IRasterLayer pRasterLayer,ref double max,ref double min)
{
// 获取取值范围
IRaster pRaster = pRasterLayer.Raster;
IRasterBandCollection pRBC = (IRasterBandCollection)pRaster;
IRasterBand pRasterband = pRBC.Item(0);
// QI 栅格单元统计接口
IRasterStatistics pRS = pRasterband.Statistics;
max = pRS.Maximum;
min = pRS.Minimum;
}
/// <summary>
/// 获取重分类映射表
/// </summary>
/// <param name="pRasterLayer">待分类的栅格图层</param>
/// <param name="N">分类数目</param>
/// <returns></returns>
static public string GetRemap(IRasterLayer pRasterLayer,int N)
{
//获取栅格数据的最大值最小值
double max = 0.0;
double min = 0.0;
GetMaxAndMin(pRasterLayer, ref max, ref min);
string remap = "";
// 等分为N类
double dis = (max - min) / N;
// "0 NODATA;1 1"
for (double i = 0; i < N; i++)
{
double from = dis * i + min;
double to = dis * (i + 1) + min;
remap += from + " " + to + " " + (i + 1) + ";";
}
return remap;
}
/// <summary>
/// 重分类分析
/// </summary>
/// <param name="pRasterLayer">待分类的图层</param>
/// <param name="pFilePath">文件输出位置</param>
/// <param name="pReclassField">待分类字段</param>
/// <param name="pMissintValue">空值处理</param>
static public void ReclassifyAnalyze(IRasterLayer pRasterLayer, string pFilePath, int N, string pReclassField = "VALUE", string pMissintValue = "DATA")
{
Geoprocessor GP = new Geoprocessor();
GP.OverwriteOutput = true;
ESRI.ArcGIS.SpatialAnalystTools.Reclassify pReclassify = new ESRI.ArcGIS.SpatialAnalystTools.Reclassify();
pReclassify.in_raster = pRasterLayer;
pReclassify.out_raster = pFilePath;
// 待分类字段
//myReclassify.reclass_field = "VALUE";
pReclassify.reclass_field = pReclassField;
// 空值处理
//myReclassify.missing_values = "DATA";
pReclassify.missing_values = pMissintValue;
// 重分类映射表设置
//myReclassify.remap = "0 NODATA;1 1";
//0 5.730143 1;5.730143 11.460286 2;11.460286 17.190429 3;17.190429 22.920572 4;22.920572 28.650715 5;28.650715 34.380858 6;34.380858 40.111001 7;40.111001 45.841144 8;45.841144 51.571287 9;51.571287 57.301430 10
string pRemap = GetRemap(pRasterLayer, N);
pReclassify.remap = pRemap;
try
{
IGeoProcessorResult2 result = GP.Execute(pReclassify, null) as IGeoProcessorResult2;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "GP Error");
}
finally
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = 0; i < GP.MessageCount; i++)
sb.AppendLine(GP.GetMessage(i));
if (sb.Capacity > 0) MessageBox.Show(sb.ToString(), "GP Messages");
}
}
版权声明:本文为sadasdassadaw原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。