扩展OGR格式驱动(一)-无需外部依赖库
2013-05-11 10:39
162 查看
GDAL/OGR官方网站中给了编写栅格和矢量数据新格式的教程,OGR Driver Implementation Tutorial,但是没有给出具体的编译过程,这篇博文记录如何将新建的格式编入gdal/ogr。
(2) 这一部分实现后应该形成ogr_spf.h、ogrspfdatasource.cpp、ogrspfdriver.cpp、ogrspflayer.cpp四个源文件,其中头文件ogr_spf.h中最好加上宏定义:
ogrspfdriver.cpp文件中则需要添加驱动注册函数定义:
(3) 修改完成后在ogr\ogrsf_frmts文件夹下创建spf文件夹,将这四个源文件放入其中。
(2)修改ogrsf_frmts.h和ogrregisterall.cpp文件
在ogrregisterall.cpp中void OGRRegisterAll()函数中添加下面的代码:
在ogrsf_frmts.h中添加:
(3) 修改makefile.vc
打开ogr\ogrsf_frmts\generic\makefile.vc,在BASEFORMATS中添加-DSPF_ENABLED;
打开\ogr\ogrsf_frmts\makefile.vc,在DIRLIST中添加spf,在lib /out:中添加spf\*.obj;
转自:/article/5727977.html
一、继承实现Driver、DataSource、Layer
(1) 实现部分参考OGR Driver Implementation Tutorial,这个教程很详细,另外也可以阅读ogr某些格式的源码了解这一过程。下面这个是一个更为简单的Open方法实现:int OGRSPFDataSource::Open( const char *pszFilename, int bUpdate ) { // -------------------------------------------------------------------- // Does this appear to be an .spf file? // -------------------------------------------------------------------- if( !EQUAL( CPLGetExtension(pszFilename), "spf" ) ) return FALSE; if( bUpdate ) { CPLError( CE_Failure, CPLE_OpenFailed, "Update access not supported by the SPF driver." ); return FALSE; } std::cout <<"OGRSPFDataSource::Open( const char *pszFilename, int bUpdate )"<<std::endl; std::cout <<"Trying to open the datasource "<<pszFilename<< " ."<<std::endl; return TRUE; }
(2) 这一部分实现后应该形成ogr_spf.h、ogrspfdatasource.cpp、ogrspfdriver.cpp、ogrspflayer.cpp四个源文件,其中头文件ogr_spf.h中最好加上宏定义:
#ifndef _OGR_SPF_H_INCLUDED #define _OGR_SPF_H_INCLUDED class OGRSPFDriver : public OGRSFDriver { ... } class OGRSPFDataSource : public OGRDataSource { ... } class OGRSPFLayer : public OGRLayer { ... } #endif /* ndef _OGR_SPF_H_INCLUDED */
ogrspfdriver.cpp文件中则需要添加驱动注册函数定义:
void RegisterOGRSPF() { OGRSFDriverRegistrar::GetRegistrar()->RegisterDriver( new OGRSPFDriver ); }
(3) 修改完成后在ogr\ogrsf_frmts文件夹下创建spf文件夹,将这四个源文件放入其中。
二、修改编译配置文件
(1) 从其他格式文件夹下拷贝makefile.vc和GUNmakefile文件到spf目录下,使用VS或记事本打开修改:#makefile.vc文件 OBJ = ogrspfdatasource.obj ogrspfdriver.obj ogrspflayer.obj EXTRAFLAGS = -I.. -I..\.. GDAL_ROOT = ..\..\.. !INCLUDE $(GDAL_ROOT)\nmake.opt default: $(OBJ) clean: -del *.obj *.pdb
#GUNmakefile文件 include ../GDALmake.opt OBJ = ogrspfdatasource.o ogrspfdriver.o ogrspflayer.o CPPFLAGS := -I.. -I../.. $(GDAL_INCLUDE) $(CPPFLAGS) default: $(O_OBJ:.o=.$(OBJ_EXT)) clean: rm -f *.o $(O_OBJ) $(O_OBJ): ogr_spf.h
(2)修改ogrsf_frmts.h和ogrregisterall.cpp文件
在ogrregisterall.cpp中void OGRRegisterAll()函数中添加下面的代码:
#ifdef SPF_ENABLED RegisterOGRSPF(); #endif
在ogrsf_frmts.h中添加:
void CPL_DLL RegisterOGRSPF();
(3) 修改makefile.vc
打开ogr\ogrsf_frmts\generic\makefile.vc,在BASEFORMATS中添加-DSPF_ENABLED;
打开\ogr\ogrsf_frmts\makefile.vc,在DIRLIST中添加spf,在lib /out:中添加spf\*.obj;
三、检验编译后结果
保存所有修改重新编译gdal/ogr库,在bin下使用ogrinfo --formats命令查看:转自:/article/5727977.html
相关文章推荐
- 扩展OGR格式驱动(二)-需要外部依赖库支持
- 导入EXCEL报错:"外部表不是预期的格式错误"、文件格式和扩展名不匹配,文件可能已损坏或不安全的解决方法
- 扩展springMVC消息转换器来支持jsonp数据格式
- PHP5的外部扩展库
- ISO 8601日期扩展格式 与UTC 时间类型的相互转化
- 驱动移植:编译外部模块
- Web API 依赖注入与扩展
- Excel导入数据库出现“外部表不是预期的格式”错误的解决方法
- 扩展SpringMVC以支持绑定JSON格式的请求参数
- 基于MyBatis注解扩展,实现无需配置即可使用
- 在Eclipse RCP应用中利用扩展点机制解藕插件的依赖关系
- pbfunc外部函数扩展应用-在Powerbuilder中进行Http的GET、POST操作
- Apache Zeppelin使用入门指南:添加外部依赖
- C#获得自己想要设定不依赖于区域的日期格式
- 怎么在安卓Studio工程中加入外部依赖工程
- SSE4.1指令集系列之一----多字节绝对差值求和指令、水平最小值,整数格式扩展指令
- TMS320F2812外部接口分析与存储器扩展
- OpengGL扩展库glew 在VisualStudio下编译不能通过的问题(未识别的外部命令)
- 解决依赖.egg格式的库时py2exe打包失败的问题
- [转贴]浅析.NET Framework对PE文件格式的扩展