本文記錄一下把geojson格式的數據制作成本地的矢量切片,並在mapbox中展示的過程。
1.切片
1.1 矢量數據需要先轉換為geojson,如果是shp格式可以使用QGIS或者下載shp2geojson進行轉換。
1.2 使用tippecanoe進行切片,tippecanoe能從大量的 GeoJSON、Geobuf 或 CSV 特征集合中創建矢量瓦片。
在 Mac OSX 系統上安裝 tippecanoe 比較簡單,直接在 Terminal(終端)中輸入下面的代碼:brew install tippecanoe 即可。windows平台需要借助Cygwin從源碼安裝,步驟見文章末尾。
1.3 Cygwin64 Terminal中切換到數據目錄,輸入:
1 tippecanoe -o outfile.mbtiles -Z8 -z20 infile.geojson
參數說明: -o outfile 輸出的切片,是.mbtiles格式的文件,該文件是一個sqlite庫
-Z 是切片的最小zoom, -z 切片的最大zoom
infile可以是多個,這樣會按照圖層分別存放切片
特別注意,-e 可用於將 tile 寫入指定的目錄而不是 mbtiles 文件,想要將矢量瓦片發布到 Web 服務的開發者可以使用這個功能(第三部分有介紹)。
參數詳細介紹可以參考官方文檔。
2.查看
mbtiles格式的查看需要使用mbview,這一個node項目
可以 npm install -g mbview 命令安裝后,進入 .mbtiles 目錄,輸入mbview filename.mbtiles,這是會報缺少token的異常:

於是加入了MAPBOX_ACCESS_TOKEN的參數(可以注冊mapbox賬號獲取token),然而還是報錯...

無奈之下看了源碼,發現token需要用MapboxAccessToken名稱:

修改后,再執行命令,顯示啟動了服務

同時瀏覽器也顯示切片地圖。

瀏覽器F12可以查看加載的瓦片。

3.展示
mbtiles可以通過node-mbtiles及其他mbtiles-server發布出來,做為數據源給mapbox展示。
本文介紹另外一種使用方式,即不依賴map server 把切片以ZXY文件組織的方式放入web服務器中,mapbox使用形如 http://localhost:9002/laketile/{z}/{x}/{y}.pbf的地址訪問。
在1.3部分說過 -e outdir 參數可以將切片放入目錄,生成的結果如下圖:

然后在nginx中添加以下配置把pbf發布出來:
1 location /laketile { 2 alias E:/code/00test/MapBox/mbutil/lake; 3 add_header 'Access-Control-Allow-Origin' '*'; 4 }
在mapbox中添加代碼顯示數據:
1 map.on('load', function(){ 2 map.addLayer({ 3 "id": "lake", 4 "type": "fill", 5 "source": { 6 type: 'vector', 7 tiles: ['http://localhost:9002/laketile/{z}/{x}/{y}.pbf'] 8 }, 9 "source-layer": "lake", 10 'layout': {}, 11 'paint': { 12 'fill-color': '#088', 13 'fill-opacity': 0.8 14 } 15 }); 16 });
打開瀏覽器,發現沒有顯示數據,console報 Unimplemented type 3 的錯誤。

通過不懈努力發現原來是tippecanoe在制作切片進行了gzip壓縮,而瀏覽器不知道.pbf是壓縮過的,不過tippecanoe是很強大的,留了很多參數,加上 --pC就可以生成未壓縮的切片。
1 tippecanoe -e lakepbf -pC -Z8 -z14 -f lake.geojson
再次發布、訪問就沒問題了。這種方式會生成很多小文件,不方便管理,但是對於需要離線部署、數據量不大的情況還是挺有用的,不需要專門的map server,可以和前端代碼一起放入nginx。
4.windows平台下安裝tippecanoe
1.下載cygwin的安裝包setup-x86_64.exe,地址:http://cygwin.com/setup-x86_64.exe
推薦在c盤根目錄下創建cygwin目錄,把setup-x86_64.exe放入c:\cygwin中
2.安裝Cygwin terminal
cmd進入setup-x86_64.exe所在的目錄,即c:\cygwin
輸入:
1 setup-x86_64.exe -q -P zlib-devel,libsqlite3-devel,gcc-g++,make,python,git,gdal,python-gdal

中間可能會出現選擇下載源的地方,隨便選即可。稍等片刻,安裝完成后在桌面會創建快捷方式。

打開Cygwin terminal輸入: python -m ensurepip

3.下載tippecanoe源碼
git clone https://github.com/mapbox/tippecanoe.git

下載后的地址在Cygwin\home\{username}\tippecanoe目錄下。
(源碼也可以自行到github上下載,在第4步時需要進入自己下載的源碼目錄)
下載完成后打開源碼目錄下的makefile文件,注意不要使用notepad,可以用寫字板,
找到:
CXXFLAGS := $(CXXFLAGS) -std=c++11
修改為:
CXXFLAGS := $(CXXFLAGS) -std=c++11 -U__STRICT_ANSI__
4.編譯安裝
在Cygwin terminal中進入tippecanoe源碼目錄。
如果是使用Cygwin terminal命令下載的源碼,直接輸入cd tippecanoe即可,如果是自行下載的源碼請輸入全路徑,cd xxx/xxx/tippecanoe
然后依次執行
make
make install
到此安裝完畢,詳細可參考https://github.com/GISupportICRC/ArcGIS2Mapbox#installing-tippecanoe-on-windows
如有不清楚的地方,歡迎留言交流~
