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版本安装即可。

posted @ 2021-12-28 16:55  乐小天  阅读(821)  评论(0编辑  收藏  举报