js实现离散聚合点的计算

说明

本示例使用的Turf.js里的clustersDbscan类,他根据相邻点之间的距离聚合,在距离小于制定距离时将会聚合,一般引入前端地图渲染组件不需要自己计算,该方法结合echarts渲染效果更佳。
优点:简单,直接通过距离聚合。
缺点:数量集上千后就会导致卡顿。优化方案,可分批聚合,每次聚合300条,最后将每次的聚合结果二次聚合,这样能承受几万个点。但是误差会比较大。

turf.js下载

npm install @turf/turf

代码块

import * as turf from '@turf/turf'
var points={
     type: "FeatureCollection",
     features:[
        {type: "Feature",geometry:{ type: "Point",coordinates:[123.4,33.9] } },
        {type: "Feature",geometry:{ type: "Point",coordinates:[123.5,33.9] } },
        {type: "Feature",geometry:{ type: "Point",coordinates:[96.4,20.9] } },
        {type: "Feature",geometry:{ type: "Point",coordinates:[120.4,38.9] } },
        {type: "Feature",geometry:{ type: "Point",coordinates:[123.4,33.9] } },
        {type: "Feature",geometry:{ type: "Point",coordinates:[123.4,33.9] } },
	]
}

 var clustered=  turf.clustersDbscan(points, 100);//单位默认公里
 var arr =  clustered.features;  //返回的数据带有特点标识。
var ary={};
 /*去重并统计数量*/
 for(let i=0;i<arr.length;i++){
   var x=arr[i].properties.centroid[0];
   var y=arr[i].properties.centroid[1];
    if(arr[i].properties.cluster!=undefined){
     if(arr[i].properties.cluster in ary){
         ary[arr[i].properties.cluster]=[x,y,ary[arr[i].properties.cluster][2]+1];//有重复的数量+1
      }else{
         ary[arr[i].properties.cluster]=[x,y,1];//没有重复的直接默认数量一
      }
     }else{
       ary[arr[i].properties.centroid]=[x,y,1];//没有重复的直接默认数量一
      }
    }
	//最后结果pointResult
   var pointResult=[]
   for( var key in ary){
       pointResult.push({
           name:ary[key][2],
           value:ary[key]
       })
    }
    console.log(pointResult)
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值