[原]在GeoServer中為OpenStreetMap數據設置OSM樣式


轉載請注明作者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在線地圖,貌似還有不少的差距,但是總算是有個良好的開端了:)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM