PgSql - PostGIS 在 PostgreSQL 中使用

发布时间 2023-10-21 13:53:25作者: 疯子110

首先来介绍一下 PostGIS 是什么?
PostGIS 是 PostgreSQL 对象关系数据库的一个空间数据库扩展。它增加了对地理对象的支持,允许在SQL中运行位置查询。

官方介绍:

PostGIS:Spatial and Geographic objects for PostgreSQL

PostGIS is a spatial database extender for PostgreSQL object-relational database. It adds support for geographic objects allowing location queries to be run in SQL.

SELECT superhero.name
FROM city, superhero
WHERE ST_Contains(city.geom, superhero.geom)
AND city.name = 'Gotham';

In addition to basic location awareness, PostGIS offers many features rarely found in other competing spatial databases such as Oracle Locator/Spatial and SQL Server.

安装
不同系统不同安装方式 不再此处展开讲

背景
公司新项目需要在系统中整合gis图,之前没有接触过,特此开一篇文章来讲解学习,后续持续更新。

启用
PostGIS 是一个可选扩展,在你想使用它之前必须在每个数据库中启用它,然后才能使用它。

通过 psql 或 PgAdmin 连接你的数据库,然后运行下面SQL

-- Enable PostGIS (as of 3.0 contains just geometry/geography)
CREATE EXTENSION postgis;
-- Enable Topology
CREATE EXTENSION postgis_topology;

*** 注意:不要在 postgres 数据库中启用

升级
升级到最新版本

ALTER EXTENSION postgis UPDATE;
ALTER EXTENSION postgis_topology UPDATE;

或指定版本升级

ALTER EXTENSION postgis
UPDATE TO "3.1.0";
-- Upgrade Topology
ALTER EXTENSION postgis_topology
UPDATE TO "3.1.0";

使用
首先,创建一个带有空间列的表

CREATE TABLE mytable (
id SERIAL PRIMARY KEY,
geom GEOMETRY(Point, 26910),
name VARCHAR(128)
);

解释 :个人理解 安装完PostGis扩展后 pg库支持了 GEOMETRY 类型 特殊类型。

然后添加空间索引

CREATE INDEX mytable_gix
ON mytable
USING GIST (geom);

插入测试数据

INSERT INTO mytable (geom) VALUES (
ST_GeomFromText('POINT(0 0)', 26910)
);

解释:通过ST_GeomFromText存储 特殊的几何数据/点位数据。

查询附近的点

SELECT id, name
FROM mytable
WHERE ST_DWithin(
geom,
ST_GeomFromText('POINT(0 0)', 26910),
1000
);
————————————————
版权声明:本文为CSDN博主「Aliang!」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Hyl_Aa/article/details/131520215