RFC 38:OGR快速打开(撤回)
作者:连鲁奥
联系人:spatialys.com上的even dot rouault
状态:撤回。
覆盖范围 RFC 46: GDAL/OGR unification
总结
提出OGR数据源开放机制依赖于GDAL驱动程序已经使用的GDALOpenInfo类来加速数据源的开放。加快速度的原因是传递给OGROpen()的文件将只打开和统计一次,而当前,它的打开和关闭次数与OGR驱动程序的次数相同。这对于网络文件系统,或者当试图打开一个根本不是OGR数据源的文件时,应该特别有用。
E、 例如,尝试打开当前不是OGR数据源的文件需要45个文件打开或stat操作:
$ strace ogrinfo -ro NEWS 2>&1 | grep NEWS | wc -l
45
预计如果/一旦所有驱动程序都迁移了,它只会减少到2个操作。
实施
与GDALDriver类似,OGRSFDriver类被扩展为具有pfnOpen成员,驱动程序将设置为指向自己的开放方法。
/* -------------------------------------------------------------------- */
/* The following are semiprivate, not intended to be accessed */
/* by anyone but the formats instantiating and populating the */
/* drivers. */
/* -------------------------------------------------------------------- */
OGRDataSource *(*pfnOpen)( GDALOpenInfo * );
更新ogrsfdriverregistrator::Open()方法以在迭代驱动程序时调用pfnOpen。未设置pfnOpen时,它将尝试调用OGRSFDriver的Open()方法(该方法支持驱动程序的渐进迁移)。
主要出于兼容性的原因,OGRSFDriver的virtual method Open()目前是纯虚拟的,现在将是一个常规的虚拟方法,它将有一个默认的实现,它将尝试调用pfnOpen。
带有OGR core更改的修补程序附加到此页。
向后兼容性
建议的添加不会对C二进制兼容性产生任何影响。
C++二进制接口将被打破(由于在OGRSFFDRAMER类中添加了一个新成员,而Open-()方法从纯虚拟变成了虚拟。
将为第三方OGR驱动程序保留源代码级兼容性。
对驾驶员的影响
现有的驱动程序是 not 需要迁移到RFC38,但强烈建议迁移。新的驱动程序 应该 使用RFC38机构来保持整体的快速打开。
本页附有几个驱动程序的迁移示例。
时间线
甚至鲁奥也有责任执行这项提议。新的API将在GDAL 2.0中提供。大多数树内OGR驱动程序将迁移到新机制。