GeoServer發佈OSM地圖

參考順序:

  1. CentOS7.5安裝Postgresql10.5和PostGISCentOS7.6安裝Postgresq11和PostGIS
  2. CentOS7部署GeoServer
  3. CentOS7部署osm2pgsql
  4. GeoServer發佈OSM地圖

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預覽一下地圖吧

發佈了55 篇原創文章 · 獲贊 18 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章