环境:vs2013,windows8.1
参考:http://www.cnblogs.com/begincsdn/archive/2012/07/22/2603621.html
http://www.cnblogs.com/mazhenyu/p/4150454.html
http://blog.csdn.net/qq503690160/article/details/7055203
一、geos简介
GEOS是一个集合形状的拓扑关系操作实用库(可能这么说不太准确),简单得说,就是判断两个几何形状之间关系和对两个几何形状进行操作以形成新的几何形状的库。其实学geos的好地方不是在GEOS的主站。而是在另一个地方,JTS Topology Suite (JTS)!事实上,GEOS是仿照JTS做的。它其实是JTS的C++实现。这里有几份文档,一份是开发者指南,一份是JTS技术说明书。GEOS主要支持几种操作和计算:空间关系计算,主要支持几种计算
使用GEOS的应用有PostGIS (C API),MapServer (C API),Quantum GIS (C API),OGR (C API),GRASS (C API),Shapely (C API),INGRES (C API),SpatiaLite (C API),MapGuide Open Source GeoDjango (C API),MapWindow GIS (C API), osm2pgsql (C++ API),osgEarth (C++ API),MonetDB (C API),rgeos (C API),其中还有软件包的FME和Autodesk MapGuide Enterprise。
二、编译
1、下载
http://trac.osgeo.org/geos/wiki
2、编译
使用CMake生成vs2013的工程sln文件,然后打开sln文件编译geos(动态库)或者geos-static(静态库)。
3、编译中的错误
1、max和min不识别,#include <algorithm>
2、找不到platform.h和version.h文件,将platform.h.vc和version.h.vc去掉.vc
三、示例程序
下面是求一个正方形的缓冲区的程序。
typedef Coordinate PT; GeometryFactory factory; CoordinateArraySequenceFactory csf; CoordinateSequence* cs1 = csf.create(5, 2); cs1->setAt(PT(-1, 1, 0), 0); cs1->setAt(PT(1, 1, 0), 1); cs1->setAt(PT(1, -1, 0), 2); cs1->setAt(PT(-1, -1, 0), 3); cs1->setAt(PT(-1, 1, 0), 4); LinearRing* ring1 = factory.createLinearRing(cs1); Geometry* p1 = factory.createPolygon(ring1, NULL); int nsize2 = p1->getCoordinates()->getSize(); Geometry* p2 = p1->buffer(1, 2,3);