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 个函数:
ST_AsGeoJSON→ 给前端地图用ST_AsText→ 调试看坐标ST_MakeLine→ 点连线ST_Length→ 算长度ST_Distance→ 算距离ST_Intersects→ 判断是否相交ST_Contains→ 判断是否在范围内ST_StartPoint、ST_EndPoint→ 起终点ST_Buffer→ 画圈范围ST_DumpPoints→ 线拆成点