GeoServer安装与存储地图数据
GeoServer安裝與存儲地圖數據
先理解概念:WMS、WFS、WCS、WPS、WMTS、WMSC、TMS等常見地圖服務的區別
地理信息系統(Geographic Information System或 Geo-Information system,GIS)有時又稱為“地學信息系統”。它是一種特定的十分重要的空間信息系統。它是在計算機硬、軟件系統支持下,對整個或部分地球表層(包括大氣層)空間中的有關地理分布數據進行采集、儲存、管理、運算、分析、顯示和描述的技術系統。
離線地圖架構方式
graph LR
Web-->MapServer;
Web-->BusinessServer;
MapServer-->MapDB;
BusinessServer-->OtherDB;
web端有業務數據和地圖數據,其中地圖數據來自地圖數據庫(空間數據庫+地圖文件),途徑地圖服務進行處理。本例選用開源地圖服務器GeoServer、對象關系數據庫PostSQL驗證第一個離線地圖樣例。
地圖下載
進入OpenStreetMap點擊右上角導出按鈕,依照步驟即可導出。
安裝PostGIS
postGIS向PostgreSQL添加空間類型、索引、函數,將其轉換成空間數據庫。
如果是在window OS下需先安裝對象關系數據庫PostgreSQL,再安裝PostGIS插件進行升級。我是再Linux環境下安裝,kartoza/postgis鏡像將兩者都集成進去了。
特別注意:linux最高版本才10.x,遠低于window版本,所以千萬不要下載latest版本,否則linux運行會出各種錯。
下載鏡像。
docker pull kartoza/postgis:9.6-2.4
安裝。
docker run -itd --name postgis -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=123 -e POSTGRES_DBNAME=gis -e ALLOW_IP_RANGE=0.0.0.0/0 -p 5432:5432 --restart=always kartoza/postgis
進入容器查看安裝情況
docker exec -it postgis bash
psql -h localhost -p 5432 -U postgres --password
\l
本地安裝pgAdmin
搜索pgAdmin,去官網下載14.x以上版本。連接服務器上的Postgres即可
本地安裝Postgres + PostGIS
本地的Postgres沒啥用,安裝它是為了方便使用PostGIS連接服務器上的Postgres。
因為postgis桌面程序非常好用,導入shp文件能自動建表自動添加記錄。
地圖存入空間數據庫
本地登錄PostGIS桌面程序,填寫數據庫地址、端口、用戶賬號密碼連接到服務器上Postgres。
導入shp文件,將下載的地圖文件全導入數據庫。
地圖服務器發布圖層
登錄GeoServer服務,數據存儲里添加數據源。這里有多種數據源選擇,我是把地圖數據存到了空間數據庫,所以選擇PostGIS數據源。
有了數據源就可以去發布圖層或者圖層組。
再之后點Layer Preview導航查看效果。
這里導的是全國地圖數據,加載非常慢,而且使用的是默認樣式,非常的丑。
附錄
問題1:安裝最新版鏡像,登錄用戶名不是admin/geoserver。
利用GEOSERVER_ADMIN_PASSWORD參數,修改密碼。詳情參考在運行時更改 GeoServer 密碼和用戶名
官網說明。
問題2:pgAdmin連接不上遠端postgres
因為postgres默認只允許本機連接,遠程連接要設置配置。監聽所有網段。
1、/var/lib/postgresql/data/pg_hba.conf 或者 /etc/postgresql/9.6/main/
添加host all all 0.0.0.0/0 trust
local all all trust
# IPv4 local connections:
host all all 0.0.0.0/0 trust
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
2、/var/lib/postgresql/data/postgresql.conf
listen_addresses = '*'
可能會用到的命令:
#docker 拷貝命令
docker cp postgres:/var/libxxxxxx /home
#修改完畢后重啟容器
docker restart postgres
問題3:could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host "192.168.54.206" and accepting TCP/IP connections on port 5432?
安裝postgis鏡像,pgAdmin連接不上。網上說法是該鏡像不是與postgresql組合鏡像。兩個解決辦法:其一,安裝postgresql,再在該容器安裝postgis;其二:下載11.0-2.5、10.0-2.4、9.6-2.4版本的kartoza/postgis鏡像。
我驗證了后一種方法可行。docker pull kartoza/postgis:9.6-2.4
docker run -t --name postgis -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=123 -e ALLOW_IP_RANGE=0.0.0.0/0 -e POSTGRES_DBNAME=gis -p 5432:5432 --restart=always -d kartoza/postgis:9.6-2.4
在此過程中嘗試過多個版本,反復修改pg_hba.conf文件網段反復重啟容器,甚至重新制作鏡像,都沒法成功,最好的效果也只是容器內部可進入數據庫,多數時候容器內部連接時也報上面的錯誤。
后來去官網PostgreSQL Database Download才發現linux系統最高只支持10.18版本。下載9.6版本安裝即可。
敵人總是會在你最不想它出現的地方出現!
總結
以上是生活随笔為你收集整理的GeoServer安装与存储地图数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode-206 反转链表
- 下一篇: 作为一名Android APP开发者的自