Postgresql、Postgis环境和一些关于空间列操作

  • Post author:
  • Post category:其他


本文给出一些关于地理信息扩展库Postgis空间列常用操作,在实际使用中很实用的查看和编辑空间列信息。windows环境下安装如下:


先安装postgresql-9.6.3-2-windows-x64.exe,然后在安装postgis插件,注意postgis插件与postgresql版本的兼容性,官网有详细的描述。linux环境(如debian)可添加相应的源,获取相应版本。允许所有IP远程访问,可修改pg_hba.conf(windows下在安装目录下,如C:\Program Files\PostgreSQL\9.6\data),行“host all all 127.0.0.1/32 md5“下添加以下配置:

host    all    all    0.0.0.0/0    md5

当然也可以指定ip等,限制访问,这里不介绍。进入postgresql数据库,增加postgis扩展,输入:

-- Enable PostGIS (includes raster)
CREATE EXTENSION postgis;

模式public下会生成一张表:


spatial_ref_sys表存放epsg描述的坐标系信息,包括坐标系的wkt和proj4描述等。就可以在postgresql中使用postgis函数了。

查看数据库版本:

--输出:PostgreSQL 9.6.3, compiled by Visual C++ build 1800, 64-bit
SELECT version();

查询Postgis版本信息:

--输出:POSTGIS="2.3.2 r15302" GEOS="3.6.1-CAPI-1.10.1 r4317" PROJ="Rel. 4.9.1, 04 March 2015"
--GDAL="GDAL 2.1.3, released 2017/20/01" LIBXML="2.7.8" LIBJSON="0.12" RASTER
SELECT postgis_full_version();

以下的操作针对矢量数据。

创建一张空间表,SQL语句如下:

--SERIAL id自增
CREATE TABLE point (
    id SERIAL PRIMARY KEY,
    name VARCHAR
);
--参数分别是:模式,表名,空间列名称,坐标系SRID,空间列存储数据是点,二维
-- AddGeometryColumn(
--   <schema_name>,
--   <table_name>,
--   <column_name>,
--   <srid>,
--   <type>,
--   <dimension>
-- )
SELECT AddGeometryColumn('public', 'point', 'the_geom', 4326, 'POINT', 2);

习惯上用the_geom来表示空间列名,也可以用其他名字。可以添加多个空间列,空间列可以有自己的坐标系。如执行如下语句创建一个the_geom_2空间列:

SELECT AddGeometryColumn('public', 'point', 'the_geom_2', 4490, 'POINT', 2);

得到的point表结构如下:


删除空间列:

--DropGeometryColumn(varchar schema_name, varchar table_name, varchar column_name)
--用单引号
SELECT DropGeometryColumn('public', 'points', 'the_geom_2');

查询空间列the_geom的坐标系(srid):

--Find_SRID(varchar a_schema_name, varchar a_table_name, varchar a_geomfield_name);
--输出4326
SELECT Find_SRID('public', 'point', 'the_geom');

将空间列the_geom_2坐标系改为4549,不管原来是什么坐标系:

--UpdateGeometrySRID(varchar schema_name, varchar table_name, varchar column_name, integer srid)
SELECT UpdateGeometrySRID('public','point','the_geom_2',4549);

上述创建空间表的语句可以合写成一句SQL:

CREATE TABLE point (
    id SERIAL PRIMARY KEY,
    name VARCHAR,
    the_geom geometry(point,4326),
    the_geom_2 geometry(point,4490)
);

查看’public’.’geometry_columns’中的信息,它是一个视图,依赖于底层的系统表:

SELECT * FROM geometry_columns;

输出:


输出中分别对应数据库名、模式、表名、空间列名、维度、坐标系和类型。geometry_columns详细信息查询可用:

SELECT * FROM information_schema.columns WHERE table_name='geometry_columns';



版权声明:本文为aliasone原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。