(Lat, lon) points fast clustering using DBScan algorithm in Go.
Given set of geo points, this library can find clusters according to specified params. There are several optimizations applied:
- distance calculation is using "fast" implementations of sine/cosine, with
sqrtbeing removed - to find points within
epsdistance k-d tree is being used - edge case handling of identical points being present in the set
Build list of points:
points := cluster.PointList{{30.258387, 59.951557}, {30.434124, 60.029499}, ...}Pick settings for DBScan algorithm:
epsis clustering radius (in kilometers)minPointsis number of points ineps-radius of base point to consider it being part of the cluster
eps and minPoints together define minimum density of the cluster.
Run DBScan:
clusters, noise := cluster.DBScan(points, 0.8, 10) // eps is 800m, 10 points minimum in eps-neighborhoodDBScan function returns list of clusters (each Cluster being reference to the list of source points) and list
of point indexes which don't fit into any cluster (noise).