(适配考试答题标准,按高频必考优先级排序,带「函数定义 + 语法 + 应用场景 + 考点标注」,无冗余,可直接背诵默写,写错函数名 / 参数全扣分,必须精准记!)

补充:所有函数适配 PostgreSQL+PostGIS 环境,语法大小写不敏感,考试推荐关键字大写,函数名原样默写即可;坐标系统一用4326(WGS84经纬度),是考试唯一考点坐标系。


一、⭐ 第一类:PostGIS 基础空间构造函数

  1. ST_GeomFromText('几何表达式', srid) 【TOP1 必考,重中之重】

    • 定义:将文本格式的几何坐标,转为 PostGIS 可存储的geometry空间类型,适配所有几何类型
    • 必考语法:ST_GeomFromText('POINT(经度 纬度)',4326) / ST_GeomFromText('LINESTRING(经1 纬1,经2 纬2)',4326)
    • 应用场景:插入点 / 线 / 面空间数据到表中,考试大题插入语句唯一标准答案函数
  2. ST_SetSRID(geom, srid)

    • 定义:为无坐标系的空间几何对象,绑定指定空间参考系(SRID)
    • 必考语法:ST_SetSRID(ST_MakePoint(116.4,39.9),4326)
    • 应用场景:搭配ST_MakePoint使用,考试填空高频考点
  3. ST_MakePoint(经度, 纬度)

    • 定义:快速构造二维点几何对象,默认无坐标系,必须搭配ST_SetSRID使用
    • 语法:ST_MakePoint(lon, lat)
    • 应用场景:批量构造船舶、公交站、POI 等点位数据,填空必考
  4. ST_MakeLine(geom1, geom2)

    • 定义:将两个点几何对象,连接成一条线串(LineString)
    • 语法:ST_MakeLine(ST_GeomFromText('POINT(116 39)',4326),ST_GeomFromText('POINT(117 40)',4326))
    • 应用场景:构造道路、河流、轨迹线段,大题高频考点
  5. ST_MakePolygon(geom)

    • 定义:将闭合的线串(LineString),转为多边形(Polygon)面状几何
    • 语法:ST_MakePolygon(ST_GeomFromText('LINESTRING(116 39,117 39,117 40,116 39)',4326))
    • 应用场景:构造海洋、行政区、湖泊等面状数据,必考
  6. ST_GeometryType(geom)

    • 定义:返回空间几何对象的具体类型(如 Point、MultiLineString)
    • 语法:ST_GeometryType(geom)
    • 应用场景:查询空间字段的几何类型,填空必考,考试答案固定返回ST_Point/ST_MultiLineString/ST_Polygon

二、⭐ 第二类:PostGIS 空间属性查询函数

  1. ST_X(geom)

    • 定义:返回点几何对象的经度坐标值
    • 语法:SELECT ST_X(geom) FROM ship WHERE sid=1;
    • 考点:船舶 / 点位的经度查询,填空必考
  2. ST_Y(geom)

    • 定义:返回点几何对象的纬度坐标值
    • 语法:SELECT ST_Y(geom) FROM ship WHERE sid=1;
    • 考点:船舶 / 点位的纬度查询,填空必考,和ST_X绑定考察
  3. ST_Length(geom)

    • 定义:计算线串(LineString/MultiLineString)的长度(单位:米,4326 坐标系生效)
    • 语法:SELECT ST_Length(geom) FROM river WHERE rid=1;
    • 考点:计算河流长度、道路长度,大题必考计算题
  4. ST_Area(geom)

    • 定义:计算多边形(Polygon/MultiPolygon)的面积(单位:平方米,4326 坐标系生效)
    • 语法:SELECT ST_Area(geom) FROM sea WHERE sid=1;
    • 考点:计算海洋、湖泊、行政区面积,大题必考计算题
  5. ST_NumPoints(geom)

    • 定义:返回线串 / 多边形中包含的点的数量
    • 语法:SELECT ST_NumPoints(geom) FROM road WHERE rid=1;
    • 考点:查询道路的节点数,填空高频考点
  6. ST_Centroid(geom)

    • 定义:返回面状几何对象的几何中心点(重心点)
    • 语法:SELECT ST_Centroid(geom) FROM sea WHERE sid=1;
    • 考点:求区域中心点,搭配点位查询使用,大题小问必考
  7. ST_BoundingBox(geom) / ST_Extent(geom)

    • 定义:返回空间几何对象的最小包围矩形(左上、右下坐标)
    • 语法:SELECT ST_Extent(geom) FROM river;
    • 考点:R 树索引的包围盒查询,和 R 树考点绑定,必考

