1. 编译proj高版本时,会发现proj.lib库是静态库,如果不配置环境变量,会出现以下错误:

1)报错

2)gdal库中的OGRCreateCoordinateTransformation方法,创建对象失败

解决方法:

找到proj.db文件,需要设置用户变量。

         2. 使用gdal时候,需要设置环境变量,必须指定到data文件夹所在路径;

         3. 从gdal2.0升级到gdal3.0在使用上的变化;

        1)API变化

  • SRS_WKT_WGS84宏定义被替换为SRS_WKT_WGS84_LAT_LONG;
  • 空间参考类添加函数

OSRSetPROJSearchPaths(),
OSRExportToWktEx(),
OSRGetName(),
OSRIsSameEx(),
OSRGetCRSInfoListFromDatabase(),
OSRGetAreaOfUse(),
OSRGetAxisMappingStrategy(),
OSRSetAxisMappingStrategy(),
OSRGetDataAxisToSRSAxisMapping();

  • 坐标转换类添加函数

OCTCoordinateTransformationOptionsSetOperation(), 
OCTCoordinateTransformationOptionsSetAreaOfInterest(),
OCTDestroyCoordinateTransformationOptions(),
OCTNewCoordinateTransformationEx(),    
OCTTransform4D();

  • 移除函数

OSRFixupOrdering(), 
OSRFixup(),
OSRStripCTParms(),
OCTProj4Normalize(),
OCTCleanupProjMutex(),
OPTGetProjectionMethods(),
OPTGetParameterList(),
OPTGetParameterInfo()

        2)空间参考定义

空间参考定义由于GDAL3.0以后的版本依赖的PROJ库必须是6.0+的版本,而且是必须依赖,不像以前的版本proj库可以动态加载,在编译GDAL是不需要PROJ库也可以,但是3.0以后的版本就不行了,编译GDAL的时候必须要有PROJ6.0以上的版本才可以。
        这样就会引入一个问题,由于PROJ6里面需要proj.db数据库的支持,这样的话,在GDAL库使用的话也需要proj.db的支持,否则定义空间参考时会报错。proj.db文件默认会在proj.dll所在目录的proj文件夹中找,也可以通过函数OSRSetPROJSearchPaths()来设置proj.db的所在目录。
        空间参考定义部分,基本上没有发生大的变化,如果通过SRS_WKT_WGS84宏来定义WGS84椭球的话,需要改为SRS_WKT_WGS84_LAT_LONG宏来进行定义。

        3)坐标转换

坐标转换时空间参考的定义必须使用函数SetAxisMappingStrategy来设置坐标轴对应策略,否则坐标转换会失败。下面两份代码分别是之前的版本和3.0以后的版本进行坐标转换的写法。

/=====================================gdal2.0++版本=====================================/#include "PCSTransform.h"
#include <ogr_spatialref.h>GDALAllRegister();
OGRRegisterAll();OGRSpatialReference mOGRSourceSRS;
OGRSpatialReference mOGRTargetSRS;
OGRErr err1 = mOGRSourceSRS.importFromEPSG(sourceESPG);
OGRErr err2 = mOGRTargetSRS.importFromEPSG(targetESPG);
GRCoordinateTransformation *pOGRCT = OGRCreateCoordinateTransformation(&mOGRSourceSRS, &mOGRTargetSRS);double x = 经度;
double y = 纬度;
double z = 高度;
if (pOGRCT == NULL || !pOGRCT->Transform(1, &x, &y, &z))
{std::cout << "Transformation failed" << std::endl;
}/=====================================gdal3.0++版本=====================================/
#include "PCSTransform.h"
#include <ogr_spatialref.h>GDALAllRegister();
OGRRegisterAll();OGRSpatialReference mOGRSourceSRS;
OGRSpatialReference mOGRTargetSRS;
OGRErr err1 = mOGRSourceSRS.importFromEPSG(sourceESPG);
OGRErr err2 = mOGRTargetSRS.importFromEPSG(targetESPG);
mOGRSourceSRS.SetAxisMappingStrategy(OAMS_TRADITIONAL_GIS_ORDER);//gdal3.0开始需要添加这个
mOGRTargetSRS.SetAxisMappingStrategy(OAMS_TRADITIONAL_GIS_ORDER);//gdal3.0开始需要添加这个
GRCoordinateTransformation *pOGRCT = OGRCreateCoordinateTransformation(&mOGRSourceSRS, &mOGRTargetSRS);double x = 经度;
double y = 纬度;
double z = 高度;
if (pOGRCT == NULL || !pOGRCT->Transform(1, &x, &y, &z))
{std::cout << "Transformation failed" << std::endl;
}

    4. shp另存为geojson - new line delimited 格式文件

        必须使用gdal2.4以上版本

GDALDriver* poDriver = GetGDALDriverManager()->GetDriverByName("GeoJSONSeq");

