在 Docker 上搭建 PostGIS 数据库实现空间数据存储及可视化

PostGIS

已经有PostGIS经验的大佬可以忽略此段了。解释 PostGIS 之前需要介绍 PostgreSQL (简称 postgres ); postgres 是一个数据库服务器软件,由加州大学伯克利分校计算机系开发;部署在服务器上可以由不同数量的客户端连接,进而操作postgres 数据库中的数据。PostGIS 是在 postgres 之上的一款扩展软件,他主要用来存储及操作空间数据(矢量和栅格),还可以对进行空间分析。

Docker

对于一位不熟悉命令行的用户来说可能Docker 是一头野兽;有点吓人吧。 因为他的大部分操作都是基于命令行的;但是它为您提供了一种构建和运行软件的方式,通过构建一种名为LXC容器的技术,以非常一致和可控的方式运行软件。

对于GISer来说,Docker 和 PostGIS 又意味着什么呢? 如果有 Docker 和 PostGIS 技术,GISer或者其他人都能以最小的配置在任何机器上安装软件,而且环境都是一致的,这在开发和运维中至关重要。当然 Docker 这项技术并不限于和 PostGIS 结合。

安装Docker

Docker 是夸平台的可以安装在任何机器上。前面已经有关于 Docker 安装及使用的文章,可以去参考,在这就不去一一解释了,直接给出通过 Vagrant 安装的简略步骤。

环境

注: 因为我们安装好的 PostGIS 要和我们本机的软件进行通信,所以需要使用 host-only 网络, 且指定IP为192.168.33.10。

Vagrantfile文件内容

注:假定已安装Virtual Box 及 Vagrant.

安装 centos 系统

查看虚拟机系统状态

连接 centos 虚拟机

安装Docker, 安装参考官网

在刚才连接的虚拟机中执行如下命令

解决权限问题

安装 PostGIS 镜像

docker run --name=postgis 告诉 docker新建一个名为postgis的镜像

-d 后台运行

-e POSTGRESUSER=sde 通过-e参数向镜像写入POSTGRESUSER=sde的环境变量作为 PostgreSQL的超级用户,你可以在任何地方改变他。

-e POSTGRESPASS=sde 通过-e参数向镜像写入POSTGRESPASS=sde的环境变量作为 PostgreSQL的超级用户的密码,你可以在任何地方改变他。

-e POSTGRESDBNAME=gis 通过-e参数向镜像写入POSTGRESDBNAME=gis的环境变量作为操作 PostgreSQL 的当前数据库,你可以在任何地方改变他。

-e ALLOWIPRANGE=0.0.0.0/0 通过-e参数向镜像写入ALLOWIPRANGE=0.0.0.0/0的环境变量,使任何客户端都可以连接当前数据库的配置,你可以在任何地方改变他。

-p 5432:5432 因为 PostgreSQL 向外暴露5432,我们要使用外面实体机的 pgAdmin 连接Docker中的数据库,故向外映射5432端口,又因为 centos 虚拟机和实体机质检室host-only网络,故在连接。

-v $(pwd):/var/lib/postgresql 挂载(bind)当前目录与PostgreSQL生产的数据库,这样两边的数据会同步。

--restart=always 创建一条自动启动的规则,告诉 Docker , 每次启动的时候 postgis 容器自动启动。

kartoza/postgis:9.6-2.4 指定 postgis的镜像为 kartoza/postgis, 且版本为 PostgreSQL 9.6 和 PostGIS 2.4

查看运行的镜像

查看运行的 postgis 镜像的日志

主机 pgAdmin 连接 postgis 容器

连接信息

导入 ShapeFile 数据

使用主机上的PostGIS Shapefile Import/Export Manager 连接 Docker 中的 PostgreSql数据库

连接信息

添加文件后点击导入(import)

在数据库中查看导入的 shape 数据

连接QGIS

将数据导入 QGIS 查看

连接 ArcGIS Pro

连接信息

查看数据记录

注: 通过PostGIS Shapefile Import/Export Manager 导入的数据加载到ArcGIS Pro 中没有空间参考,故添加到地图中没有意义,但可以在 Catalog 中看到。

导入新数据到sde中

在导入之前需要在连接的数据库中创建与用户名一致的模式,在这我们是sde。

创建 sde 模式

导入数据

在 ArcGIS Pro 中查看数据

在 QGIS 中查看数据

总的效果

总结

整个过程通过使用 Vagrant 创建Centos系统,在创建的系统之上安装 Docker, 然后在Docker的基础上安装整合好的 PostGIS 镜像,并运行容器,接着使用 QGIS 和 ArcGIS Pro 连接PostGIS容器导入各种格式的数据、查看数据等。说了这么多,那这样做究竟有什么好处呢? 个人认为有以下几方面的好处。

解决开发和部署环境不一致性的问题;

快速安装所需软件,避免一个一个安装,节省时间;

数据库数据是存储在Linux上且绑定到容器里面的,保证了数据的安全性,同时可以多次挂载、测试及连接(link),即使是在原有镜像基础上增加了新的功能;

跨平台

参考

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180510G26CK500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券