【POSTGIS】判定点位是否在范围内

项目上的需求,要判断当前打卡位置是否在项目范围10m内。

先做需求分析:

(1)既然有10m的缓冲范围,那么就要用到st_buffer函数;

(2)既然以m为单位,就要用到投影坐标系,如果前端传过来的是经纬度坐标,需要使用st_transform进行转换

(3)要求在范围内,就是判断点是否包含在面内,就需要用到st_contains函数

(4)根据业务上的需求,应该是要有项目的标识码来确定一条矢量记录

(5)返回值很简单,就是true或者false

组合以上的需求,得到如下sql语句

sql 复制代码
select st_contains(
               (select st_transform(st_buffer(st_transform(geom,4528),10),4490)
                FROM tablename
                where xmbm = '${xmbm}'),
                st_geomfromtext('POINT(${x} ${y})',4490)
        )

考虑实际情况可能有项目记录查不到的情况,这时候返回值是null,无法转换成要求的布尔值形式,集成到java程序中会报错,于是添加个case语句,防止返回null值

sql 复制代码
        with buffer_res as (
        select st_contains(
               (select st_transform(st_buffer(st_transform(geom,4528),10),4490)
                FROM tablename
                where xmbm = '${xmbm}'),
                st_geomfromtext('POINT(${x} ${y})',4490)
        ) res)
        select case when buffer_res.res is null then false else buffer_res.res end from buffer_res
相关推荐
41541116 天前
MyBatis-Plus + PostGIS 实战(四):GeoJSON 序列化与前端地图对接,全局 WKT + 局部 GeoJSON,两种格式优雅共存
java·mybatis·postgis·geojson
41541118 天前
MyBatis-Plus + PostGIS 实战(二):空间查询与空间索引
java·mybatis·gis·postgis
41541121 天前
MyBatis-Plus + PostGIS 实战(1.1):Geometry 字段在 Swagger 中的优雅展示
java·mybatis·postgis
41541122 天前
MyBatis-Plus + PostGIS 实战一(基础篇)
java·mybatis·postgis
gerrywhu2 个月前
【应用实践】PostGIS实现NDVI计算与植被覆盖分级统计分析-以武汉市2025年为例
数据库·postgis·栅格数据分析·st_mapalgebra·ndvi计算·植被覆盖分级统计·植被覆盖计算
_未闻花名_2 个月前
PostgreSQL的若干扩展安装和使用
spring boot·postgresql·postgis·timescaledb·pg_cron·pgmq·zhparser
gerrywhu2 个月前
PostGIS强大栅格分析工具-栅格代数运算(回调函数版)【ST_MapAlgebra 】
postgis·回调函数·栅格数据分析·栅格代数·st_mapalgebra·栅格回调函数·栅格加权
gerrywhu2 个月前
PostGIS实现栅格数据合并—影像拼接、镶嵌【ST_Union】
postgis·栅格数据分析·影像镶嵌·栅格合并·st_union·影像拼接
gerrywhu3 个月前
PostGIS实现栅格分块与瓦片生成【ST_Tile】
postgis·栅格数据分析·栅格分块·遥感影像分块·栅格瓦片生成·st_tile·瓦片生成
gerrywhu3 个月前
PostGIS实现栅格数据可视化-单波段映射为多波段彩色栅格【ST_ColorMap】
postgis·栅格分析·栅格数据可视化·st_colormap·多波段彩色栅格·彩色栅格