CentOS7下安装PostGis

CentOS7下安装PostGis

 

前言

PostgreSQL 是一种对象-关系型数据库管理系统(ORDBMS),用来存储并管理数据。而PostGIS是在PostgreSQL上增加了存储管理空间数据的能力,使其具有地理信息系统特有的数据模式与存储过程函数,相当于Oracle Spatial和SQLite Spatial。因此,在这里我们需要先安装PostgreSQL,再安装PostGis插件

安装PostgreSQL 9.4+PostGis

  • 安装所需的依赖库 
    sudo rpm -ivh http://mirrors.aliyun.com/epel/7/x86_64/e/epel-release-7-8.noarch.rpm

  • 安装PostgreSQL 9.4 
    yum install http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-redhat94-9.4-2.noarch.rpm 
    yum install postgresql94-server postgresql94-contrib

  • 安装PostGis 
    yum install postgis2_94 postgis2_94-client 
    注:postgis2_95-client中包含了PostGis的命名行工具,如:shp2pgsql,pgsql2shp,raster2pgsql等

  • 安装ogrfdw(OGR Foreign Data Wrapper) 
    yum install ogr_fdw94

    更多ogr_fdw信息,请参见这里

  • 安装pgRouting 
    yum install pgrouting_94

  • 初始化数据库 
    /usr/pgsql-9.4/bin/postgresql94-setup initdb

  • 启动服务并设置为开机启动 
    systemctl enable postgresql-9.4 
    systemctl start postgresql-9.4

  • 开放防火墙端口 
    vim /etc/sysconfig/iptables 
    增加: 
    -A INPUT -m state –state NEW -m tcp -p tcp –dport 5432 -j ACCEPT 
    -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT

  • 重启防火墙使配置生效 
    systemctl restart iptables.service

操作PostgreSQL

  • 以PostgreSQL默认用户登录

    su - postgres
    -base-4.2$
    • 1
    • 2

    注:PostgreSQL安装好之后会自动新建一个名为postgres的Linux用户(等同于role),同时还会新建一个名称同样为postgres的数据库

  • 连接到PostgreSQL终端,默认使用postgres数据库

    -base-4.2$ psql
    postgres=#
    • 1
    • 2

    注:postgres是数据库名

  • 在postgres用户下新建一个数据库

    su - postgres
    -base-4.2$ psql -d spatial_testdb
    spatial_testdb=#
    • 1
    • 2
    • 3
  • 列出当前数据名和连接的信息

    spatial_testdb=# \conninfo
    
    You are connected to database "spatial_testdb" as user "postgres" via socket in "/var/run/postgresql" at port "5432".
    • 1
    • 2
    • 3
  • 在testdb数据底下安装PostGis扩展

    
    # Enable PostGIS (includes raster)
    
    spatial_testdb=# CREATE EXTENSION postgis; 
    
    # Enable Topology
    
    spatial_testdb=# CREATE EXTENSION postgis_topology;
    
    # enable ogrfdw
    
    spatial_testdb=# CREATE EXTENSION ogr_fdw;
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    其他的一些扩展:

    
    # Enable PostGIS Advanced 3D and other geoprocessing algorithms sfcgal not available with all distributions
    
    CREATE EXTENSION postgis_sfcgal;
    
    # fuzzy matching needed for Tiger
    
    CREATE EXTENSION fuzzystrmatch;
    
    # rule based standardizer
    
    CREATE EXTENSION address_standardizer;
    
    # example rule data set
    
    CREATE EXTENSION address_standardizer_data_us;
    
    # Enable US Tiger Geocoder
    
    CREATE EXTENSION postgis_tiger_geocoder;
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 验证PostGis是否安装成功 
    SELECT postgis_full_version();

  • 创建空间数据表 
    (1)先建立一个常规的表存储城市信息(cities)

    spatial_testdb=# CREATE TABLE cities(id varchar(20),name varchar(50));
    • 1

    (2)然后添加一个空间列,用于存储城市的位置。习惯上这个列叫做 “the_geom”。它记录了数据的类型(点、线、面)、有几维(这里是二维)以及空间坐标系统。这里使用 EPSG:4326 坐标系统:

    spatial_testdb=# SELECT AddGeometryColumn ('cities', 'the_geom', 4326, 'POINT', 2);
    • 1
  • 为空间表插入数据

    spatial_testdb=# INSERT INTO cities(id, the_geom, name) VALUES (1,ST_GeomFromText('POINT(-0.1257 51.508)',4326),'London, England');
    spatial_testdb=# INSERT INTO cities (id, the_geom, name) VALUES (2,ST_GeomFromText('POINT(-81.233 42.983)',4326),'London, Ontario');
    spatial_testdb=# INSERT INTO cities (id, the_geom, name) VALUES (3,ST_GeomFromText('POINT(27.91162491 -33.01529)',4326),'East London,SA');
    • 1
    • 2
    • 3
  • 简单查询 
    标准的 SQL 操作都可以用于 PostGIS

    spatial_testdb=# SELECT * FROM cities;
    • 1

    这里写图片描述

    注:这里的坐标是无法阅读的 16 进制格式。要以 WKT 文本显示,使用 ST_AsText(the_geom) 或 ST_AsEwkt(the_geom) 函数。也可以使用 ST_X(the_geom) 和 ST_Y(the_geom) 显示一个维度的坐标:

    spatial_testdb=# SELECT id, ST_AsText(the_geom), ST_AsEwkt(the_geom), ST_X(the_geom), ST_Y(the_geom) FROM cities;
    • 1

    这里写图片描述

  • 空间查询 
    这里回答一个具体的问题:以米为单位并假设地球是完美椭球,上面三个城市相互的距离是多少?

    spatial_testdb=# SELECT p1.name,p2.name,ST_Distance_Sphere(p1.the_geom,p2.the_geom) FROM cities AS p1, cities AS p2 WHERE p1.id > p2.id;
    • 1

    这里写图片描述

  • 为postgres用户登录设置密码 
    vim /var/lib/pgsql/9.4/data/pg_hba.conf

    host    all     all      127.0.0.1/32           ident
    host    all     all      ::1/128                ident
    • 1
    • 2

    将默认无密码的验证方式改为有密码的验证方式:

    host    all       all      127.0.0.1/32          md5
    host    all       all      ::1/128               md5
    • 1
    • 2
    su - postgres
    -base-4.2$ psql
    postgres=# \password postgres #为postgres用户设置密码
    • 1
    • 2
    • 3
  • 重启PostgresSQL,让新的验证方法生效 
    systemctl restart postgresql-9.4

    这样的话重新用postgres用户登录时需要输入密码

其他一些命令

  • \q 
    退出,返回到“-base-4.2$”,如再需要退出”-base-4.2$”用exit

  • \l 
    列出所有数据库

  • \d 
    列出当前数据库的所有表

  • \d tablename 
    列出某一张表的结构

  • \c databasename 
    从当前数据库转换到其他数据库

  • \du 
    列出所有的用户

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值