GeoServer安装与存储地图数据
GeoServer安装与存储地图数据
先理解概念:WMS、WFS、WCS、WPS、WMTS、WMSC、TMS等常见地图服务的区别
地理信息系统(Geographic Information System或 Geo-Information system,GIS)有时又称为“地学信息系统”。它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。
离线地图架构方式
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版本安装即可。