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

项目上的需求,要判断当前打卡位置是否在项目范围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. POSTGIS判定是否范围

    2023-12-09 04:24:01       50 阅读
  2. js判定-矩形是否包含指定

    2023-12-09 04:24:01       32 阅读
  3. 判断是否一直线上

    2023-12-09 04:24:01       44 阅读
  4. 【功能】UGUI判断是否UI上

    2023-12-09 04:24:01       26 阅读
  5. C++判定终端ip和目标ip是否同一局域网

    2023-12-09 04:24:01       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-09 04:24:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-09 04:24:01       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-09 04:24:01       82 阅读
  4. Python语言-面向对象

    2023-12-09 04:24:01       91 阅读

热门阅读

  1. 雷军:我的程序人生路

    2023-12-09 04:24:01       51 阅读
  2. leetcode做题笔记1423. 可获得的最大点数

    2023-12-09 04:24:01       54 阅读
  3. mysql 表分区类型

    2023-12-09 04:24:01       58 阅读
  4. 微信小程序保存二维码的过程

    2023-12-09 04:24:01       65 阅读
  5. 策略产品经理常用的ChatGPT通用提示词模板

    2023-12-09 04:24:01       59 阅读
  6. 项目代码规范

    2023-12-09 04:24:01       58 阅读
  7. GUN编译器(gcc/g++)- 编译过程

    2023-12-09 04:24:01       51 阅读
  8. 十年婚姻·总结六

    2023-12-09 04:24:01       66 阅读
  9. 【C++ Primer Plus学习记录】逻辑表达式

    2023-12-09 04:24:01       52 阅读
  10. Codeforces Round 913 (Div. 3) (A-G)

    2023-12-09 04:24:01       43 阅读
  11. syslog定期rotate和限制其size的配置方法ubuntu上

    2023-12-09 04:24:01       51 阅读
  12. methods

    2023-12-09 04:24:01       51 阅读