参考:C#应用GDAL通过传入范围获取tif数据的最大高程值及其坐标
public static double GetElevation(OSGeo.GDAL.Dataset ds, double dProjX, double dProjY)
{
try
{
Band Band = ds.GetRasterBand(1);
//获取图像的尺寸
int width = Band.XSize;
int height = Band.YSize;
//获取坐标变换系数
double[] adfGeoTransform = new double[6];
ds.GetGeoTransform(adfGeoTransform);
//获取行列号
double dTemp = adfGeoTransform[1] * adfGeoTransform[5] - adfGeoTransform[2] * adfGeoTransform[4];
double dCol = 0.0, dRow = 0.0;
dCol = (adfGeoTransform[5] * (dProjX - adfGeoTransform[0]) -
adfGeoTransform[2] * (dProjY - adfGeoTransform[3])) / dTemp + 0.5;
dRow = (adfGeoTransform[1] * (dProjY - adfGeoTransform[3]) -
adfGeoTransform[4] * (dProjX - adfGeoTransform[0])) / dTemp + 0.5;
int dc = Convert.ToInt32(dCol);
int dr = Convert.ToInt32(dRow);
//获取DEM数值到一维数组
float[] data = new float[1 * 1];
OSGeo.GDAL.CPLErr err = Band.ReadRaster(dc, dr, 1, 1, data, 1, 1, 0, 0);
Band.Dispose();
double elvate = (double)data[0];
return elvate;
}
catch
{
return 10;
}
}