关于postgre数据库部分函数的使用
-
通过函数实现gis点位聚合
-
WIDTH_BUCKET 的原理是将对应的经度、纬度范围值划分为多少份,这个参数就是地图四至。比如高德地图,它的可见范围,从西至东(经度范围),从南至北(纬度范围),正确的四至是一个数组表示的值如,[minX,minY,maxX,MaxY],下面将经度分为16份,纬度分为9份。
-
<- 可以根据查询出的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
-
-
通过wkt和半径来进行圈选查询
-
首先将前端传给我们的经纬度拼接为wkt值:“POINT(” + longitude +" " + latitude + " 0.000000000000000)";
-
通过函数将圈选所需缓冲区范围查询出来:
SELECT ST_AsText(ST_Transform( ST_Buffer(ST_Force2D(ST_Transform(ST_GeomFromText('${wkt}', 4326), 32650)), '${radius}'), 4326)) as geometry
-
圈选查询:
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
-