Mapnik 是高性能 C++ 地圖渲染庫,Python 綁定廣泛用於 TileMill、OpenStreetMap 瓦片生成。本文記錄 Ubuntu 14.04/16.04/18.04/20.04 完整編譯安裝流程,含依賴解決、內存不足應對、驗證測試。
sudo apt-get purge libmapnik* mapnik-utils python-mapnik
sudo apt-get install \
libboost-filesystem-dev libboost-program-options-dev \
libboost-python-dev libboost-regex-dev \
libboost-system-dev libboost-thread-dev
sudo apt-get install \
build-essential python-dev python-nose git
sudo apt-get install \
libicu-dev libxml2 libxml2-dev \
libfreetype6 libfreetype6-dev \
libjpeg-dev libpng-dev libtiff-dev \
libcairo2 libcairo2-dev python-cairo python-cairo-dev \
libcairomm-1.0-1 libcairomm-1.0-dev \
ttf-unifont ttf-dejavu ttf-dejavu-core ttf-dejavu-extra \
libgdal-dev python-gdal \
libproj-dev libsqlite3-dev
# Ubuntu 14.04 (PostgreSQL 9.3)
sudo apt-get install postgresql-9.3 postgresql-server-dev-9.3 postgresql-contrib-9.3 postgresql-9.3-postgis-2.1
# Ubuntu 16.04+ (PostgreSQL 9.5/10/12+)
sudo apt-get install postgresql postgresql-server-dev-all postgresql-contrib postgis
git clone https://github.com/mapnik/mapnik mapnik-2.3.x -b 2.3.x
cd mapnik-2.3.x
./configure && make && sudo make install
# 錯誤: virtual memory exhausted: Cannot allocate memory
# 原因: 模板元編程消耗大量內存,建議 4GB+ 內存
# 解決方案:
# 1. 增加 swap (臨時)
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 2. 限制並行編譯職程
make -j2 # 而非默認 -j$(nproc)
# 3. 分模塊編譯 (如支持)
# 4. 雲服務器臨時升級內存配置
# 錯誤: internal compiler error: Killed (program cc1plus)
# 原因: OOM Killer 終止編譯進程
# 同樣通過增加 swap、限制並行度解決
# 查看版本
mapnik-config -v
# 輸出: 2.3.0-pre
# Python 綁定測試
python -c "import mapnik; print(mapnik.__version__)"
# 渲染測試
python -c "
import mapnik
m = mapnik.Map(256, 256)
mapnik.load_map(m, '/usr/local/share/mapnik/demo/stylesheet.xml')
m.zoom_all()
im = mapnik.Image(256, 256)
mapnik.render(m, im)
im.save('test.png', 'png')
print('Render test passed')"
| Ubuntu 版本 | PostgreSQL | PostGIS | Mapnik 分支 |
|---|---|---|---|
| 14.04 | 9.3 | 2.1 | 2.2.x / 2.3.x |
| 16.04 | 9.5 | 2.2 | 2.3.x / 3.0.x |
| 18.04 | 10 | 2.4 | 3.0.x / 3.1.x |
| 20.04 | 12 | 3.0 | 3.1.x / master |
| 22.04 | 14 | 3.2 | 3.1.x / master |
virtualenv 隔離 Python 環境/opt/mapnik 避免污染系統路徑mod_tile + renderd 部署瓦片服務Mapnik 編譯安裝雖繁瑣,但掌握依賴鏈與內存優化,即可獲得最強地圖渲染引擎。
Linux 虛擬機 SCSI 設備 ID 與盤符不匹配的解決方案
Linux 用 rsync 秒刪海量小檔案:--delete-before 參數實戰教學
Linux xlsclients 指令詳解:列出 X 顯示器上運行的客戶端應用程式
Ubuntu 12.04 開機卡在 Checking Battery State 解決實錄
Ubuntu 系統配置 IPv4 網路參數完整教學(DHCP、靜態 IP、虛擬 IP、DNS)
Ubuntu 14.04 運行 adb 提示「No such file or directory」解決方案