【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
相关推荐
丷丩6 天前
第 2 篇:入门实操|3dtubetilecreater 环境搭建全教程(零踩坑版)
3d·gis·postgis·管线·自动建模·管网
GIS兵墩墩18 天前
postgis--PostgreSQL16及其plpython3u扩展
python·postgis
GISBox1 个月前
PostGIS数据通过GISBox发布WFS/WMS全攻略
数据库·postgresql·wms·gis·postgis·矢量·gisbox
我是小超人-雨石花3 个月前
postgresql + postgis安装
数据库·postgresql·postgis·空间数据库
gis分享者3 个月前
使用postgresql、postgis数据库作为存储仓库,发布geoserver矢量切片服务(pbf切片)、矢量切片图层组服务
postgresql·geoserver·postgis·矢量切片·服务·pbf·图层组
❀͜͡傀儡师3 个月前
基于提供的镜像构建PostGIS、pgvector 的 PostgreSQL 18镜像的Dockerfile
数据库·postgresql·postgis
梦想画家4 个月前
PostGIS实战指南:从环境搭建到LBS周边查询(含常用函数)
postgresql·postgis·lbs
quweiie5 个月前
宝塔安装postgis3.6插件的详细步骤
postgresql·postgis·宝塔
刘一哥GIS6 个月前
Windows环境搭建:PostGreSQL+PostGIS安装教程
数据库·python·arcgis·postgresql·postgis
cwr8881 年前
RedHat8安装postgresql15和 postgis3.4.4记录及遇到的问题总结
postgresql·postgis