PostGIS
PostgreSQL 的地理空间超能力 — 地图、路由、地理围栏。
PostGIS 是 PostgreSQL 的金标准地理空间扩展。它添加了 geometry 和 geography 类型、1000+ 空间函数、R 树索引、投影支持和拓扑 — 将 Postgres 变成功能齐全的 GIS 服务器,被国家测绘机构、网约车平台和现场服务应用全球使用。
使用 Pier 部署
- 1 打开 Pier 控制台,点击 Add service。
- 2 从模板列表中选择 PostGIS。
- 3 选择版本、设置服务名称,Pier 会自动配置容器、存储和端口。
- 4 如需 HTTPS,请绑定域名。Traefik 会自动签发 Let's Encrypt 证书。
什么是 PostGIS?
PostGIS 是 PostgreSQL 的规范地理空间扩展。由 Refractions Research 于 2001 年 创建,它已成长为开源 GIS 栈的基础:OpenStreetMap 在 PostGIS 中存储其数据, Mapbox 将其用作后端,每个涉足 OSS 的国家测绘机构在生产中某处都有 PostGIS 服务器。
技术上它是你在 Postgres 数据库中安装的扩展,但实际上你几乎总是使用已编译 的 Postgres 发行版(官方 postgis/postgis Docker 镜像)。启用后,你的 Postgres 数据库获得空间类型、1000+ 空间函数、用于快速几何查询的 GIST 索引以及栅格、 拓扑和瓦片工作的工具。
Pier 如何部署它
Pier 使用官方 postgis/postgis Docker 镜像,将 /var/lib/postgresql 挂载为
数据卷。默认版本为 latest(PostGIS 3.5 on PostgreSQL 18);18-master、
17-master、16-master、15-master 可用于版本固定。
通过 Pier 的 UI 创建数据库时,你将获得要安装的 PostGIS 扩展清单(postgis、 postgis_topology、postgis_raster、fuzzystrmatch、postgis_tiger_geocoder)。 Pier 通过 CREATE EXTENSION … CASCADE 按依赖顺序安装它们。
所有 Postgres 工具都有效 — pg_dump、psql、ORM、pgAdmin、DBeaver。Pier 的 备份和复制功能以与原生 postgresql 模板相同的方式应用。
何时不要使用 PostGIS
如果不需要空间函数,使用常规 PostgreSQL — PostGIS 增加磁盘和内存开销。 如果你唯一的地理需求是”存储经纬度并在半径内查找项目”,Postgres 加上 (lat, lon) 的 btree 和 Haversine 函数可能就够了。一旦需要多边形、投影或 栅格,立即迁移到 PostGIS。
核心功能
空间类型
GEOMETRY(平面)和 GEOGRAPHY(球面)类型,支持点、线、多边形、多重多边形、集合。SRID 感知 — 在 5000+ 坐标参考系统中存储数据。
1000+ 空间函数
ST_Distance、ST_Within、ST_Intersects、ST_Buffer、ST_Union、ST_ConvexHull、ST_Centroid — 每个标准 OGC 空间函数加上 PostGIS 特有的额外功能。
R 树 GIST 索引
几何列上的 GIST 索引使空间查询(ST_DWithin、ST_Intersects)即使在数亿要素的表上也能达到亚毫秒级。
栅格支持
PostGIS Raster 处理卫星图像、高程数据、天气网格。在一个 SQL 语句中共同查询栅格和矢量。
拓扑
postgis_topology 建模拓扑关系(共享边、面)— 对地籍、交通网络和政治边界工作至关重要,其中一致性很重要。
100% PostgreSQL
它仍然是 PostgreSQL — 相同的驱动、相同的事务、相同的备份。在一个查询中结合空间查询与关系连接、JSONB、全文和存储过程。
应用场景
地图与制图
矢量瓦片服务器(pg_tileserv、Martin)实时从 PostGIS 提供数百万个地图瓦片。通过 ST_AsMVT() 的 Mapbox Vector Tiles。
地理围栏与警报
当车辆进入或退出多边形时通知 — 针对地理围栏多边形的 ST_Within。正确索引时亚毫秒级。
路由网络
pgRouting 在 PostGIS 道路网络上添加 Dijkstra、A*、K 条最短路径。OpenStreetMap 数据 + pgRouting = 你自己的路由引擎。
车队与资产跟踪
将 GPS 信号作为 POINT(经度, 纬度) 存储。用一个 SQL 语句查询"过去一小时内总部 5 公里内的所有资产"。
风险与保险建模
客户地址与洪水区、犯罪地图、断层线的空间连接。批量返回每个保单的风险评分。
代码示例
CREATE EXTENSION IF NOT EXISTS postgis;
CREATE TABLE places (
id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL,
geom GEOGRAPHY(POINT, 4326) NOT NULL
);
CREATE INDEX places_geom_idx ON places USING GIST (geom);
INSERT INTO places (name, geom) VALUES
('北京', ST_GeogFromText('POINT(116.4074 39.9042)')),
('上海', ST_GeogFromText('POINT(121.4737 31.2304)')); SELECT name,
ST_Distance(geom, ST_MakePoint(116.4, 39.9)::geography) AS meters
FROM places
ORDER BY geom <-> ST_MakePoint(116.4, 39.9)::geography
LIMIT 10; SELECT v.id, v.callsign
FROM vehicles v
JOIN geofences g ON ST_Within(v.last_position::geometry, g.area)
WHERE g.alert_zone = true; SELECT ST_AsMVT(tile, 'places')
FROM (
SELECT id, name,
ST_AsMVTGeom(
geom::geometry,
ST_TileEnvelope(z, x, y),
4096, 64, true
) AS geom
FROM places
WHERE geom && ST_TileEnvelope(z, x, y)
) AS tile; 对比
| vs 原生 PostgreSQL | PostgreSQL 不附带空间类型 — PostGIS 是事实上的扩展。如果你知道需要空间用专用 PostGIS 模板;常规 postgresql 模板可以通过 CREATE EXTENSION 后续安装 postgis。 |
| vs Esri ArcGIS / Oracle Spatial | PostGIS 是 OSS 等价物 — 具有竞争力的功能集,由美国人口普查局、法国 IGN、英国测绘局、柏林参议院和更多国家测绘机构使用。 |
| vs MongoDB GeoJSON | Mongo 的 2dsphere 涵盖基本地理查询;PostGIS 更深入(栅格、拓扑、投影、网络分析)。对于严肃的 GIS 工作选 PostGIS。 |
| vs 专业瓦片服务器(Tegola、Mapnik) | PostGIS 与瓦片服务器配对 — 它们从 PostGIS 读取。PostGIS 是你的地理真相源,而非瓦片渲染器本身。 |
常见问题
PostGIS 只是我安装在常规 PostgreSQL 中的扩展吗?
Pier 自动安装哪些扩展?
应该使用哪个 SRID?
GEOGRAPHY 与 GEOMETRY?
PostGIS 模板使用哪个 PostgreSQL 版本?
备份与 Postgres 相同方式工作?
可以使用 pgRouting 吗?
相关服务
在你的 VPS 上部署
PostGIS 是 PostgreSQL 的金标准地理空间扩展。它添加了 geometry 和 geography 类型、1000+ 空间函数、R 树索引、投影支持和拓扑 — 将 Postgres 变成功能齐全的 GIS 服务器,被国家测绘机构、网约车平台和现场服务应用全球使用。
部署此服务 →