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$

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

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

    -base-4.2$ psql
    postgres=#

    注:postgres是数据库名

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

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

    spatial_testdb=# \conninfo
    
    You are connected to database "spatial_testdb" as user "postgres" via socket in "/var/run/postgresql" at port "5432".
  • 在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;

    其他的一些扩展:

    
    # 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;
  • 验证PostGis是否安装成功
    SELECT postgis_full_version();

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

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

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

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

    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');
  • 简单查询
    标准的 SQL 操作都可以用于 PostGIS

    spatial_testdb=# SELECT * FROM cities;

    这里写图片描述

    注:这里的坐标是无法阅读的 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;

    这里写图片描述

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

    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;

    这里写图片描述

  • 为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

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

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

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

其他一些命令

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

  • \l
    列出所有数据库

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

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

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

  • \du
    列出所有的用户

转载自:https://blog.csdn.net/predict_wise/article/details/53106558

You may also like...