// 将shp文件转化为json - Newline Delimited文件输出
void parseShpfile2GeojsonFile(char *inFileName, char *outFileName) {GDALAllRegister();// 注册驱动CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");// 支持中文路径    CPLSetConfigOption("SHAPE_ENCODING", "");// 属性表字段支持中文GDALDataset *poSrcDS = (GDALDataset *)GDALOpenEx(inFileName, GDAL_OF_VECTOR, NULL, NULL, NULL);// 打开文件,读取数据// 判断是否读取成功if (poSrcDS == NULL){std::cout << "未能成功读取!" << std::endl;return;}// json驱动// gdal必须要用大于等于2.4的版本GDALDriver* poDriver = GetGDALDriverManager()->GetDriverByName("GeoJSONSeq");// 复制shp文件到指定输出的json文件 GDALDataset* poDstDS = poDriver->CreateCopy(outFileName, poSrcDS, FALSE, NULL, NULL, NULL);//int count = GetGDALDriverManager()->GetDriverCount();//for (size_t i = 0; i < count; i++)//{//    std::string s = GetGDALDriverManager()->GetDriver(i)->GetDescription();//    std::cout << s << std::endl;//}//释放内存if (poDstDS != NULL)GDALClose((GDALDatasetH)poDstDS);GDALClose((GDALDatasetH)poSrcDS);
}

gdal使用常见问题相关推荐

  1. GeoTool常见问题

    此页面汇集了每个模块的各个常见问题解答页面.即使您不确定究竟是哪个模块负责,这也允许您搜索答案. 请将有关此页面的任何意见或建议发送至GeoTools 用户列表. 地理工具常见问题 问:什么是地理工具 ...

  2. python 安装gdal成功,但是导入报错:DLL load failed 找不到指定的模块

    最近基于Python3.8安装gdal,报错如题,尝试了很多方法,包括各种替换gdal版本,升级对应的依赖包版本一直没得到解决. 最后看到两个很有参考价值的文章: 1.关于python环境配置几个常见 ...

  3. llvm常见问题 (FAQ)

    llvm常见问题 (FAQ) License 可以修改 LLVM 源代码并重新分发修改后的源代码吗? 可以修改 LLVM 源代码并重新分发基于二进制文件或其它工具,而无需重新分发源代码吗? 源代码 L ...

  4. 深度学习常见问题解析

    深度学习常见问题解析 计算机视觉与自动驾驶 今天 一.为什么深层神经网络难以训练? 1.梯度消失.梯度消失是指通过隐藏层从后向前看,梯度会变得越来越小,说明前面层的学习会显著慢于后面层的学习,所以学习 ...

  5. JAVA IDEA集成geotools gt-mif gdal读取.MIF

    JAVA IDEA集成geotools gt-mif gdal读取.MIF 1. 结论 2. 问题1:gdal maven下载不下来 3. geotools,gt-mif maven配置 4. 源码 ...

  6. Java gdal .mif/.mid文件读取

    上一篇研究了 Windows10 64位 Python读取.mif/.mid文件并转成txt 今天研究一下Java读取MIF. 俩种解决办法: (1)Python程序读取.mif/.mid转成txt, ...

  7. C# GDAL 学习一

    最近一直琢磨如何用C#+GDAL读取栅格数据(.tif或.img),运气不错的在GDAL 的官网上找到一部分源码.经过本人测试,效果还不错.学习还将继续深入下去. 参考网址:http://trac.o ...

  8. 使GDAL库支持中文路径或中文文件名的处理方法

    之前生成的gdal 2.1.1动态库,在通过命令行执行时,遇到有中文路径或中文图像名时,GDALOpen函数不能正确的被调用,如下图: 解决方法: 1.      在所有使用GDALAllRegist ...

  9. GDAL库简介以及在Windows下编译过程

    GDAL(Geospatial Data Abstraction Library,地理空间数据抽象库)是一个在X/MIT许可协议下的开源栅格空间数据转换库.官网http://www.gdal.org/ ...

最新文章

  1. 受损骨骼可能在类似地球的重力条件下更快愈合
  2. git status清空_Git常见命令和遇到问题的解决办法
  3. Nginx学习之五:Nginx第三方模块
  4. 【我拼搏的2016】-苦逼运维如何变身为SRE成长经历
  5. Python 之父再度发声:我们能为中国的“996”程序员做什么?
  6. oracle11g数据库登录01017,sqlplus登录Oracle时ORA-01017: invalid username/password; logon denied的错误...
  7. mysql 不同的记录_Mysql通过一个限制条件,查出多条不同的记录
  8. 线性代数拾遗(3)—— “系数矩阵的秩” 和 “齐次线性方程组基础解系向量个数” 的关系
  9. Office 365 IT Professional—— 如何将Office 365中的文档同步到客户端,加强协同管理
  10. prometeus, grafana部署以及监控mysql
  11. ISP流程Gamma校正思路
  12. 网络基础笔记(四)不同网段通信
  13. idea 检测 重复代码_IntelliJ IDEA 15 EAP,支持动态代码重复检测
  14. 端午节-怀念1996之QB45坦克对战游戏
  15. 初级JAVA程序员应该掌握的NPE知识
  16. P2615 神奇的幻方
  17. educoder:实验十 字典
  18. 微信小程序项目实例——生活记账本
  19. MQL4课程-交易函数下单及挂单
  20. 百度短网址开始收费了,这是真的吗?

热门文章

  1. 光流法的三维运动表示
  2. MyBatis 利用SQL 的UUID 实现多表关联的树结构
  3. Python定时抢购天猫商品(一)
  4. 使用老毛桃U盘装机工具如何安装纯净版Windows系统
  5. TFT LCD 的Array制程
  6. 程序员该不该去外包公司?
  7. Unity 带骨骼的人体模型换装
  8. Google高级技巧—google Hack★★★★
  9. Ant-Design-Pro中:EditableProTable在ProForm保存时一并验证EditableProTable中每条数据的规则是否满足
  10. 数据库建立组合索引时应该遵循的规则, 精确查找先,范围查找后,尽管区分度高