Geos是一個GIS領域做拓撲分析的庫,目前最新的版本是3.5.0,詳細的介紹參考 GeosTrac
在我編譯該庫的過程中發現官方提供的檔案有一些問題,解決之後作個記錄,方便日後編譯的時候查閱:
Geos從3.5.0版本開始支援使用CMake的方式進行編譯,但是目前提供的CMake.txt配置有一些問題,當使用CMake產生工程的時候出現以下錯誤:
解決的方案參考: cannot build geos 3.5.0 需要下載兩個檔案: 1.CMakeLists.txt替換原來的CMakeLists.txt 2.GenerateSourceGroups.tx將該檔案的尾碼名修改為.cmake,並拷貝到geos-3.5.0\cmake\modules目錄下 之後重新Configure一下並Generate產生工程,使用VS開啟產生好的工程,如下圖所示:
工程中geos用來編譯動態庫geos(產生goes.lib和geos.dll),geos-static產生的是靜態geos庫(產生libgeos.lib),geos_c是產生C語言的庫(geos_c.lib和geos_c.dll),可以根據自己的需求編譯相應的庫。 編譯該解決方案,發現在編譯geos工程的時候報錯:
這是因為工程中某個檔案引入了標頭檔 windows.h,導致windows.h中定義的max宏與c++標準庫中的std::max衝突,具體出錯的位置在BufferOp.cpp檔案中的第89-92行。解決的方法很簡單,在std::max中加上括弧,不讓它進行宏替換,而是調用std::max這個函數,也就是修改為:
//原始的檔案 double envMax = std::max( std::max(fabs(env->getMaxX()), fabs(env->getMinX())), std::max(fabs(env->getMaxY()), fabs(env->getMinY())) ); //修改之後: double envMax = (std::max)( (std::max)(fabs(env->getMaxX()), fabs(env->getMinX())), (std::max)(fabs(env->getMaxY()), fabs(env->getMinY())) );
修改之後重新編譯一下即可。
附錄:我把下載的檔案上傳到了資源共用中,可以從裡面下載: 下載連結