地理空间数据库必考【30 个 PostGIS 核心空间函数 + pgRouting 最短路径 / 距离函数】
摘要:PostGIS核心函数考点速记(PostgreSQL+PostGIS环境,SRID=4326) 【构造函数】ST_GeomFromText('POINT(116 39)',4326)必考;ST_SetSRID+ST_MakePoint组合填空高频;ST_MakeLine/ST_MakePolygon大题构造几何体。 【空间关系】ST_Intersects/ST_Contains/ST_Wit
(适配考试答题标准,按高频必考优先级排序,带「函数定义 + 语法 + 应用场景 + 考点标注」,无冗余,可直接背诵默写,写错函数名 / 参数全扣分,必须精准记!)
补充:所有函数适配 PostgreSQL+PostGIS 环境,语法大小写不敏感,考试推荐关键字大写,函数名原样默写即可;坐标系统一用
4326(WGS84经纬度),是考试唯一考点坐标系。
一、⭐ 第一类:PostGIS 基础空间构造函数
-
ST_GeomFromText('几何表达式', srid)【TOP1 必考,重中之重】- 定义:将文本格式的几何坐标,转为 PostGIS 可存储的
geometry空间类型,适配所有几何类型 - 必考语法:
ST_GeomFromText('POINT(经度 纬度)',4326)/ST_GeomFromText('LINESTRING(经1 纬1,经2 纬2)',4326) - 应用场景:插入点 / 线 / 面空间数据到表中,考试大题插入语句唯一标准答案函数
- 定义:将文本格式的几何坐标,转为 PostGIS 可存储的
-
ST_SetSRID(geom, srid)- 定义:为无坐标系的空间几何对象,绑定指定空间参考系(SRID)
- 必考语法:
ST_SetSRID(ST_MakePoint(116.4,39.9),4326) - 应用场景:搭配
ST_MakePoint使用,考试填空高频考点
-
ST_MakePoint(经度, 纬度)- 定义:快速构造二维点几何对象,默认无坐标系,必须搭配
ST_SetSRID使用 - 语法:
ST_MakePoint(lon, lat) - 应用场景:批量构造船舶、公交站、POI 等点位数据,填空必考
- 定义:快速构造二维点几何对象,默认无坐标系,必须搭配
-
ST_MakeLine(geom1, geom2)- 定义:将两个点几何对象,连接成一条线串(LineString)
- 语法:
ST_MakeLine(ST_GeomFromText('POINT(116 39)',4326),ST_GeomFromText('POINT(117 40)',4326)) - 应用场景:构造道路、河流、轨迹线段,大题高频考点
-
ST_MakePolygon(geom)- 定义:将闭合的线串(LineString),转为多边形(Polygon)面状几何
- 语法:
ST_MakePolygon(ST_GeomFromText('LINESTRING(116 39,117 39,117 40,116 39)',4326)) - 应用场景:构造海洋、行政区、湖泊等面状数据,必考
-
ST_GeometryType(geom)- 定义:返回空间几何对象的具体类型(如 Point、MultiLineString)
- 语法:
ST_GeometryType(geom) - 应用场景:查询空间字段的几何类型,填空必考,考试答案固定返回
ST_Point/ST_MultiLineString/ST_Polygon
二、⭐ 第二类:PostGIS 空间属性查询函数
-
ST_X(geom)- 定义:返回点几何对象的经度坐标值
- 语法:
SELECT ST_X(geom) FROM ship WHERE sid=1; - 考点:船舶 / 点位的经度查询,填空必考
-
ST_Y(geom)- 定义:返回点几何对象的纬度坐标值
- 语法:
SELECT ST_Y(geom) FROM ship WHERE sid=1; - 考点:船舶 / 点位的纬度查询,填空必考,和
ST_X绑定考察
-
ST_Length(geom)- 定义:计算线串(LineString/MultiLineString)的长度(单位:米,4326 坐标系生效)
- 语法:
SELECT ST_Length(geom) FROM river WHERE rid=1; - 考点:计算河流长度、道路长度,大题必考计算题
-
ST_Area(geom)- 定义:计算多边形(Polygon/MultiPolygon)的面积(单位:平方米,4326 坐标系生效)
- 语法:
SELECT ST_Area(geom) FROM sea WHERE sid=1; - 考点:计算海洋、湖泊、行政区面积,大题必考计算题
-
ST_NumPoints(geom)- 定义:返回线串 / 多边形中包含的点的数量
- 语法:
SELECT ST_NumPoints(geom) FROM road WHERE rid=1; - 考点:查询道路的节点数,填空高频考点
-
ST_Centroid(geom)- 定义:返回面状几何对象的几何中心点(重心点)
- 语法:
SELECT ST_Centroid(geom) FROM sea WHERE sid=1; - 考点:求区域中心点,搭配点位查询使用,大题小问必考
-
ST_BoundingBox(geom)/ST_Extent(geom)- 定义:返回空间几何对象的最小包围矩形(左上、右下坐标)
- 语法:
SELECT ST_Extent(geom) FROM river; - 考点:R 树索引的包围盒查询,和 R 树考点绑定,必考
三、⭐ 第三类:PostGIS 空间关系判断函数(必考 8 个,核心高频,大题占分最高,重中之重)
核心说明:判断两个空间几何对象的位置关系,是地理空间数据库的核心考点,考试大题 90% 的查询都用到,所有函数返回值:true/false,必须精准记定义 + 应用场景
核心原则:所有空间关系函数,参数格式统一为
函数名(几何对象1, 几何对象2)
-
ST_Intersects(g1, g2)【TOP2 必考】- 定义:判断两个空间对象是否相交 / 重叠 / 接触(有任意公共点),只要有交集就返回 true
- 应用场景:查询「穿过某条河流的船舶」「经过某区域的道路」,考试大题第一优先级考点
- 例题:
SELECT * FROM ship WHERE ST_Intersects(ship.geom, river.geom) AND river.rid=1;
-
ST_Contains(g1, g2)【TOP2 必考】- 定义:判断几何对象 g1 是否完全包含几何对象 g2(g2 所有点都在 g1 内)
- 应用场景:查询「某片海域内的所有船舶」「某行政区内的公交站」,大题必考
- 例题:
SELECT * FROM ship WHERE ST_Contains(sea.geom, ship.geom) AND sea.sid=1;
-
ST_Covers(g1, g2)- 定义:判断几何对象 g1 是否全覆盖几何对象 g2,比
ST_Contains判定更宽松,考试通用 - 应用场景:和
ST_Contains完全一致,考试写任意一个都得分,推荐写这个
- 定义:判断几何对象 g1 是否全覆盖几何对象 g2,比
-
ST_Within(g1, g2)- 定义:判断几何对象 g1 是否完全在几何对象 g2 内部,是
ST_Contains的反向判断 - 考点:
ST_Within(g1,g2) = ST_Contains(g2,g1),填空考等价关系,大题可互换使用 - 例题:
SELECT * FROM ship WHERE ST_Within(ship.geom, sea.geom) AND sea.sid=1;
- 定义:判断几何对象 g1 是否完全在几何对象 g2 内部,是
-
ST_Touches(g1, g2)- 定义:判断两个空间对象是否相切 / 接触(只有边界有公共点,内部无交集)
- 应用场景:查询「与某条道路相邻的建筑」「与某河流接壤的区域」
-
ST_Crosses(g1, g2)- 定义:判断两个空间对象是否交叉穿过(如道路穿过河流、线穿过面)
- 应用场景:查询「跨越多条河流的道路」
-
ST_Disjoint(g1, g2)- 定义:判断两个空间对象是否无交集(没有任何公共点),是
ST_Intersects的反向判断 - 考点:
ST_Disjoint(g1,g2) = NOT ST_Intersects(g1,g2),填空考等价关系
- 定义:判断两个空间对象是否无交集(没有任何公共点),是
-
ST_Equals(g1, g2)- 定义:判断两个空间对象是否完全重合(坐标、形状、大小完全一致)
- 应用场景:查询相同位置的点位 / 相同走向的道路,填空考点
四、⭐ 第四类:PostGIS 空间距离计算函数
ST_Distance(g1, g2) 【TOP1 必考,计算题之王】
-
- 定义:计算两个空间几何对象之间的最短球面距离(单位:米,4326 坐标系)
- 语法:
SELECT ST_Distance(s.geom, r.geom) FROM ship s, river r WHERE s.sid=1 AND r.rid=1; - 应用场景:计算船舶到河流的距离、两点间的距离、道路到点位的距离,大题必考计算题,无例外
- 考点标注:考试只考这个距离函数,其他距离函数不考
-
ST_DistanceSphere(g1, g2)- 定义:基于球体模型,计算两个点之间的地球球面距离(精度高,单位:米)
- 语法:
SELECT ST_DistanceSphere(ST_MakePoint(116,39),ST_MakePoint(117,40)); - 考点:替代
ST_Distance使用,考试写这个也得分,二选一即可
-
ST_DWithin(g1, g2, distance)【必考】- 定义:判断两个空间对象的最短距离,是否小于等于指定距离(单位:米),返回 true/false
- 语法:
SELECT * FROM ship WHERE ST_DWithin(geom, ST_GeomFromText('POINT(116 39)',4326), 1000); - 应用场景:查询「距离某点位 1 公里内的所有船舶」,比先算距离再筛选效率高
五、⭐ 第五类:PostGIS 空间操作 + 聚合函数
-
ST_Union(g1, g2)- 定义:将两个空间几何对象合并为一个(如多条河流合并为水系、多个区域合并为行政区)
- 语法:
SELECT ST_Union(geom) FROM river WHERE rid IN (1,2); - 应用场景:空间聚合合并,大题必考
-
ST_Intersection(g1, g2)- 定义:返回两个空间几何对象的交集部分(相交的区域 / 线段 / 点)
- 语法:
SELECT ST_Intersection(road.geom, river.geom) FROM road, river WHERE road.rid=1; - 应用场景:查询道路与河流的交叉段,大题高频考点
-
ST_Buffer(geom, distance)【必考】- 定义:为空间几何对象,生成指定距离的缓冲区(点→圆、线→带状、面→扩大的面)
- 语法:
SELECT ST_Buffer(geom, 500) FROM ship WHERE sid=1; - 应用场景:查询船舶周围 500 米的缓冲区范围,大题必考,搭配
ST_Contains使用
-
COUNT(ST_Intersects(g1,g2))- 定义:聚合函数,统计满足空间相交关系的对象数量
- 语法:
SELECT COUNT(*) FROM ship WHERE ST_Intersects(geom, river.geom) GROUP BY river.rid; - 考点:考试原题「统计每条河流上有多少艘船舶」的标准答案,重中之重,必须记牢
-
ST_Collect(geom)- 定义:将多个空间几何对象,聚合为一个几何集合(GeometryCollection)
- 语法:
SELECT ST_Collect(geom) FROM ship; - 应用场景:批量处理多个点位 / 线串,填空考点
✅ 专题:pgRouting 最短路径 + 最短距离 查询函数
核心前置考点:pgRouting 是 PostGIS 的路由扩展,所有路径查询必须基于「拓扑路网」,考试默认路网表为
road(id, source, target, cost, geom),字段含义:
source:路网起点节点 ID;target:路网终点节点 ID;cost:路段权重(默认是长度,单位米);geom:路段空间几何- 必考拓扑函数:生成路网拓扑关系,是路径查询的前提,必须先执行!
▶ 第一部分:pgRouting 拓扑预处理函数(必考 2 个,前置操作,大题开篇必写)
-
pgr_createTopology('表名', 容差, 'geom字段名', '主键字段名')- 定义:为路网表生成拓扑关系,自动创建
source/target字段,补全节点 ID - 语法:
SELECT pgr_createTopology('road', 0.001, 'geom', 'id'); - 考点:考试大题必写的预处理语句,无此步骤,路径查询无法执行,踩分点
- 定义:为路网表生成拓扑关系,自动创建
-
pgr_analyzeGraph('表名', 容差, 'geom字段名', '主键字段名')- 定义:分析路网拓扑的完整性,检查是否有断裂、孤立节点
- 语法:
SELECT pgr_analyzeGraph('road', 0.001, 'geom', 'id'); - 考点:填空考点,路网预处理的补充步骤
▶ 第二部分:pgRouting 最短路径 / 最短距离 核心函数(必考 5 个,考试大题唯一考点,重中之重)
优先级排序:
Dijkstra算法是考试唯一必考算法,其他算法不考,所有路径查询都用这个!
✔ 核心算法说明:Dijkstra 算法:求解「单源点到单终点」的加权最短路径,权重默认是路段长度,是地理空间数据库路由查询的标准答案,无例外!
-
pgr_dijkstra( SQL语句, 起点id, 终点id, 有向/无向 )【TOP1 必考,pgRouting 大题唯一答案】- 定义:基于 Dijkstra 算法,查询路网中「指定起点节点→指定终点节点」的最短路径,返回路径的路段序列、总代价
- 必考语法(考试直接默写,满分格式):
sql
SELECT * FROM pgr_dijkstra( 'SELECT id, source, target, ST_Length(geom) AS cost FROM road', 101, -- 起点节点source_id 202, -- 终点节点target_id false -- false=无向路网(道路双向通行),考试固定写false ); - 应用场景:查询两点间的最短路径,考试大题压轴题,占分最高,必须记牢语法
-
pgr_dijkstraCost( SQL语句, 起点id, 终点id, 有向/无向 )- 定义:只计算「起点→终点」的最短路径总代价(总距离),不返回路径详情,效率更高
- 语法:和
pgr_dijkstra一致,仅函数名不同 - 考点:考试「只要求计算最短距离,不要求路径」的标准答案,填空 / 大题必考
-
pgr_findCloseEdges(geom, 容差)- 定义:根据指定的点位几何,查询路网中最近的路段 ID
- 语法:
SELECT * FROM pgr_findCloseEdges(ST_GeomFromText('POINT(116 39)',4326), 0.001); - 考点:将「经纬度点位」转为「路网节点 ID」,是路径查询的前置步骤,大题必考,衔接 PostGIS 和 pgRouting
-
pgr_pointsAsPolygon( SQL语句 )- 定义:将路径查询结果的节点,转为多边形面状几何
- 应用场景:路径范围可视化,填空考点
-
最短路径空间拼接(必考 SQL 组合)
- 定义:将
pgr_dijkstra返回的路段 ID,拼接为完整的空间路径几何,是大题的最终答案 - 满分语法(考试直接套用):
sql
SELECT ST_Union(r.geom) AS shortest_path FROM road r, pgr_dijkstra( 'SELECT id, source, target, ST_Length(geom) AS cost FROM road', 101,202,false ) p WHERE r.id = p.edge; - 考点标注:这是 pgRouting 大题的满分答案,必须记牢,将路径的 ID 序列转为实际的空间线串
- 定义:将
更多推荐

所有评论(0)