最近有一个需求,在地图上,将客户按照距离进行聚合。比如,a客户到b客户5km,b客户到c客户5km,那么abc就可以聚合成一个集合。首先想到的就是找一个根据坐标来聚合的算法,这里找了一些后来选择了较为简单也符合要求的DBScan聚类算法。
它是一种基于密度的聚类算法,简单来说就是根据样本的紧密程度和数量将其分成多个集合。这个样本一般来说是一堆坐标点。参数可以为欧式距离和邻域密度阈值(就是每次寻找相邻的点的最低数量)。最终返回多个样本集合。
2.java实现
坐标点:这个类如果测试的话,只用到里面的point坐标点这个属性
import java.util.Collection;
import org.apache.commons.math.stat.clustering.Clusterable;
import org.apache.commons.math.util.MathUtils;
import bsh.This;
/**
- @author xjx
*/
public class CustomerPoint implements Clusterable{
private String sender;
private String sender_addr;
private int value;
private final double[] point;
p