巨菜的阿豪 2023-10-12 17:15 采纳率: 50%
浏览 7
已结题

如何改变数据集格式?GDAL开发

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确定图像数据的范围,就能够建立图形跟实际地理信息的关系了。

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-13 04:23
    关注

    【以下回答由 GPT 生成】

    问题标题: 如何改变数据集格式?GDAL开发

    问题描述: 我正在进行GDAL开发,并且希望将一个GCGS2000格式的数据集转换为WGS84格式的数据集。我已经使用以下代码尝试进行转换,但是转换后的数据集的空间分辨率太小了,导致后续的数据切片操作读取非常大的数据,程序无法继续执行。我想知道是否有其他方法可以转换数据集的格式,并与上面的转换结果进行对比。

    以下是我尝试的代码:

    //数据集格式转化
    GDALDataset* m_GCGS2000 = (GDALDataset*)GDALAutoCreateWarpedVRT(m_WGS84, in_srs_wkt, out_srs_wkt, GRA_NearestNeighbour , 0,NULL);
    /*获取地理坐标信息*/
    m_out_ds->GetGeoTransform();
    

    另外,当gdal数据集的水平空间分辨率(如geoTransform[1])特别小时,我想知道代表什么含义。

    请帮助我优化问题,让ChatGPT能够更好地理解我的问题。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月20日
  • 修改了问题 10月20日
  • 创建了问题 10月12日

悬赏问题

  • ¥15 C#连接不上服务器,
  • ¥15 angular项目错误
  • ¥20 需要帮我远程操控一下,运行一下我的那个代码,我觉得我无能为力了
  • ¥20 有偿:在ubuntu上安装arduino以及其常用库文件。
  • ¥15 请问用arcgis处理一些数据和图形,通常里面有一个根据点划泰森多边形的命令,直接划的弊端是只能执行一个完整的边界,但是我们有时候会用到需要在有很多边界内利用点来执行划泰森多边形的命令
  • ¥30 在wave2foam中执行setWaveField时遇到了如下的浮点异常问题,请问该如何解决呢?
  • ¥750 关于一道数论方面的问题,求解答!(关键词-数学方法)
  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来