PostGIS 在 PostgreSQL 中使用
介绍
首先来介绍一下 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.
1 | SELECT superhero.name |
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.
安装
macOS 中使用 brew 安装:1
brew install postgis
Centos:1
2
3dnf -y install epel-release
dnf -y config-manager --set-enabled PowerTools
dnf -y install postgis31_13
Fedora / Red Hat / CentOS / Oracle Linux:
在 POSTGRESQL COMMON REPOSITORY(其中包含但不限于 PostgrSQL、pgAdmin、Slony-I、PostGIS 等 RPM 包) 找到对应的版本进行安装。
启用
PostGIS 是一个可选扩展,在你想使用它之前必须在每个数据库中启用它,然后才能使用它。
通过 psql 或 PgAdmin 连接你的数据库,然后运行下面SQL1
2
3
4-- Enable PostGIS (as of 3.0 contains just geometry/geography)
CREATE EXTENSION postgis;
-- Enable Topology
CREATE EXTENSION postgis_topology;
注意:不要在 postgres
数据库中启用
升级
升级到最新版本:1
2ALTER EXTENSION postgis UPDATE;
ALTER EXTENSION postgis_topology UPDATE;
或指定版本升级:1
2
3
4
5ALTER EXTENSION postgis
UPDATE TO "3.1.0";
-- Upgrade Topology
ALTER EXTENSION postgis_topology
UPDATE TO "3.1.0";
使用
首先,创建一个带有空间列的表1
2
3
4
5CREATE TABLE mytable (
id SERIAL PRIMARY KEY,
geom GEOMETRY(Point, 26910),
name VARCHAR(128)
);
然后添加空间索引1
2
3CREATE INDEX mytable_gix
ON mytable
USING GIST (geom);
插入测试数据:1
2
3INSERT INTO mytable (geom) VALUES (
ST_GeomFromText('POINT(0 0)', 26910)
);
查询附近的点1
2
3
4
5
6
7SELECT id, name
FROM mytable
WHERE ST_DWithin(
geom,
ST_GeomFromText('POINT(0 0)', 26910),
1000
);
参考资料
文档信息
- 版权声明:自由转载-保持署名-非商用-非衍生 ( CC BY-NC-ND 4.0 )