1. 程式人生 > >OSM地圖本地釋出-如何生成各省市向量地圖

OSM地圖本地釋出-如何生成各省市向量地圖

[TOC] ## 1、緣起 1. `openmaptiles`提供了一套OSM資料使用的完整解決方案,在前面文章[如何實現OSM地圖本地釋出並自定義配圖](http://gisarmory.xyz/blog/index.html?blog=OSMVectorTiles)中,我們詳細介紹瞭如何安裝`openmaptiles`,並生成了一個阿爾巴尼亞地區的“helloworld”。 2. 參照上篇文章的內容,輸入下面的命令,就可以生成中國地圖。 ``` ./quickstart.sh china ``` 3. 上面命令,需要耐心等待,我電腦4核8G,用了16個小時左右。最終得到了中國大陸地區,0-7級的向量瓦片資料。 4. `openmaptiles`主要是從[geofabrik](https://download.geofabrik.de/)網站下載OSM資料,geofabrik在中國地區下載的最小顆粒度是中國大陸和臺灣,沒有辦法按大陸地區的省,或按自定義區域進行下載。 ## 2、問題 1. 能不能按自定義區域生成地圖? 2. 有哪些方法能提高處理速度? ## 3、分析 1. `openmaptiles`生成地圖分4個步驟:1、資料下載、2、資料入庫、3、資料分析、4、生成向量瓦片。 2. 問題一分析: 1. 前三個步驟,只能按整個中國的範圍和所有層級來處理,第4步可以通過控制範圍、層級來實現自定義區域的切圖。 3. 問題二分析: 1. 第1步資料下載的時間取決於網速。 2. 第2步資料入庫和第3步資料分析的時間取決於機器效能。 3. 第4步生成向量瓦片的時間取決於機器效能、切圖範圍、切圖層級。 4. 想要提高處理速度,可以針對上面的要素,對症下藥。 ## 4、生成自定義地區向量瓦片 1. 前面的`./quickstart.sh china `命令包含1-4步,**後續就不要再執行這個命令了**,不然又得重來16個小時。前面已經提到過,這個命令在第4步,預設會切整個中國範圍0-7級的地圖。想要更大層級的地圖,只需要另外單獨執行第4步就可以。 2. `openmaptiles`生成的向量瓦片,最大到14級,設定再大也沒有用,因為前三步沒有對更大級別的資料進行分析。 3. 第4步`生成向量瓦片`的命令,會把上一次的瓦片清除,如果想把兩次的結果放在一個檔案中,比如想把中國0-7級和北京8-14級的向量瓦片放在一個.mbtiles檔案中,則需要修改配置,讓程式不清除上一次的結果。 4. 下面以生成全國範圍0-7級地圖+北京範圍8-14級地圖為例,說明如何來修改配置。 5. 為避免重啟電腦後就各種不靈的尷尬,我們從重啟電腦後開始。 ### 4.1、啟動docker 1. 檢查docker是否啟動 ``` docker run hello-world ``` 2. 如果沒有啟動,輸入下面命令啟動docker。如果有需要,後續可以自己把docker設定為開機自啟動。 ``` systemctl start docker ``` ### 4.2、啟動postGIS容器 1. 前面的`./quickstart.sh china `命令在執行過程中,下載了4個docker映象,啟動了若干個容器,工具類容器在使用完成後就銷燬了,資料類和應用類的容器會保留。([映象和容器的關係](https://blog.csdn.net/qq_40722827/article/details/102827125)) 2. 下圖紅框中的容器就是存放資料的,它裡面有個postGIS,我們需要啟動這個容器。 ![](http://blogimage.gisarmory.xyz/20201222095847.png) 3. 進入`openmaptiles`資料夾 4. 啟動postGIS容器 ``` make start-db-preloaded ``` ### 4.3、設定不清理上次的結果 1. 開啟`Makefile`檔案,找到generate-tiles命令,下圖紅框的位置,就是清除上次結果檔案的命令,我們在這行前面輸入`#`號,把它註釋掉。 ![](http://blogimage.gisarmory.xyz/20201221130844.png) ### 4.4、刪除預設切圖範圍 1. 程式預設會用china.bbox中的引數作為切圖範圍,我們把這個檔案刪掉,後續在.env檔案中配置。 2. china.bbox檔案在`data`資料夾中,刪除命令: ``` rm -f ./data/china.bbox ``` ### 4.5、修改切圖層級和範圍 1. 開啟.env檔案 2. 修改切圖的層級`MIN_ZOOM`和`MAX_ZOOM` ![](http://blogimage.gisarmory.xyz/20201221130854.png) 3. 修改切圖的範圍`BBOX`,格式為:minX,minY,maxX,maxY ![](http://blogimage.gisarmory.xyz/20201221130905.png) ### 4.6、生成瓦片 1. 輸入下面命令,生成瓦片 ``` make generate-tiles ``` 2. 生成的結果是`tiles.mbtiles`檔案,在`data`資料夾中 ### 4.7、重複操作 1. 重複4.5和4.6步驟,修改層級和範圍,就能把多次的結果放在一個檔案中。 ## 5、總結 1. `openmaptiles`生成地圖分4個步驟:1、資料下載、2、資料入庫、3、資料分析、4、生成向量瓦片。 2. 中國地區生成地圖的最小顆粒度是中國大陸和臺灣,沒有辦法按大陸地區的省或按自定義區域進行生成。 3. 前三個步驟,只能按整個中國的範圍來處理,第4步可以通過控制生成範圍、生成層級來實現生成自定義區域的地圖。 4. 前三個步驟只需要執行一次,最後一個步驟可以多次執行。 5. 如果想把多次生成的向量瓦片放在一個檔案中,可以設定不清除上次生成的結果。 * * * 原文地址:[http://gisarmory.xyz/blog/index.html?blog=OSMOpenmaptiles](http://gisarmory.xyz/blog/index.html?blog=OSMOpenmaptiles) 關注《[GIS兵器庫](http://gisarmory.xyz/blog/index.html?blog=wechat)》公眾號, 第一時間獲得更多高質量GIS文章。 ![](http://blogimage.gisarmory.xyz/20200923063756.png) 本文章採用 [知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 ](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh)進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名《GIS兵器庫》(包含連結:  [http://gisarmory.xyz/blog/](http://gisarmory.xyz/blog/)),不得用於商業目的,基於本文修改後的作品務必以相同的許可釋出。