• GDAL打开HDF格式时遇到的中文路径问题(未解决)


    众所周知,中文环境下(VS2010 C++工程编码为多字节编码),在使用1.8.0版本以后的GDAL打开中文路径下的影像文件(如GeoTiff文件)时,

    需对中文文件路径做特殊处理,有2种方法:(我使用的GDAL库添加了HDF4、HDF5格式支持)

    (1)临时设置GDAL为本机编码环境

    GDALAllRegister();
    CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO");//设置为非UTF-8编码
    GDALDataset* modisDataset = (GDALDataset*) GDALOpen("D:\bigData\hdf\天天\MOD04_L2.A2012001.0320.051.2012001212607.hdf", GA_ReadOnly);
    /*Open HDF Success*/

    (2)将多字节编码的中文路径转为UTF-8编码,再传给GDAL

    char* pszHDFSource = local_to_utf8("D:\bigData\hdf\天天\MOD04_L2.A2012001.0320.051.2012001212607.hdf");
    //UTF8 encoding pszHDFSource is D:igDatahdf澶╁ぉMOD04_L2.A2012001.0320.051.2012001212607.hdf GDALAllRegister(); GDALDataset
    * modisDataset = (GDALDataset*) GDALOpen(pszHDFSource, GA_ReadOnly);
    /*Open HDF Failed*/

    今天写了一个从MODIS HDF格式数据中提取子数据集到GeoTiff文件的小工具,在打开中文路径下的HDF文件时遇到一个比较奇怪的问题:

    p1.使用第一种方法时,可以打开中文路径下的GeoTiff、HDF数据文件,也可以向中文路径下写出GeoTiff数据文件;

    p2.使用第二种方法时,可以打开中文路径下的GeoTiff数据文件,也可以向中文路径下写出GeoTiff数据文件,但是无法打开中文路径下的HDF数据文件;

    现象1说明上述两种中文路径解决方法不等价;现象2说明我们自己写的local_to_utf8()函数是没有问题的,问题可能出在GDAL与HDF库的交互过程中。

    原因猜测:GDAL在调用HDF库时,是否对路径编码做了改变?或者HDF库接收到非本机编码的路径后,是否又将其转为了本机编码或者其他格式的编码?

    又或者在编码转换过程中出现了什么差错?

    由于我并没有去看HDF的源码,因此上述猜测可能并不准确,希望有人遇到这样问题的人可以细致分析和研究一下。

  • 相关阅读:
    go-zero尝试运行输出hello-world
    grpc客户端 服务端测试
    protobuf序列化
    protobuff3语法详情
    【转】普通程序员如何转向AI方向
    深度学习微软 azure-云服务器组 centos特殊内核版本 gpu NVIDIA 驱动及CUDA 11.0安装
    分享一个主要用于nas场景的集成了迅雷,百度网盘等软件的docker ubuntu vnc镜像-适用于x86环境
    以spark sql 维护spark streaming offset
    打通es及lucene应用,lucene应用es Query,应用完整的es query
    打通es及lucene应用,lucene应用es Query,结合非queryString查询(二)
  • 原文地址:https://www.cnblogs.com/yeahgis/p/3156546.html
Copyright © 2020-2023  润新知