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 操作都可以用于 PostGISspatial_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.confhost 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