美文网首页开源互联网科技程序员
用PostgreSQL 9.5 & PostGIS 2.

用PostgreSQL 9.5 & PostGIS 2.

作者: GISCAFF | 来源:发表于2017-12-03 07:25 被阅读245次

    上周把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
    
    pg_hba配置

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

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

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

    重启数据库服务

    sudo systemctl restart postgresql-9.5
    

    设置防火墙及访问端口

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

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

    数据库连接测试
    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数据预览。


    北京道路

    参考:
    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

    相关文章

      网友评论

        本文标题:用PostgreSQL 9.5 & PostGIS 2.

        本文链接:https://www.haomeiwen.com/subject/jjngbxtx.html