本文主要是介绍【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 tablenamewhere 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 tablenamewhere 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
这篇关于【POSTGIS】判定点位是否在范围内的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!