AI摘要

本文提供了一份PostGIS地图函数大全,包括数据格式转换、几何类型判断、长度距离面积计算、空间关系判断、编辑几何、地图工具函数、缓冲区、轨迹路线专用函数等九大类,共50个常用函数,以及5条实战万能SQL语句。这些函数和SQL语句对于做地图、轨迹、空间分析和前端展示等项目非常有用,可以直接复制使用。

PostGIS 最常用、实战必用的地图函数大全,做地图、轨迹、空间分析、前端展示一定会用到的,按功能分类,直接复制就能用

你现在的环境:PostgreSQL17 + PostGIS3.6 全部完美支持。


一、数据格式转换类(最常用)

专门用于 数据库 ↔ 前端地图 数据互转

-- 1. 几何转 可读文本(调试用)
ST_AsText(geom)  

-- 2. 几何转 GeoJSON(前端地图直接用!)
ST_AsGeoJSON(geom)  

-- 3. WKT文本 转 几何
ST_GeomFromText('LINESTRING(...)', 4326)  

-- 4. 创建点
ST_Point(经度, 纬度)  

二、几何类型判断(查询点/线/面)

-- 判断几何类型:POINT / LINESTRING / POLYGON
GeometryType(geom)  

-- 例子:只查线
SELECT * FROM gis_test WHERE GeometryType(geom) = 'LINESTRING';

三、长度、距离、面积计算(地图必备)

-- 1. 线长度(单位:米 → 除以1000就是公里)
ST_Length(geom::geography)  

-- 2. 两点之间距离(米)
ST_Distance(
  ST_SetSRID(ST_Point(116,39),4326),
  ST_SetSRID(ST_Point(121,31),4326)
)

-- 3. 计算面面积(平方米)
ST_Area(geom::geography)  

四、空间关系判断(定位、范围、包含)

做地图筛选、搜索、围栏必备

-- 1. A 是否包含 B
ST_Contains(范围几何, 目标点)

-- 2. A 是否与 B 相交
ST_Intersects(geomA, geomB)

-- 3. 点是否在圆形范围内
ST_DWithin(geom, 中心点, 半径米)  

五、编辑几何:合并、拆分、抽点

-- 1. 多个点 → 连成线
ST_MakeLine(点1, 点2, 点3...)  

-- 2. 获取线的起点
ST_StartPoint(geom)  

-- 3. 获取线的终点
ST_EndPoint(geom)  

-- 4. 获取线的所有节点
ST_DumpPoints(geom)  

六、地图常用工具函数

-- 获取几何中心点(用于地图居中)
ST_Centroid(geom)  

-- 获取几何范围(用于地图自动缩放)
ST_Extent(geom)  

-- 移动几何(偏移)
ST_Translate(geom, 经度偏移, 纬度偏移)  

-- 旋转几何
ST_Rotate(geom, 弧度, 中心点)  

七、缓冲区(画圈、范围)

地图里画一个点周围多少米范围超级常用

-- 以点为中心,生成 1000 米缓冲区
ST_Buffer(geom::geography, 1000)::geometry  

八、轨迹/路线专用函数

-- 简化线(减少点,前端更流畅)
ST_Simplify(geom, 0.0001)  

-- 倒序轨迹
ST_Reverse(geom)  

九、给你 5 条实战万能 SQL(直接用)

1. 查看线的起点、终点

SELECT 
  name,
  ST_AsText(ST_StartPoint(geom)) as 起点,
  ST_AsText(ST_EndPoint(geom)) as 终点
FROM gis_test;

2. 计算线长度(公里)

SELECT 
  name,
  ROUND(ST_Length(geom::geography)/1000,2) || '公里' as 总长度
FROM gis_test;

3. 线转 GeoJSON(前端地图直接用)

SELECT id, name, ST_AsGeoJSON(geom) as geojson FROM gis_test;

4. 获取线上所有城市点

SELECT 
  name,
  ST_DumpPoints(geom) as 节点
FROM gis_test;

5. 判断一个点是否在这条线上

SELECT 
  ST_Intersects(
    geom, 
    ST_SetSRID(ST_Point(116.40,39.90),4326)
  ) as 是否经过北京
FROM gis_test;

十、最简单总结(你记这些就够了)

做地图项目 90% 只用以下 10 个函数

  1. ST_AsGeoJSON → 给前端地图用
  2. ST_AsText → 调试看坐标
  3. ST_MakeLine → 点连线
  4. ST_Length → 算长度
  5. ST_Distance → 算距离
  6. ST_Intersects → 判断是否相交
  7. ST_Contains → 判断是否在范围内
  8. ST_StartPointST_EndPoint → 起终点
  9. ST_Buffer → 画圈范围
  10. ST_DumpPoints → 线拆成点

扫码加入猫哥的AI群
最后修改:2026 年 04 月 20 日
点赞的人是最酷的