三、⭐ 第三类:PostGIS 空间关系判断函数(必考 8 个,核心高频,大题占分最高,重中之重)

核心说明:判断两个空间几何对象的位置关系,是地理空间数据库的核心考点,考试大题 90% 的查询都用到,所有函数返回值:true/false,必须精准记定义 + 应用场景

核心原则:所有空间关系函数,参数格式统一为 函数名(几何对象1, 几何对象2)

  1. ST_Intersects(g1, g2) 【TOP2 必考】

    • 定义:判断两个空间对象是否相交 / 重叠 / 接触(有任意公共点),只要有交集就返回 true
    • 应用场景:查询「穿过某条河流的船舶」「经过某区域的道路」,考试大题第一优先级考点
    • 例题:SELECT * FROM ship WHERE ST_Intersects(ship.geom, river.geom) AND river.rid=1;
  2. ST_Contains(g1, g2) 【TOP2 必考】

    • 定义:判断几何对象 g1 是否完全包含几何对象 g2(g2 所有点都在 g1 内)
    • 应用场景:查询「某片海域内的所有船舶」「某行政区内的公交站」,大题必考
    • 例题:SELECT * FROM ship WHERE ST_Contains(sea.geom, ship.geom) AND sea.sid=1;
  3. ST_Covers(g1, g2)

    • 定义:判断几何对象 g1 是否全覆盖几何对象 g2,比ST_Contains判定更宽松,考试通用
    • 应用场景:和ST_Contains完全一致,考试写任意一个都得分,推荐写这个
  4. 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;
  5. ST_Touches(g1, g2)

    • 定义:判断两个空间对象是否相切 / 接触(只有边界有公共点,内部无交集)
    • 应用场景:查询「与某条道路相邻的建筑」「与某河流接壤的区域」
  6. ST_Crosses(g1, g2)

    • 定义:判断两个空间对象是否交叉穿过(如道路穿过河流、线穿过面)
    • 应用场景:查询「跨越多条河流的道路」
  7. ST_Disjoint(g1, g2)

    • 定义:判断两个空间对象是否无交集(没有任何公共点),是ST_Intersects的反向判断
    • 考点:ST_Disjoint(g1,g2) = NOT ST_Intersects(g1,g2),填空考等价关系
  8. 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;
    • 应用场景:计算船舶到河流的距离、两点间的距离、道路到点位的距离,大题必考计算题,无例外
    • 考点标注:考试只考这个距离函数,其他距离函数不考
  1. ST_DistanceSphere(g1, g2)

    • 定义:基于球体模型,计算两个点之间的地球球面距离(精度高,单位:米)
    • 语法:SELECT ST_DistanceSphere(ST_MakePoint(116,39),ST_MakePoint(117,40));
    • 考点:替代ST_Distance使用,考试写这个也得分,二选一即可
  2. ST_DWithin(g1, g2, distance) 【必考】

    • 定义:判断两个空间对象的最短距离,是否小于等于指定距离(单位:米),返回 true/false
    • 语法:SELECT * FROM ship WHERE ST_DWithin(geom, ST_GeomFromText('POINT(116 39)',4326), 1000);
    • 应用场景:查询「距离某点位 1 公里内的所有船舶」,比先算距离再筛选效率高


