gdal开发,如何把GCGS2000格式的数据集转变WGS84格式的数据集
//数据集格式转化
GDALDataset*m_GCGS2000=
(GDALDataset*)GDALAutoCreateWarpedVRT(m_WGS84, in_srs_wkt, out_srs_wkt, GRA_NearestNeighbour , 0,NULL);
/*获取地理坐标信息*/
m_out_ds->GetGeoTransform();
1.通过上面方式转化后,通过下面函数获取数据集的地理坐标信息后,发现该数据集的空间分辨率特别小,使得代码后面的每一次数据切片操作都要读很大的数据,程序走不下去。于是想看看有没有另外的方式,转化数据集格式,跟上面的转化结果做个对比。
2.当gdal数据集的水平空间分辨率(如geoTransform[1])特别小时,代表什么含义?
20231020补充:
后面开发过程中,又增进了一些理解,记录下来,个人理解或许存在偏差,欢迎指正。
1.GDALAutoCreateWarpedVRT该函数是一个转化格式函数,该种方式下转化完毕数据集格式后,使用reasterIO函数读取数据时一直报一个错误“Writing through VRTSourcedRasterBand is not supported”,当时一直怀疑是该种方式转化后不支持多波段栅格读取,于是就想换一个办法进行数据读取。但是今天运行程序,忽然间发现能够运行下去了,也不知道发生了什么,代码是没有改动的,神奇。
中间的测试过程中尝试了GDALWarp、GDALReprojectImage、GDALCreateGenImgProjTransformer三种其他的方式进行数据集格式转化,也都存在问题报错,一个34g的文件读取内存分配太大,不能分配内存啥的("cannot allocate 1x9419779305 bytes"),就也没进行下去。
2.GetGeoTransform该函数是获取数据信息的仿射矩阵的,geoTransform[1]、geoTransform[5]代表数据的像素点(还是像元?)与实际地理信息的一个比例关系,比如geoTransform[1]=10,代表两个像素点(还是像元?)之间代表的实际距离为10m(单位可能是其他度量)。geoTransform[0]、geoTransform[3]代表数据文件最左上角点代表的实际地理坐标(经纬度),这样根据这个仿射矩阵、以及getRasterXSize、getRasterYSize确定图像数据的范围,就能够建立图形跟实际地理信息的关系了。