把一个含有高程值的二维数组保存为tiff栅格文件格式
在C#中,将含有高程值的二维数组(假设这些数组是从某种VCT格式或其他格式中获取的Grid数据)保存为带有坐标参考系统的TIFF栅格文件格式,你可以使用GDAL库。不过,需要注意的是,VCT本身并不是GDAL直接支持的一种格式,但我们可以假设你已经有了从VCT或其他格式中提取的高程数据和相应的坐标信息。
以下是一个简化的步骤和示例代码,说明如何使用GDAL在C#中将高程值的二维数组保存为带有坐标参考系统的TIFF文件:
安装GDAL.NET:首先,确保你的C#项目中已经安装了GDAL.NET NuGet包。
准备高程数据和坐标信息:你需要有一个二维数组来存储高程值,以及关于这些高程值如何映射到地理空间的信息(如坐标参考系统和地理变换)。
创建TIFF文件:使用GDAL的Driver来创建一个新的TIFF文件,并设置其坐标参考系统和地理变换。
写入高程数据:将高程数据写入TIFF文件的第一个波段。
保存并关闭文件。
以下是一个示例代码:
using OSGeo.GDAL;
using OSGeo.OSR;
using System; class Program
{ static void Main(string[] args) { // 假设你有一个二维数组,代表高程值 float[,] heightData = new float[100, 100]; // ... 填充heightData数组 ... // 坐标参考系统(CRS),这里以WGS 84为例 SpatialReference srs = new SpatialReference(null); srs.ImportFromEPSG(4326); // WGS 84 // 创建TIFF文件 Driver driver = Gdal.GetDriverByName("GTiff"); string filename = "elevation.tif"; Dataset dataset = driver.CreateCopy(filename, null, 0, null, 100, 100, 1, DataType.GDT_Float32, null); // 设置坐标参考系统 dataset.SetProjection(srs.ExportToWkt()); // 设置地理变换信息 // 假设每个像素代表1度(这只是一个示例,实际值应根据你的数据确定) // 并且图像的左上角是(0, 90)(北极附近的某个点,注意Y坐标是向下的) double[] adfGeoTransform = new double[6]; adfGeoTransform[0] = 0; // 左上角x adfGeoTransform[1] = 1; // x像素大小 adfGeoTransform[2] = 0; // x旋转(通常为0) adfGeoTransform[3] = 90; // 左上角y(注意:TIFF中的Y坐标是向下的) adfGeoTransform[4] = 0; // y旋转(通常为0) adfGeoTransform[5] = -1; // y像素大小(负值因为y坐标向下增加) dataset.SetGeoTransform(adfGeoTransform); // 写入高程数据到第一个波段 Band band = dataset.GetRasterBand(1); band.WriteRaster(0, 0, 100, 100, heightData, 100, 100, 0, 0); // 刷新并关闭Dataset dataset.FlushCache(); dataset.Dispose(); Console.WriteLine("TIFF文件已保存,包含坐标参考系统。"); }
}
注意:
上面的代码示例中,坐标变换信息(adfGeoTransform)和坐标参考系统(CRS)都是简化的。你需要根据你的实际数据来设置这些值。特别是,adfGeoTransform中的像素大小和偏移量应该反映你的高程数据的实际地理覆盖范围。
坐标参考系统(CRS)在这里被设置为WGS 84(EPSG:4326),但你应该使用与你的数据相匹配的CRS。
TIFF文件中的Y坐标是向下的,因此当你设置左上角Y坐标时,你需要注意这一点。
确保在不再需要Dataset对象时调用Dispose()方法来释放资源。
本blog地址:https://blog.csdn.net/hsg77