空间聚簇 postgis+postgrel

很多时候,基于空间角度,需要统计查询出噪点(密集区),利用程序的方式可能比较复杂,但是postgis 基于gis的插件可以很方便的提供一些函数给大家使用。如果有问题,欢迎留言,有空会给大家回复

1、不管三七二十一,先做好空间坐标转换

我一般以4326坐标系作为默认空间坐标系,推荐大家使用dbeaver,查看出来的话就是空间点位,而非转换后的0110203203023之类的
update xx  set geom = st_geomfromtext('point('|| lon||' '||lat||')')  

2、 根据最小聚合点计算集合的id【cluster_id为null的为噪点 ,即无效聚合点】

已经聚簇的数据,不会重复和其他数据聚簇的,所以不用担心重复数据的问题
eps (度,不是米):xx(米) / (2 * π * 6371004(地球半径)) * 360
minpoints(最小聚合点):int(个)
/*这里测试拿的30米*/
SELECT *, ST_ClusterDBSCAN(geom, eps := (30 / (2 * 3.14 * 6371004) * 360), minpoints := 3) OVER () AS cluster_id FROM xxx表

3、聚合中心点

这个就是告诉你那里是中心点,以哪个为辐射点的(相当于辐射中心)
SELECT cluster_id,ST_Centroid(ST_Collect(geom)) as center_point,
    st_x(ST_Centroid(ST_Collect(geom))) as clusterCentLng,st_y(ST_Centroid(ST_Collect(geom))) as clusterCentLat FROM 
  ( SELECT *, ST_ClusterDBSCAN(geom, eps := (30 / (2 * 3.14 * 6371004) * 360), minpoints := 3) OVER () AS cluster_id FROM xxx表
) t   GROUP BY cluster_id;

4、 聚合最小面图形(最小凸包)

这个实际就是就是告诉你聚集点是哪里,什么样子,例如 夜市餐饮店,旅游集合点之类的
如果你要利用程序返回前端的话,需要转成字符串传到前端哦,各位亲们别忘记,此处直接给大家抛出函数ST_AsText,其他的大家自己有空百度即可。
   select * from (SELECT   ST_ConvexHull(ST_Collect(geom)) AS cluster_pt, cluster_id,COUNT(1) FROM  
( SELECT *, ST_ClusterDBSCAN(geom, eps := (30 / (2 * 3.14 * 6371004) * 360), minpoints := 3) OVER () AS cluster_id FROM xx表
)t  WHERE cluster_id is not null
GROUP BY cluster_id) tt
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值