using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.DataSourcesRaster;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geoprocessor;
using ESRI.ArcGIS.SpatialAnalystTools;
using System;
using System.Collections.Generic;
using System.Linq;
namespace RasterDeal
{
public class RasterDealclass
{
public RasterDealclass()
{
}
/// <summary>
/// 栅格计算器
/// </summary>
/// <param name="expression">执行表达式</param>
/// <param name="output_raster">输出路径</param>
/// var back = RasterCalculator("'d:\\Desktop\\tst\\00000034.tif' + 100", @"d:\Desktop\tst\00000035.tif");
public bool RasterCalculator(string expression, string outputpath)
{
Geoprocessor gp = new Geoprocessor();
gp.OverwriteOutput = true;
try
{
RasterCalculator RasterCalculator = new RasterCalculator();
RasterCalculator.expression = expression;//表达式
RasterCalculator.output_raster = outputpath;//输出路径
return (bool)gp.Execute(RasterCalculator, null);
}
catch(Exception ex)
{
string str = "";
for (int i = 0; i < gp.MessageCount; i++)
{
str += gp.GetMessage(i);
str += "\n";
}
if (str.Contains("Succeeded"))
return true;
else
return false;
}
}
/// <summary>
/// 获取栅格最大值最小值
/// </summary>
/// <param name="rasterpath">栅格路径</param>
/// <returns>range[0]最小值,range[1]最大值</returns>
public List<double> GetRangeOfRaster(string rasterpath)
{
List<double> range = new List<double>();
IRasterLayer rasterLayer = new RasterLayerClass();
rasterLayer.CreateFromFilePath(rasterpath);
IRaster pRaster = rasterLayer.Raster;
IRasterBandCollection pRBC = (IRasterBandCollection)pRaster;
IRasterBand pRasterband = pRBC.Item(0);
IRasterStatistics pRS = pRasterband.Statistics;
double min = pRS.Minimum;
range.Add(min);
double max = pRS.Maximum;
range.Add(max);
return range;
}
/// <summary>
/// 栅格重分类
/// </summary>
/// <param name="rasterpath">栅格路径</param>
/// <param name="outputpath">输出路径</param>
/// <param name="remap">string Remap1 ="-9999 0 重分类值1;0 100 重分类值2;"</param>//重分类表达式
/// <returns></returns>
public bool ReClassRaster(string rasterpath, string outputpath, string remap)
{
Geoprocessor gp = new Geoprocessor();
gp.OverwriteOutput = true;
try
{
Reclassify Reclassify = new Reclassify();
Reclassify.in_raster = rasterpath;//输入栅格
Reclassify.reclass_field = "Value";//修改字段
Reclassify.remap = remap;
Reclassify.out_raster = outputpath;//输出路径
return (bool)gp.Execute(Reclassify, null);
}
catch
{
string str = "";
for (int i = 0; i < gp.MessageCount; i++)
{
str += gp.GetMessage(i);
str += "\n";
}
if (str.Contains("Succeeded"))
return true;
else
return false;
}
}
}
}