Inside GDALAllRegister之一: 五大部分
来源:互联网 发布:mac桌面工具栏不见了 编辑:程序博客网 时间:2024/06/05 10:55
基本信息
在GDAL的Tutorial中开篇即提到GDALAllRegister函数,它会注册所有已知的驱动,包括动态库自动加载的驱动。最关键是这句话:
If for some applications it is necessary to limit the set of drivers it may be helpful to review the code from gdalallregister.cpp.
我就是要精简GDAL的源代码,所以从分析GDALAllRegister函数开始是个好主意。
看之前已经有了几个问题:
第一,register具体指什么?
第二,已知的驱动,通过什么找到这些驱动?
这两个问题答案在 Inside GDALAllRegister之三: 注册指定驱动
第三,动态库自动加载的驱动又是什么?
答案在:Inside GDALAllRegister之二: 自动加载驱动
函数文档在这里:http://www.gdal.org/gdal_8h.html#a9d40bc998bd6ed07ccde96028e85ae26,没有太多信息。这个函数一般在程序中最开头的地方调用一次。
函数的五大部分
进入frmts/gdalallregister.cpp文件,看到这个函数,很长很长。可见支持的驱动非常之多。整个文件就只有这个函数的实现。这个函数主要分成若干部分:
第一部分,自动加载驱动:
GetGDALDriverManager()->AutoLoadDrivers();
第二部分,根据预编译指令注册特定的驱动
这里有很多,下面只列出两个:
#ifdef FRMT_vrt GDALRegister_VRT();#endif #ifdef FRMT_gdb GDALRegister_GDB();#endif
第三部分,注册一些raw formats
这里有很多,同样列出两个:
/* -------------------------------------------------------------------- *//* Put raw formats at the end of the list. These drivers support *//* various ASCII-header labeled formats, so the driver could be *//* confused if you have files in some of above formats and such *//* ASCII-header in the same directory. *//* -------------------------------------------------------------------- */#ifdef FRMT_raw GDALRegister_PNM(); GDALRegister_DOQ1();...#endif
第四部分,是注册未充分测试的驱动
放到了最后,我全部列出来,用到这写驱动要十分小心。
/* -------------------------------------------------------------------- *//* Our test for the following is weak or expensive so we try *//* them last. *//* -------------------------------------------------------------------- */#ifdef FRMT_rik GDALRegister_RIK();#endif#ifdef FRMT_usgsdem GDALRegister_USGSDEM();#endif#ifdef FRMT_gxf GDALRegister_GXF();#endif #ifdef FRMT_grass GDALRegister_GRASS();#endif#ifdef FRMT_dods GDALRegister_DODS();#endif#ifdef FRMT_wcs GDALRegister_HTTP();#endif#ifdef FRMT_hdf5 GDALRegister_BAG(); GDALRegister_HDF5(); GDALRegister_HDF5Image();#endif#ifdef FRMT_northwoodGDALRegister_NWT_GRD();GDALRegister_NWT_GRC();#endif#ifdef FRMT_adrg GDALRegister_ADRG(); GDALRegister_SRP();#endif#ifdef FRMT_blx GDALRegister_BLX();#endif#ifdef FRMT_pgchip GDALRegister_PGCHIP();#endif#ifdef FRMT_georaster GDALRegister_GEOR();#endif#ifdef FRMT_rasterlite GDALRegister_Rasterlite();#endif#ifdef FRMT_epsilon GDALRegister_EPSILON();#endif#ifdef FRMT_postgisraster GDALRegister_PostGISRaster();#endif#ifdef FRMT_saga GDALRegister_SAGA();#endif#ifdef FRMT_kmlsuperoverlay GDALRegister_KMLSUPEROVERLAY();#endif#ifdef FRMT_xyz GDALRegister_XYZ();#endif#ifdef FRMT_hf2 GDALRegister_HF2();#endif#ifdef FRMT_pdf GDALRegister_PDF();#endif#ifdef FRMT_jpegls GDALRegister_JPEGLS();#endif#ifdef FRMT_ozi GDALRegister_OZI();#endif
第五部分,将那些在环境变量GDAL_SKIP被明显标为不支持的驱动反注册
/* -------------------------------------------------------------------- *//* Deregister any drivers explicitly marked as supressed by the *//* GDAL_SKIP environment variable. *//* -------------------------------------------------------------------- */ GetGDALDriverManager()->AutoSkipDrivers();
由于涉及的内容太多,一篇太长,还是分到几篇具体分析吧。
- Inside GDALAllRegister之一: 五大部分
- Inside GDALAllRegister之二: 自动加载驱动
- Inside GDALAllRegister之三: 注册指定驱动
- Inside GDALAllRegister之四: 跳过driver
- 计算机软件也有“五大部分”
- 计算机组成的五大部分
- Inside COM学习笔记(五)
- 《Inside C#》笔记(五) 方法
- 对计算机硬件系统五大部分的介绍
- Inside QT Series (五):元对象系统(Meta-Object System)
- Inside Qt Series (五):元对象系统(Meta-Object System)
- Inside QT Series (五):元对象系统(Meta-Object System)
- Inside Qt Series (五):元对象系统(Meta-Object System)
- JS数值处理之一二三四五
- 五大常用算法之一:分治算法
- 五大常用算法之一:分治算法
- 五大算法之一--分治法
- 五大常用算法之一:分治算法
- image/pjpeg和image/jpeg问题
- hdu1677 Nested Dolls
- OpenQuant破解工具 | SmartQuant系列产品破解
- Android PDF开发资料
- 数据结构题目
- Inside GDALAllRegister之一: 五大部分
- ACE网络开发包
- Storm源码阅读(一):使用
- 读书方法论:经验的哲学观
- Struts2中的ModelDriven机制及其运用
- POP3(PostOfficeProtocol3,邮局协议)简介
- POJ 1251 Jungle Roads
- 题目1512:用两个栈实现队列-九度
- listview 放入 scrollview出现显示问题的解决方法