code: func geocluster(clusters []*Cluster, threshold float64) []*Cluster {
  	if len(clusters) < 2 {
  		return clusters
  	}
  
  	bound := geo.NewBoundFromPoints(clusters[0].Centroid, clusters[0].Centroid)
  	for _, cluster := range clusters {
  		bound.Extend(cluster.Centroid)
  		geo.Mercator.Project(cluster.Centroid)
  	}
  
  	factor := geo.MercatorScaleFactor(bound.Center().Lat())
  	scaledThreshold := threshold * threshold * factor * factor
  
  	clusteredClusters, found := clusterClusters(
  		clusters,
  		// Default initialization, TODO: better bucketing/prefiltering will greatly increase performance.
  		// can use the bound above to help with this.
  		initClusterDistances(clusters, CentroidSquaredDistance{}, scaledThreshold),
  		CentroidSquaredDistance{},
  		scaledThreshold,
  	)
  
  	result := make([]*Cluster, 0, found)
  	for _, cluster := range clusteredClusters {
  		if cluster != nil {
  			geo.Mercator.Inverse(cluster.Centroid)
  			result = append(result, cluster)
  		}
  	}
  
  	return result
  }
docs: // will modify the passed in clusters, centroid and list of pathers,
  // so a copy must have been made before reaching this function.