0、以前在ubuntu14.04中,由於某些緣由,mapnik安裝有問題,影響了後續進程python
next:熟悉mapnik的使用,搞懂其基本原理,打通相關關節linux
一、在mac中安裝mapnik,遇到了些問題ubuntu
1.一、brew直接安裝,安裝的時v3,python相關的binding,只存在於v2api
next:先解除某些軟連接,再安裝v2,又報如下錯誤,python2.7
This formula is keg-only, which means it was not symlinked into /usr/local.ui
Conflicts with boost-python in main repository.this
Generally there are no consequences of this for you. If you build yourspa
own software and it requires this formula, you'll need to add to yourcode
build variables:orm
LDFLAGS: -L/usr/local/opt/boost-python159/lib
估計爲,mapnik沒有經過版本號來作區分,不一樣版本在都安裝到系統庫時衝突,解決軟連接也不真正解決問題,因此綜合考慮下,採起了如下步驟
二、從新按順序安裝 mapnik2,mapnik
發現一個以前被忽略的問題,即使從新安裝,此庫所在位置也未加入到python的系統庫路徑,須要按照提示執行如下操做
$mkdir -p /Users/wangyao/Library/Python/2.7/lib/python/site-packages
$echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> /Users/wangyao/Library/Python/2.7/lib/python/site-packages/homebrew.pth
結果,python的綁定搞定了,可使用python寫些代碼驗證了,由於mapnik其實是v3,一般的示例代碼中,import mapnik2,會引起一個deprecated的warning,
wangyao:mapnik wangyao$ python
Python 2.7.10 (default, Oct 23 2015, 18:05:06)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import mapnik2
/usr/local/lib/python2.7/site-packages/mapnik2/__init__.py:27: DeprecationWarning: mapnik2 module has been deprecated,
please use 'import mapnik'
warnings.warn(msg, DeprecationWarning)
>>>
>>> import mapnik
>>> exit()
next: 這個問題可分3個層次來看
1) 這個warning應該就是某文檔中提到過的異常,其發生機理如上所示,解決方式可再翻閱文檔(我也沒記);
2) 這個warning是個warning,也能夠無論,或者若是認爲該庫開發人員堅持使用同一個key(以致於先安裝mapnik(3)就會阻礙後續mapnik2的安裝),能夠預判其v2和v3的接口在api層面是兼容的,簡單的說,就是將import mapnik2改成import mapnik,先看下效果
3) 整個渲染體系似沒有涉及到python,這個python-binding似沒必要要,那就是直接使用系統自帶的包管理系統安裝mapnik便可?
三、以前的ubuntu問題,實際上是後續步驟中的cpp代碼中,用到了這個庫,但未能在path中找到。這個問題待解決
3.一、找到ubuntu中得默認安裝路徑,或者能夠深刻研究一下爲什麼按包管理的方式安裝仍然未能被包含在include/link path中,不出意外,也應該會與開發者不區分版本的安裝方式有關
3.二、若是找到實際安裝路徑,甚至編譯安裝(有坑,icuuc總也安不上),能夠在後續步驟的安裝過程當中,額外指定mapnik的連接路徑
四、修改默認連接
系統的link還在mapnik2得,能夠經過如下方式改到連接mapnik
wangyao:mapnik wangyao$ brew link --overwrite mapnik
Linking /usr/local/Cellar/mapnik/3.0.9_1... 808 symlinks created
此期間,未遇到問題,如遇到文件權限問題,能夠先試下
chmod 755 /usr/local/lib/pkgconfig
五、連接使用
使用Python,能夠渲染出圖片
但,使用C++遇到問題了,頭文件mapnik/map.hpp,一路向下,會找不到一個unicode/uversion.hpp,該頭文件是icu定義的,
something else
一、mapnik的編譯,總遇到找不到icu的問題,期間安裝icu若干次
在stackoverflow中,傳送門,找到了(較大可能的)緣由,
The version number (used in the linkage) is set by the ICU headers, so it seems you are compiling against 4.8 but trying to link against something else (such as 4.6). uvernum.h (or in older versions, uversion.h) contains the version #.
next:
源碼編譯是王道。
開源項目,注意選取standalone的(啥都本身幹,任勞任怨造各類輪子的),又或者考慮了各類可能性,像寫程序同樣寫Makefile,又與時俱進的項目,也能夠列入選擇範圍。
Java大法好,退C++保平安。
接下來,若是還須要熟悉mapnik的一些技術原理,暫時先用Python頂着。