轉載請注明作者think8848和出處(http://think8848.cnblogs.com)
在前面幾篇文章中,我們講到了部署Postgresql,部署PostGis,部署GeoServer以及部署osm2pgsql並導入openstreetmap數據,現在到了發布和呈現OSM數據的時候了,今天我們先來個簡單的,使用開源的樣式文件呈現地圖,本文主要參考了這里。
1. 創建圖層數據表
到目前為止,chinaosmgisdb中包含了planet_osm_line,planet_osm_point,planet_osm_polygon和planet_osm_roads四個數據表,我們要為各個圖層分別配置樣式,就應該為這些數據歸歸類,方法有兩種,一是使用這四個基礎數據表中再創建新的數據表,二是以這四個表為基礎,創建視圖(View),效果都一樣,不過視圖在應用時會慢點,我的CPU太低級,但是硬盤還湊合,所以我們采用第一種方式吧。
先下載本文中將用到的各種腳本和批處理文件osmsld.zip,然后放到合適的位置解壓
wget -O osmsld.zip http://files.cnblogs.com/files/think8848/osmsld.zip
unzip osmsld.zip
現在就可以正式創建圖層表了,登錄postgres用戶,然后使用chinaosmgisdb的owner(你想要在GeoServer中使用的那個用戶運行SQL腳本文件),不要使用無關用戶,不然后面你得一個個得去修改權限。
su postgres psql -U think8848 -W -d chinaosmgisdb -a -f /tmp/osmsld/create_tables.sql
倒也沒有非常慢,大概2分鍾生成完了,我們來看一下數據庫結構,可以看出來比之前多了不少表出來。
2. 在GeoServer中創建工作空間和數據源
不好描述過程,直接上圖
創建工作空間
創建數據源
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 ,然后調用以下命令
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:111111 -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預覽一下地圖吧
------------------------2016年12月30日更新------------------------
這是經過專業配圖后的樣式(我們稱之為“午夜藍”Y(^_^)Y)
------------------------2016年12月30日更新結束------------------------
最后讓我們來對比一下OpenStreetMap,左邊是我剛發布的圖,右邊是OpenStreetMap在線地圖,貌似還有不少的差距,但是總算是有個良好的開端了:)