摘要: GDAL&OGR库支持了大多数地理数据格式的读写,为GISer们使用最广泛的工具库。 OGR并没有对特征之间的空间关系计算提供原生支持。 可以看到,在早期的版本中,OGRGeometry类中的函数Intersect,Touch这些和几何相关的函数都被设计为虚的...
GDAL&OGR库支持了大多数地理数据格式的读写,为GISer们使用最广泛的工具库。
OGR并没有对特征之间的空间关系计算提供原生支持。
可以看到,在早期的版本中,OGRGeometry类中的函数Intersect,Touch这些和几何相关的函数都被设计为虚的。
Geos库扩展了OGR库的几何计算功能,为空间计算提供了接口。通常,OGRGeometry和geos::geom::Geometry的交互可以由wkb格式来完成,即它们以wkb为中间数据格式交换特征的几何数据。因为wkb是二进制的,解析速度很快,可以认为这种解析所耗费的时间为0(和空间计算的消耗相比)。
现在的GDAL版本,为GEOS的协作提供了原生支持。这依赖于GEOS库的API接口。位于GEOS库的目录capi/geos_c.h,提供了交互的接口原型。当然,编译geos库的时候,需要将geos_c.c源文件加入到工程中进行编译。
对于GEOS库来说,它只是一个Server,它不知道ogr库的存在。
OGR库要添加GEOS库的支持,需要添加geos库的部分头文件的路径,主要是两个文件,一个是capi/geos_c.h,一个是source/herders/geom/version.h。因此添加两个路径capi/和source/headers/就可以了。此外,还需要注意的一点就是,需要在编译OGR库的时候,预定义宏HAVE_GEOS,可以直接添加宏预定义到工程的属性中。这样这些几何函数会被实作,而不是返回一个0或是一个错误。
将GDAL,GEOS库分开编译为静态库,应用程序是另一个工程。解决方案中有三个以上的工程,它们可以良好运行。但是,GEOS对数据要求很严,要求Geometry符合ogc的SFS规范,不得自相交等,否则将会报出错误。