代码编写:王洪杰 Email: imwhj@qq.com
本人初次研究GDAL时写的读取GeoTIFF高程类,可完美运行
如果运行有错误请先确保GDAL库配置无误
写法、注释及数据类型等是个人偏好
可在本代码基础上修改读取其它精度的GeoTIFF格式文件
因个人工作需要,本类仅用于读取高程数据到二维矩阵中,未涉及坐标处理
本源码完全免费使用,如果你觉得不错可给本人邮箱发信说明一下
本源码上传日期 11:04 2013/12/6
有对C#+Direct3D、SlimDX开发三维程序的朋友请加QQ群 259284988
using OSGeo.GDAL;
namespace GdalReadTiff
{
/// <summary>
/// 使用GDAL读取GeoTiff高程数据
/// </summary>
/// 经过在float和double之间考虑,还是确定使用float。DEM要求精度不高。
/// 使用数据集Dataset ds;ds.ReadRaster的方式也可以读取数据,只是功能更多 2013.7.16
/// GetMinimum,GetMaximum基本上dem里直接都有,不过有时候不一定,所以需要ComputeRasterMinMax
/// ComputeRasterMinMax 也是遍历数据之后,GDAL会把最大最小值写入.aux.xml中,下次就不需要再统计一遍了。如果有这个.aux.xml文件,直接调用函数GDALRasterBand::GetMinimum()和GDALRasterBand::GetMaximum()就能获取到准确的结果 2013.7.19
/// 改写输出为二维数组,通过返回int来表示错误类型 2013.7.26
/// Band.ReadRaster还可以将DEM数据伸缩到指定尺寸后输出,本类增加后今天又取消这个功能 2013.7.28
internal class ReadTiff
{
private static float _NoDataVal; //无高程之值
private static float _Min, _Max; //最小最大值
private static int _BandWidth, _BandHeight; //宽高像素
/// <summary>
/// 读取DEM数据到二维数组,成功返0,出错返>0数字代码
/// 1 = 打开DEM过程发生未知错误
/// 2 = GDAL运行库错误
/// 3 = DEM读取路径错误
/// 4 = DEM数据集错误
/// 5 = DEM数据驱动错误
/// 6 = DEM数据格式错误
/// 7 = DEM数据读取无效
/// </summary>
public static int GetData(string strFilePath, out float[,] TiffData)
{
int OutWidth = 0;
int OutHeight = 0;
TiffData = null;
try
{
Gdal.AllRegister();
}
catch { return 2; }
Gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES"); //支持中文
Dataset ds;