C使用GDAL读取TIF文件
C#使用GDAL库需安装以下两个Nuget包:GDAL和GDAL.Native
也可以安装这几个包:
这两种方式的注册方式会不太一样,其他用法大致相同。在此选中的是第一种方式,即在此安装的是GDAL和GDAL.Native。 注册
使用GDAL库的功能之前,必须先注册 // 注册 GdalConfiguration.ConfigureGdal(); Gdal.AllRegister(); // 设置utf-8编码 Gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
若安装的是第二种程序包,即MaxRev.Gdal.Core等,则注册语句为: // 注册 GdalBase.ConfigureAll(); // 设置编码 Gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
需注意的是,有时会报"PROJ: proj_create_from_database: Cannot find proj.db"这样的异常,解决这个异常,可以在注册之后加上这行代码,手动设置PROJ_DB环境变量的查找路径: Osr.SetPROJSearchPath(Environment.GetEnvironmentVariable("PROJ_LIB"));
或者在文件资源管理器中找到proj.db文件,再设置它的查找路径
最后手动设置查找路径: Osr.SetPROJSearchPath("C:xxxxxx.nugetpackagesgdal.native3.5.3buildgdalshare");
MaxRev.Gdal的查找路径为: Osr.SetPROJSearchPath("C:xxxxxx.nugetpackagesmaxrev.gdal.windowsruntime.minimal3.6.1.110runtimeswin-x64nativemaxrev.gdal.core.libshared"); 读取信息// 使用只读方式打开tif文件 Dataset ds = Gdal.Open("C:xxx.tif", Access.GA_ReadOnly); if (ds == null) { Console.WriteLine("文件打开失败..."); return; } // 获取驱动器名称,这里输出的是:GeoTIFF var driverName = ds.GetDriver().LongName; // 投影坐标系信息 var projection = ds.GetProjection(); var projection = ds.GetProjectionRef();
这里的波段表示单个栅格波段/通道/图层,它不一定代表整个图像,例如,24 位 RGB 图像通常表示为具有三个波段的数据集,一个用于红色,一个用于绿色,一个用于蓝色。 // 波段数 var rasterCount = ds.RasterCount; // 获取tif的第一个波段,波段索引从1开始 var band = ds.GetRasterBand(1); // 波段数据类型 var bandDataType = band.DataType; Console.WriteLine("DataType: " + Gdal.GetDataTypeName(bandDataType)); // 波段颜色解释 var interpretation = band.GetRasterColorInterpretation(); Console.WriteLine("PaletteInterp: " + interpretation.ToString());
读取像素值 var band = ds.GetRasterBand(1); // 计算最大值和最小值 double[] rasterMinMax = new double[2]; int approx_ok = 0; band.ComputeRasterMinMax(rasterMinMax, approx_ok); Console.WriteLine("rasterMinMax = " + rasterMinMax[0] + ", " + rasterMinMax[1]); // 获取最大值和最小值,这里获取的不一定是真实的最值 band.GetMaximum(out double mval, out int mhasval); band.GetMinimum(out double min, out int minval); // 获取无效值 band.GetNoDataValue(out var val, out var hasval); // 读取像素值 int Xsize = band.XSize; int Ysize = band.YSize; var buff = new double[Xsize * Ysize]; band.ReadRaster(0, 0, Xsize, Ysize, buff, Xsize, Ysize, 0, 0); for (int i = 0; i < Xsize; i++) { for (int j = 0; j < Ysize; j++) { var value = buff[i + j * Xsize]; Console.Write(value + " "); } }
计算经纬度 // 获取仿射变换矩阵 /* 地理坐标和影像数据行列的转换关系: Xgeo = GT(0) + Xpixel*GT(1) + Yline*GT(2) Ygeo = GT(3) + Xpixel*GT(4) + Yline*GT(5) */ double[] geoTrans = new double[6]; ds.GetGeoTransform(geoTrans); // 转换地理坐标系 SpatialReference spatial = ds.GetSpatialRef(); var geors = new SpatialReference(""); geors.ImportFromEPSG(4326); var transformation = new CoordinateTransformation(spatial, geors); //计算经纬度 for (int i = 0; i < Ysize; i++) { for (int j = 0; j < Xsize; j++) { // 计算投影坐标 var x = geoTrans[0] + i * geoTrans[1] + j * geoTrans[2]; var y = geoTrans[3] + i * geoTrans[4] + j * geoTrans[5]; // 计算经纬度 double[] longiAndLat = new double[2]; transformation.TransformPoint(longiAndLat, x, y, 0); // 1是经度,2是纬度 Console.Write("(" + longiAndLat[1] + "," + longiAndLat[0] + ") , "); } }
标签: GIS
夜读一个人成熟的标志是什么主播读经典,陪您说晚安。大家好!这里是闪电夜读,我是邹鲁融媒主播栗志楠,今晚与您分享的文章是周国平的一个人成熟的标志是什么。一个人成熟的标志是什么文周国平世界上有一些东西,是你自己
没爱过怎知情重!没醉过怎知酒浓一个爱字让人肝肠寸断没爱过怎知情重!没醉过怎知酒浓!若不是情深似海,又怎会痛彻心扉?今生遇见你。是人生最美的邂逅。也是人生最美的缘份!好想真的好想听你说一句你爱我此生永远只有你!没
真正的聪明人,都懂得少管闲事文玛卡巴卡(富书作者)明张凤翼灌园记后识法章中有一句进去罢,各人自扫门前雪,莫管他家瓦上霜。生活中,有很多人总是习惯将自己的想法强加在别人身上,试图让别人按照自己的意愿来做事。殊不
东岳观丨要理直气壮宣传左宗棠天地英雄气,千秋尚凛然。自古以来,每当中华民族危急关头,总有人挺身而出,赴汤蹈火舍身死,力挽狂澜守江山,保卫国土安全,维护民族尊严。他们都是我们的民族英雄,应该被我们世代景仰。左公
4大教条罩香港!隔绝一国死守旧制中央不能管政改学西方文柳扶风中国特色社会主义之所以能发展起来,取得世界瞩目的成就,一个重要原因,就是能在坚持改革开放中不断在经济基础上层建筑各个领域展开和实现制度性的创新,打破旧框框,推出新规制,为中
葡萄牙为什么可以61战胜瑞士,却被摩洛哥10击败五个原因在葡萄牙对阵摩洛哥之前可能没有球迷能想到非洲球队摩洛哥能淘汰葡萄牙队,闯入四强摩洛哥代表非洲球队第一次打入世界杯的四强,嗯,历史是需要新人去打破的,摩洛哥做到了。那为什么在上一场葡
他,含冤入狱27年,获赔496万妻子改嫁,儿子成家,现如今咋样了前言2020年8月4号,张玉环无罪释放,获4960000元赔款今天给大家分享的是张玉环和宋小女的故事,2020年8月4号张玉环无罪释放的那一天,如释重负的张玉环走出不见天日的监狱大
王岐山在第四届外滩金融峰会开幕式上发表致辞央广网北京12月11日消息据中央广播电视总台中国之声新闻和报纸摘要报道,国家副主席王岐山昨天(10日)在第四届外滩金融峰会开幕式上发表视频致辞。王岐山指出,中共二十大开启了以中国式
中国国民党革命委员会第十四次全国代表大会闭幕词中国国民党革命委员会第十四次全国代表大会闭幕词郑建邦(2022年12月10日)各位代表同志们中国国民党革命委员会第十四次全国代表大会,在全体代表的共同努力下,顺利完成了各项议程,就
人过四十,不要盲目亲近枕边人,多留这几个心眼很重要这世间最好的关系,便是有距离的关系。距离二字,年轻的时候我们也许不在意,认为最为亲密的关系,最好不要有距离,不然会破坏人与人之间的和谐。抱着这种态度,我们到处碰钉子,不是今天得罪了
红网夜读丨生活不可能像你想象得那么好,但也不会像你想象得那么糟来源红网时刻新闻play用声音传递温暖,欢迎收听红网夜读,我是田萌,田野的田,萌芽的萌。很喜欢莫泊桑在一生中的一段话生活不可能像你想象得那么好,但也不会像你想象得那么糟。我觉得人的