Clustering objects on a map
Where can we apply k-means in the context of mobile development? Clustering pins on a map may look like the most natural idea. Having the clusters of user locations, you can guess the location of the user's important locations like home and workplace, for example. We will implement pin clustering to visualize k-means, some of its unfortunate properties, and show why such an application of it may be not the best idea.
You can find a demo application under the 4_kmeans/MapKMeans
folder of supplementary code. Everything interesting happens in the ViewController.swift
. Clustering happens in the clusterize()
method:
func clusterize() { let k = Settings.k colors = (0..<k).map{_ in Random.Uniform.randomColor()} let data = savedAnnotations.map{ [Double]($0.coordinate) } var kMeans = KMeans(k: k) clusters = kMeans.train(data: data) centroidAnnotations = kMeans.centroids .map { CLLocationCoordinate2D(latitude: $0[0], longitude: $0[1]) } .map...