记录一下学习gdal的提取高程功能
Dataset dataset = Gdal.Open(sPathFileName, Access.GA_ReadOnly);
dataset.GetGeoTransform(geotransform);
int XSize = dataset.RasterXSize;
int YSize = dataset.RasterYSize;
float[,] terrainData = new float[XSize, YSize];
double nodataValue ;
int hasval;
// 获取DEM数据集的高程信息
Band band = dataset.GetRasterBand(1);
band.GetNoDataValue(out nodataValue,out hasval);
double[] lim = new double[2];
band.ComputeRasterMinMax(lim,0);
int blockSizeX = 1000; // 定义每个块的宽度
int blockSizeY = 1000; // 定义每个块的高度
for (int y = 0; y < YSize; y += blockSizeY)
{
int blockHeight = Math.Min(blockSizeY, YSize - y); // 计算实际块的高度
for (int x = 0; x < XSize; x += blockSizeX)
{
int blockWidth = Math.Min(blockSizeX, XSize - x);
double[] blockHeights = new double[blockWidth * blockHeight];
band.ReadRaster(x, y, blockWidth, blockHeight, blockHeights, blockWidth, blockHeight, 0, 0);
for (int blockY = 0; blockY < blockHeight; blockY++)
{
for (int blockX = 0; blockX < blockWidth; blockX++)
{
int terrainX = x + blockX;
int terrainY = y + blockY;
if (terrainX < XSize && terrainY < YSize)
{
double heightValue = blockHeights[blockY * blockWidth + blockX];
// 处理高程数据
terrainData[terrainX, terrainY] = (float)heightValue;
}
}
}
}
}
其中:
dataset.GetGeoTransform(geoTransform);
返回一个包含6个参数的数组:
geoTransform[0]:左上角像素的X坐标(地理坐标)。
geoTransform[1]:像素宽度(水平分辨率,表示一个像素对应的实际距离)。
geoTransform[2]:旋转参数(通常为0,如果图像是正北向上)。
geoTransform[3]:左上角像素的Y坐标(地理坐标)。
geoTransform[4]:旋转参数(通常为0,如果图像是正北向上)。
geoTransform[5]:像素高度(垂直分辨率,通常为负值)。