五、⭐ 第五类:PostGIS 空间操作 + 聚合函数

  1. ST_Union(g1, g2)

    • 定义:将两个空间几何对象合并为一个(如多条河流合并为水系、多个区域合并为行政区)
    • 语法:SELECT ST_Union(geom) FROM river WHERE rid IN (1,2);
    • 应用场景:空间聚合合并,大题必考
  2. ST_Intersection(g1, g2)

    • 定义:返回两个空间几何对象的交集部分(相交的区域 / 线段 / 点)
    • 语法:SELECT ST_Intersection(road.geom, river.geom) FROM road, river WHERE road.rid=1;
    • 应用场景:查询道路与河流的交叉段,大题高频考点
  3. ST_Buffer(geom, distance) 【必考】

    • 定义:为空间几何对象,生成指定距离的缓冲区(点→圆、线→带状、面→扩大的面)
    • 语法:SELECT ST_Buffer(geom, 500) FROM ship WHERE sid=1;
    • 应用场景:查询船舶周围 500 米的缓冲区范围,大题必考,搭配ST_Contains使用
  4. COUNT(ST_Intersects(g1,g2))

    • 定义:聚合函数,统计满足空间相交关系的对象数量
    • 语法:SELECT COUNT(*) FROM ship WHERE ST_Intersects(geom, river.geom) GROUP BY river.rid;
    • 考点:考试原题「统计每条河流上有多少艘船舶」的标准答案,重中之重,必须记牢
  5. 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 个,前置操作,大题开篇必写)

  1. pgr_createTopology('表名', 容差, 'geom字段名', '主键字段名')

    • 定义:为路网表生成拓扑关系,自动创建source/target字段,补全节点 ID
    • 语法:SELECT pgr_createTopology('road', 0.001, 'geom', 'id');
    • 考点:考试大题必写的预处理语句,无此步骤,路径查询无法执行,踩分点
  2. pgr_analyzeGraph('表名', 容差, 'geom字段名', '主键字段名')

    • 定义:分析路网拓扑的完整性,检查是否有断裂、孤立节点
    • 语法:SELECT pgr_analyzeGraph('road', 0.001, 'geom', 'id');
    • 考点:填空考点,路网预处理的补充步骤

▶ 第二部分:pgRouting 最短路径 / 最短距离 核心函数(必考 5 个,考试大题唯一考点,重中之重)

优先级排序:Dijkstra算法 是考试唯一必考算法,其他算法不考,所有路径查询都用这个!

✔ 核心算法说明:Dijkstra 算法:求解「单源点到单终点」的加权最短路径,权重默认是路段长度,是地理空间数据库路由查询的标准答案,无例外!
  1. 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
      );
      
    • 应用场景:查询两点间的最短路径,考试大题压轴题,占分最高,必须记牢语法
  2. pgr_dijkstraCost( SQL语句, 起点id, 终点id, 有向/无向 )

    • 定义:只计算「起点→终点」的最短路径总代价(总距离),不返回路径详情,效率更高
    • 语法:和pgr_dijkstra一致,仅函数名不同
    • 考点:考试「只要求计算最短距离,不要求路径」的标准答案,填空 / 大题必考
  3. pgr_findCloseEdges(geom, 容差)

    • 定义:根据指定的点位几何,查询路网中最近的路段 ID
    • 语法:SELECT * FROM pgr_findCloseEdges(ST_GeomFromText('POINT(116 39)',4326), 0.001);
    • 考点:将「经纬度点位」转为「路网节点 ID」,是路径查询的前置步骤,大题必考,衔接 PostGIS 和 pgRouting
  4. pgr_pointsAsPolygon( SQL语句 )

    • 定义:将路径查询结果的节点,转为多边形面状几何
    • 应用场景:路径范围可视化,填空考点
  5. 最短路径空间拼接(必考 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 序列转为实际的空间线串

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