GDAL2.x与1.x的主要变化比较(以C++为例说明)
1、前言
GDAL库在2015年6月开始发布了2.0.0版本,同时与1.x的版本保持同步更新,GDAL2.x的最新版本已经发布到2.2.0(2017年4月发布),并且1.x的最后发布的版本是在2016年7月1.11.5,至今再没有更新(在维护的版本有一个1.11.6,估计只是修改bug的版本)。由此可以看出GDAL库将来可能只会更新2.x的版本。
GDAL2.x的版本比1.x的版本有更多的算法,更高的效率和更好的组织结构,所以在接口上发生了一定的变化,但是不是很多(否则基于GDAL库的项目升级代价太大),下面就对发生变化的部分进行总结,便于大家进行升级到2.x。
2、栅格数据读写操作
与1.x的接口完全一样,可以直接将库更新到2.x直接编译即可,代码都不用修改。但是打开图像增加了GDALOpenEx函数,该函数与之前的GDALOpen类似。
3、矢量数据读写操作(注意:下面是重点)
与1.x的接口变化较大,主要在于打开数据和关闭数据。请看下面的代码:
1.x打开矢量数据代码如下:
#include "ogrsf_frmts.h"
int main()
{OGRRegisterAll();OGRDataSource *poDS;poDS = OGRSFDriverRegistrar::Open( "point.shp", FALSE );if( poDS == NULL ){printf( "Open failed.\n" );exit( 1 );}OGRLayer *poLayer;poLayer = poDS->GetLayerByName( "point" ); //中间读取Feature、FeatureDefn和Geometry等接口没有任何变化//关闭数据OGRDataSource::DestroyDataSource( poDS );
}
2.x打开矢量数据代码如下:
#include "ogrsf_frmts.h"
int main()
{GDALAllRegister();GDALDataset *poDS;poDS = (GDALDataset*) GDALOpenEx( "point.shp", GDAL_OF_VECTOR, NULL, NULL, NULL );if( poDS == NULL ){printf( "Open failed.\n" );exit( 1 );}OGRLayer *poLayer;poLayer = poDS->GetLayerByName( "point" );//中间读取Feature、FeatureDefn和Geometry等接口没有任何变化//关闭数据GDALClose( poDS );
}
由于GDAL2.x的版本将栅格和矢量访问接口进行了统一,个人觉得主要原因是为了更方便的访问比如PIX、PDF等既可以存图像又可以存矢量的数据,所以将读写矢量数据的接口与读写栅格的接口进行了一致。
通过比较可以发现,主要的不同在于以下几个方面:
序号 | 说明 | 1.x版本 | 2.x版本 |
---|---|---|---|
1 | 注册函数变化 | OGRRegisterAll() | GDALAllRegister() |
2 | 数据集对象 | OGRDataSource | GDALDataset |
3 | 打开函数 | OGRSFDriverRegistrar::Open() | GDALOpenEx() |
4 | 获取图层对象 | OGRDataSource | GDALDatset |
5 | 关闭矢量数据 | OGRDataSource::DestroyDataSource() | GDALClose() |
3、总结
如果在项目中仅仅使用了图像处理的内容,直接可以升级到2.x的版本,不需要进行任何修改。
如果在项目中用到了矢量数据读写的内容,升级的时候只需要将矢量数据打开和关闭的部分进行修改即可。
对于其他语言,如C/C#/Python/Java等,栅格数据接口没有任何变化,矢量数据接口打开和关闭进行了调整。
GDAL2.x与1.x的主要变化比较(以C++为例说明)相关推荐
- AI持续赋能,搜狗S1会给录音笔行业带来哪些新变化?
作者 | 持续赋能的 出品 | CSDN(ID:CSDNnews) 2月26日,在以"同舟共记"为主题的"2020搜狗AI录音笔新品线上发布会"上,搜狗重磅推出 ...
- 溃疡性结肠炎中肠黏膜病毒的变化
摘要 目的 UC的发病机制与肠道菌群失调有关.我们推测,在病毒群落中,肠道黏膜的改变在UC发病机理中起着重要作用.这项研究旨在表征黏膜病毒及其在健康和UC中的功能. 设计 对来自中国三个不同地理区域( ...
- labview布尔型数据开关控制指示灯比较数值颜色变化条件判断
wx供重浩:创享日记 对话框发送:labview布尔 获取完整无水印报告+源程序文件 文章目录 例1.在程序前面板通过开关控制指示灯颜色变化. 例2.比较2个数值的大小,通过指示灯的颜色变化来显示比较 ...
- numpy.astype数据精度导致数据变化的问题
在用numpy.astype强制转换数据类型的时候,由于numpy精度的问题将会对长度超过16位的数据发生不可预见的变化. 见以下样例: a=np.random.randint(10000000000 ...
- WAS服务器负载测试软件导读
转帖:出处未知 你的Web服务器和应用到底能够支持多少并发用户访问?在出现大量并发请求的情况下,软件会出现问题吗?这些问题靠通常的测试手段是无法解答的.本文介绍了Microsoft为这个目的而提供的免 ...
- Java 最常见的 100+ 面试题和答案:面试必备
发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 博主已将以下这些面试题整理成了一个Java面试手册,是PDF版的. 需要pdf版的可以 ...
- 干货丨从概念到案例:初学者须知的十大机器学习算法
本文先为初学者介绍了必知的十大机器学习(ML)算法,并且我们通过一些图解和实例生动地解释这些基本机器学习的概念.我们希望本文能为理解机器学习(ML)基本算法提供简单易读的入门概念. 机器学习模型 在& ...
- odoo tree视图过滤数据_在EA中建立优雅的仪表板视图
在EA中为什么需要仪表盘 在EA中可以建立需求模型.设计模型.code模型.测试模型,实现基于模型的管理,包括: 需求管理 质量管理 项目管理 这些管理需要对相应的模型元素进行统计,并以图表的形式展示 ...
- FPGA之道(80)静态时序分析(六)常用时序约束介绍(基于ISE的UCF文件语法)
文章目录 前言 常用时序约束介绍 时序环境约束 分组时序约束 TNM TNM_NET TIMEGRP 常用时序约束 周期约束 输入时钟周期约束 内部时钟周期约束 关联时钟周期约束 差分时钟周期约束 输 ...
最新文章
- 《Splunk智能运维实战》——3.11 制作折线图显示项目浏览量和购买量随时间的变化...
- 17、MySQL创建,执行事件
- vivo X21低调奢华 彭于晏携手黑金版来袭
- MFC 界面美化 Skinmagic
- ADSL断流问题分析
- docker数据持久化数据卷
- CCF201312试题
- Python导入jar包
- 拉普拉斯变换部分公式证明
- Mysql学习——建表语句详解
- java读取propertiies文件例子
- Excel怎么快速选中相同背景颜色单元格
- SOLIDWORKS凸台拉伸命令,你真的会用吗?
- 通信工程专业就业怎么样?难不难学?
- 智能耳机测试软件,智能可穿戴设备有哪些?解析可穿戴设备的作用和测试
- 无法定位程序输入点_except1于动态链接库
- php7.3 7.4,PHP 7.4 早期性能基准测试:与 7.3 差不多
- JAVA微信开发(四), 公众号普通红包
- GDUT22级寒假训练专题四
- 软件生命周期模型——瀑布模型
热门文章
- python网页信息_利用python处理网页信息
- python 判断文件夹是否存在 否则创建_10行Python代码自动清理电脑内重复文件,解放双手!...
- 10外置面板没声音_现在电脑机箱只能用外置光驱了?看我装了个隐蔽式光驱
- 手机浏览器被强制跳转_Azure front door 强制http redirect to https
- ubantu实现linux命令的实验_linux 基础知识
- 作为程序猿必须了解的生产者与消费者
- jQuery天猫商品分类导航菜单
- vue项目中使用sass的方法
- elasticsearch备份与恢复4_使用ES-Hadoop将ES中的索引数据写入HDFS中
- 一致性 hash 算法(consistent hashing)