关于postgre数据库部分函数的使用

本文介绍了如何利用POSTGRESQL的WIDTH_BUCKET函数进行地理信息点位的聚合,以及如何结合WKT和半径进行区域查询。通过设定经度和纬度的范围,将点位划分为多个网格,并计算每个网格内的点数量,同时展示网格中心点。此外,还展示了如何根据给定的经纬度和半径生成缓冲区范围,以及如何使用该范围进行数据查询,筛选出位于特定地理区域内的记录。
摘要由CSDN通过智能技术生成

关于postgre数据库部分函数的使用

  1. 通过函数实现gis点位聚合

    1. WIDTH_BUCKET 的原理是将对应的经度、纬度范围值划分为多少份,这个参数就是地图四至。比如高德地图,它的可见范围,从西至东(经度范围),从南至北(纬度范围),正确的四至是一个数组表示的值如,[minX,minY,maxX,MaxY],下面将经度分为16份,纬度分为9份。

    2. <- 可以根据查询出的gids数据进行处理,当前网格内随机一个点展示到地图上 ->
      SELECT 
      width_bucket(st_x(geom), 115.057442 ,117.235188 ,16) grid_x, 
      width_bucket(st_y(geom), 30.431278 , 31.540414, 9) grid_y,  
      count(*),
      st_centroid(st_collect(geom)) geom,  
      array_agg(gid) gids
      from camera 
       
      where 
      st_x(geom) between 115.057442 and 117.235188
      and 
      st_y(geom) between 30.431278  and 31.540414 
       
      GROUP BY grid_x,grid_y 
      
  2. 通过wkt和半径来进行圈选查询

    1. 首先将前端传给我们的经纬度拼接为wkt值:“POINT(” + longitude +" " + latitude + " 0.000000000000000)";

    2. 通过函数将圈选所需缓冲区范围查询出来:

              SELECT ST_AsText(ST_Transform(
                      ST_Buffer(ST_Force2D(ST_Transform(ST_GeomFromText('${wkt}', 4326), 32650)), '${radius}'),
                      4326)) as geometry
      
    3. 圈选查询:

              SELECT "id",
                     "name",
                     longitude,
                     latitude
              FROM student
              WHERE ST_CONTAINS(ST_GEOMFROMTEXT(
                                        '${bufferRange}',
                                        4326), geom)
                AND st_srid(geom) = 4326
                and longitude IS NOT NULL
                and latitude IS NOT NULL
                and geom IS NOT NULL
      
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值