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

本文介绍了如何在项目需求中,通过SQL和GIS技术(如st_buffer、st_transform和st_contains)判断用户打卡位置是否在项目10米范围内。文章详细解释了坐标系转换和处理可能出现的null值问题,以适应Java程序的集成。
摘要由CSDN通过智能技术生成

项目上的需求,要判断当前打卡位置是否在项目范围10m内。
先做需求分析:
(1)既然有10m的缓冲范围,那么就要用到st_buffer函数;
(2)既然以m为单位,就要用到投影坐标系,如果前端传过来的是经纬度坐标,需要使用st_transform进行转换
(3)要求在范围内,就是判断点是否包含在面内,就需要用到st_contains函数
(4)根据业务上的需求,应该是要有项目的标识码来确定一条矢量记录
(5)返回值很简单,就是true或者false
组合以上的需求,得到如下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值

        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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值