用PostgreSQL 9.5 & PostGIS 2.2驱动全国OSM地图数据

上周把Asia区域的OSM的地图数据Down下来了,数据是放到服务器硬盘上了,可是还得放到数据库里,然后进一步用她来制作地图等等。由于这是一份地理空间数据,所以需要支持空间存储的数据库来驱动。首选PostgreSQL数据库 + PostGIS的开源数据库方案,下面就重头开始搭建PostgreSQL数据环境,将OSM的数据导入数据库中。

PostgreSQL + PostGIS on CentOS 7

1.安装yum源

采用Yum源来安装,由于CentOS默认Yun安装对应的PostgreSQL和PostGIS版本较低(貌似是9.2),这里我采用9.5的版本来进行部署。

首先安装添加Yum源,RPM源的地址可以从https://yum.postgresql.org/repopackages.php获取。根据要部署的OS版本来选择不同的版本库,查看服务器操作系统类型和版本。

$ uname -a
Linux localhost.localdomain 3.10.0-514.21.1.el7.x86_64 #1 SMP Thu May 25 17:04:51 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

根据所使用的平台系统类型和版本选择正确的安装源。

PostgreSQL 9.5版本的CentOS 7 RPM源(https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-3.noarch.rpm

当然现在最新版本为10.0,也可以部署9.6的版本,这里以9.5为例。

yum install https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-3.noarch.rpm
yum update
2.安装postgresql95-server

部署PostgreSQL 9.5客户端:(可选项)

sudo yum install postgresql95 postgresql95-odbc PyGreSQL

部署PostgreSQL服务端以及相关依赖包

sudo yum install postgresql95-server postgresql95-contrib postgresql95-devel
3.初始化数据
sudo /usr/pgsql-9.5/bin/postgresql95-setup initdb
4.启动数据库服务
sudo systemctl start postgresql-9.5

开机自动启动数据服务:

sudo systemctl enable postgresql-9.5.service
5.数据库配置

由于默认配置不支持密码认证,同时仅可供本地服务器访问,需要进行相关配置。编辑pg_hba.conf文件,设置数据库的远程可访问性。增加host all all 0.0.0.0/0 md5来信任远程连接。

sudo vi /var/lib/pgsql/9.5/data/pg_hba.conf

《用PostgreSQL 9.5 & PostGIS 2.2驱动全国OSM地图数据》 pg_hba配置

编辑配置postgresql.conf文件,开启远程访问:

sudo vi /var/lib/pgsql/9.5/data/postgresql.conf

《用PostgreSQL 9.5 & PostGIS 2.2驱动全国OSM地图数据》 postgresql.conf配置

生产环境可根据具体的网络策略来进行设置。

重启数据库服务

sudo systemctl restart postgresql-9.5

设置防火墙及访问端口

sudo firewall-cmd --zone=public --add-port=5432/tcp --permanent
sudo firewall-cmd --reload

可使用数据库客户端连接访问,测试是否安装及配置成功。

《用PostgreSQL 9.5 & PostGIS 2.2驱动全国OSM地图数据》 数据库连接测试

6.安装PostGIS
sudo yum install postgis2_95 postgis2_95-devel postgis2_95-client

其中postgis2_95-client包含PostGIS的命令行工具shp2gpsql, pgsql2shp, raster2pgsql,方便导入或导出空间数据。

OSM数据入库

PostgreSQL数据库准备就绪,将下载的asia-latest.osm.pbf数据导入。生态系统提供了一批免费工具和开源组件。

  • osmosis:基于Java的处理OSM数据的命令行工具,可以从数据库创建地图Dump、加载Dump到数据库;基于数据库历史表生成变更集;把变更集应用到数据库;根据两个地图Dump生成变更集;重新排序Dump中的数据;根据多边形边界框抽取地图等等。
  • osmum:基于C++、JavaScript的处理OSM数据的框架。
  • osm2pgsql:基于C++的导入OSM到PostgreSQL的命令行工具。

直接使用osm2pgsql工具将数据导入数据库中;首先使用上述sql创建数据库,并且建立空间扩展。

createdb osm
psql -d osm -c 'CREATE EXTENSION postgis; CREATE EXTENSION hstore;'

其中osm就是我的数据库名称。然后使用下面的命令导入之前下载好的数据

osm2pgsql -c -d osm --slim -C 2048 --flat-nodes /tmp/flat.files --number-processes 4 -U postgres -W -H 192.168.120.30 -P 5432 china-latest.osm.pbf

这里有几个地方要注意,一个是-C选项最好指定你电脑的内存的75%,单位为 Mb,并且最大只能为30000,–flat-nodes 用来指定一个文件路径,存放这个文件的位置至少要有20G的空闲空间(如果导入全球数据的话)。

导入全国的数据大约花了40多分钟,完成后会有一个概览。

node cache: stored: 48136826(100.00%), storage efficiency: 50.52% (dense blocks: 427, sparse nodes: 45890166), hit rate: 100.00%

预览地图数据

使用QGIS工具,连接PostgreSQL数据库,加载OSM数据预览。

《用PostgreSQL 9.5 & PostGIS 2.2驱动全国OSM地图数据》 北京道路

参考:
1.http://www.postgresonline.com/journal/archives/362-An-almost-idiots-guide-to-install-PostgreSQL-9.5,-PostGIS-2.2-and-pgRouting-2.1.0-with-Yum.html
2.http://wiki.openstreetmap.org/wiki/Osm2pgsql

    原文作者:GISCAFF
    原文地址: https://www.jianshu.com/p/598869c2d89a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