RFC 39:OGR层代数

作者:Ari Jolma

联系人:ari dot jolma at aalto dot fi

状态:通过,在GDAL1.10中实现

总结

建议OGR层类和C API包含常用的覆盖分析方法。

使用GDAL进行空间分析的基本功能由GEOS提供。但是,GEOS对几何图形进行操作,通常人们使用地理空间数据层。矢量数据层在GDAL中由OGRLayer对象表示。因此,需要对层进行空间分析操作。

不幸的是,没有空间分析操作API的标准,但是可以通过使用现有的软件作为示例来创建一个有用的集合。

这些方法基本上依赖于两个层的所有特征的比较。使用特定于层的空间索引可能会有巨大的性能改进。这被认为超出了这些方法的范围,属于在层中迭代特征和随机访问特征的一般问题。由于这些原因,这些方法应该只被认为是方便的方法,而不是关系数据库中分析的替代方法。

实施

这些方法由OGRLayer类中的新方法(ogrsf_frmts.h和OGRLayer.cpp)和C API中的新调用(ogr_API.h)实现。Swig绑定(ogr.i)也用这些方法进行了扩展。

带有对OGR core和Swig绑定更改的修补程序附加到此页。补丁已经过了表面测试,但它不是按照GDAL的传统编写或格式化的。

向后兼容性

提议的添加将对C二进制兼容性产生影响,因为它们会更改API。

C++二进制接口将被破坏(由于在OGRelp类中添加了一个新成员)。

这些更改纯粹是扩展,对现有代码没有影响。

对驾驶员的影响

这些变化对驾驶员没有任何影响。

时间线

Ari Jolma负责执行这项提议。新的API应该在GDAL 1.11中提供。

需要讨论方法的名称和方法的内部逻辑(特别是属性和错误条件的处理)。

除了附加修补程序中的方法外,还应讨论其他方法。例如,可以很容易地将Append和Buffer方法添加到集合中。通用软件中当前可用内容的图示如下: http://courses.washington.edu/gis250/lessons/Model_Builder/

绩效评价

将46288个线串特征层与一个多边形特征层(约1/3个特征在一个特征内,许多特征仅部分在一个特征内)的相交分析表明,当方法层是Shapefile时,大部分时间用于从Shapefile读取特征。当方法层被复制到内存中时,大部分时间(83%)都花在OGRLineString::getEnvelope上。第六个版本的补丁包含了一个针对预先计算的图层包络的测试,在这种情况下,它可以加快计算速度约30%(在我的机器中,从2.44秒加速到1.76秒)。但大部分时间(82%)还是花在了OGRLineString::getEnvelope上。

投票历史

(2012年6月)+1来自Even,Frank,Howard,Tamas,Daniel