對GEOS庫的學習,源於一個項目:要在c++中判斷二維平面中兩個多邊形的關系(無論凹凸)。也就是判斷兩個多邊形是否相交、相容等。聽起來很簡單,可實現起來卻比較難,而項目又催得緊。於是我去搜索了一下,看是否有相關的開源庫,用於判斷空間關系的。沒想到還真有,比如:基於JAVA語言的JTS庫,基於Javascript的openlayers庫,以及基於c++的geos庫等。
搜索了一下關於geos庫的使用教程,以及官方示例文檔,幾乎為0。官方只有提供API文檔,沒有提供tutorial之類的東西,其它網友的教程更是沒有,想學就得自己去學,去摸索。這要了親命了!!只有自己慢慢去啃吧,好在不是太難。把自己所摸索的記錄下來,便成了這些文字。自己摸索學習,難免會有很多錯誤,希望看見了的給予指正。
關於geos庫的編譯,其實很簡單
我使用的是vs2012+geos3.50版本。
1. 下載geos-3.5.0,放在d:\geos350中
下載網站:http://trac.osgeo.org/geos/
2. 進入Visual Studio Tools下的VS2012 開發人員命令提示,本例為
C:\Program Files (x86)\Microsoft Visual Studio 11.0>
3、依次執行如下命令
>VCVARS32.BAT >cd d:\geos350 >atuogen.bat >nmake /f makefile.vc >
編譯成功后,會在d:\geos350/src目錄下生成geos.lib, geos_i.lib, geos_c_i.lib, geos.dll, geos_c.dll等五個文件
接下來,在VS中新建項目后,需要進行配置,只需要三處地方:
第一處:屬性--配置屬性---c/c++---常規,添加附加包含目錄d:/geos350/include
第二處:屬性--配置屬性---鏈接器---常規,附加庫目錄d:/geos350/src
第三處:屬性--配置屬性---鏈接器--輸入,附加依賴項:geos_c_i.lib (依賴geos.lib會有“檢測到RuntimeLibrary不匹配項”的錯誤,沒找到原因)
配置完好,就可以寫代碼進行測試:
最簡單的測試代碼:
#include <iostream> #include "geos.h" using namespace std; int main() { cout<<"GEOS庫版本為:"<<GEOS_VERSION<<endl; }
注意要引入geos.h頭文件。復雜點的測試,可參考我的另一篇文章http://www.cnblogs.com/denny402/p/4965213.html
最后,運行完你的測試代碼后,還需要將geos_c.dll復制到項目下的DEBUG目錄下。