參考順序:
- CentOS7.5安裝Postgresql10.5和PostGIS(CentOS7.6安裝Postgresq11和PostGIS)
- CentOS7部署GeoServer
- CentOS7部署osm2pgsql
1. 創建圖層數據表
osm_db中包含了planet_osm_line,planet_osm_point,planet_osm_polygon和planet_osm_roads四個有數據的表,我們要爲各個圖層分別配置樣式,就應該爲這些數據歸歸類;方法有兩種
一是使用這四個基礎數據表中再創建新的數據表;
二是以這四個表爲基礎,創建視圖(View);
效果都一樣,不過視圖在應用時會慢點,我的CPU太低級,但是硬盤還湊合,所以我們採用第一種方式吧
先下載本文中將用到的各種腳本和批處理文件osmsld.zip,然後放到合適的位置解壓
wget -O osmsld.zip https://download.csdn.net/download/junlong750/12149541
unzip osmsld.zip
現在就可以正式創建圖層表了,登錄postgres用戶,然後使用osm_db的owner(你想要在GeoServer中使用的那個用戶運行SQL腳本文件),不要使用無關用戶,不然後面你得一個個得去修改權限。
su postgres
psql -U postgres -W -d osm_db -a -f /tmp/osmsld/create_tables.sql
創建也沒有非常慢,大概不到2分鐘生成完了,我們來看一下數據庫結構,可以看出來比之前多了不少表出來。
2. 在GeoServer中創建工作空間和數據源
1、創建工作區
2、新建數據源
3. 創建樣式和圖表
可以手動創建,也可以使用批處理文件自動創建,樣式和圖表加起來近50個,你選哪個?反正我選自動創建了
回到GeoServer的服務端,將之前我們下載的osmsld.zip文件中的sld.zip解壓開 unzip sld.zip ,然後稍修改下SLD_create.sh文件,主要是修改GeoServer的REST API相關參數,如下:
通常而言,既然是REST服務了,應該遠程和本地調用都沒有問題,然而在本例中,經實測,發現localhost可以,如果在另一臺linux上遠程調用REST服務,會出現錯誤,導致不能創建圖層,原因以後在查吧,先使用本地調用。
在本文件的最下面,也修改點內容,將兩行暫不用的命令註釋掉,如下:
然後進入剛纔解壓sld.zip形成的sld目錄 cd sld ,然後調用以下命令
cd sld
sudo sh /tmp/osmsld/SLD_create.sh
看到上面這個畫面就說明成功了。
如果整個過程順利應該就可以在GeoServer的圖層和樣式裏面能看到結果了:
如果你的點比較低,很有可能只能看見樣式,而看不見圖層,那最好找找原因,得新來一遍,osmsld.zip包中有一個SLD_delete.sh文件可以自動幫你清理剛纔的工作,不過貌似它清理過頭了,把工作空間和數據源也給清掉了,因爲我都在測試環境下在用,所以會看到在清理後工作空間和數據源裏面空空如也,所以SLD_delete.sh批處理文件慎用,不要將你其他有用的東西刪掉了!!!
在使用SLD_delete.sh之前,照例先修改下其配置,如下:
4. 創建圖層組
執行到上一步,應該是可以看到圖層樣式了,但是那隻能顯示整個地圖的一個層,我們還需要建個完整的圖層組,用來展示完整地圖,同樣手動方式和自動方式讓你選,你選哪個?
我還是用自動方式吧
先做個準備工作,打開osmsld.zip包中的layergroup.xml文件,將ocean這一節給刪掉,爲啥要刪呢?因爲我們並沒有導入海圖數據,因我電腦太搓的原因,今天時間有限,不導ocean數據了,另找時間專門開貼導ocean數據吧
隨後打開SLD_create.sh,滾動到最底部看一眼,我們要照着這兩行命令創建圖層組
curl -v -u admin:geoserver -XPOST [email protected] -H "Content-type: text/xml" http://localhost:8080/geoserver/rest/workspaces/chinaosm/layergroups
最後,如果想使用命令刪除掉這個圖層使用下列命令即可
curl -v -u admin:geoserver -XDELETE http://localhost:8080/geoserver/rest/workspaces/chinaosm/layergroups/osm
5. 添加地名中文字體
進行完上一步操作後,在Layer Preview中就可以預覽地圖了,但是地名的顯示字體不一定是我們想要的,所以接下來我們看看如果添加相要的字體,如微軟雅黑,設置字體部分參考了這裏。
首先,給GeoServer所在的CentOS7安裝微軟雅黑,從Windows操作系統的C:\Windows\Fonts中複製微軟雅黑,放到一個指定文件夾中,就會得到一兩個文件:msyh.ttf、msyhbd.ttf,將這兩個字體打包到一個zip文件夾中,然後想辦法弄到CentOS的/tmp文件夾中。怎麼弄自已想辦法(我爲了方便,在Windows上弄了個web服務器,這樣不論怎麼折騰虛擬機,服務器上的東西都可以使用)
安裝字體管理工具
sudo yum install fontconfig mkfontscale -y
創建字體目錄,並且將msyh.ttf和msyhbd.ttf複製到字體目錄中
sudo mkdir -p /usr/share/fonts/win
sudo mv msyh.ttf msyhbd.ttf /usr/share/fonts/win
建立字體索引信息,更新字體緩存
cd /usr/share/fonts/win
sudo mkfontscale
sudo mkfontdir
fc-cache
然後重啓系統, reboot ,重啓好後先查看服務器狀態,由原來28個字體可用變爲30個字體可用了,good!看一眼
打開GeoServer的Styles菜單,查找到highway-label樣式,並打開編輯,將其中的樣式內容複製到notepad中,然後全使用Ctrl + H將所有“DejaVu Sans”替換成"微軟雅黑",再將notepad中的樣式複製到樣式編輯器中,然後點擊Validate驗證,如果沒有錯誤就可以保存了。
最後,我們在Layer Preview中使用OpenLayers預覽一下地圖吧