Our DNA is written in Swift


DTClusterMaker employs a very efficient method to spatially sort and cluster closeby POIs.

In the presented demonstration app you can explode any of the purple pins into it’s original POIs. You get two different algorithms to choose from: The perfect one, that tends to slow down if you feed it hundrets of POIs.

And it’s ultra-fast cousin which works by “boxing” the POIs. It’s so fast in fact, that I am thinking of letting it run multiple times with a shifted grid and then choose the output that gives me the smallest number of POIs. If you have hundreds of POIs then you won’t see a difference.

Without it your screen might look like this:

After a quick optimization with DTClusterMaker this mess turns into something much ligther, much nicer to look at:

I hope that you agree that the second view would be the preferred variant. This way you can still see the name of the city in question: München (= Munich).

Price: 25 EUR (How many U.S. Dollars?)

Apps using this component:

Customer Quotes:

“When not clustered the memory use of these apps are huge. DTClusterMarker
keeps the speed of the apps in shape!”

Links: Developer’s ForumCocoapedia

Parts Categories:


  1. hey.
    i spend time 2 month try to this active.
    can i see demonstration like movie?

    i want purchase this lib.

  2. Hey,

    Can I use custom made Map, in other words, annotations/pins over a PNG?


    If I’d require some modification/addition of a feature, would you be willing to add? Obviously with pay.

  3. Well, is the custom map an overlay for MKMapView? If yes, then you can use it.

    Modifications/Additions are charged at our normal consulting rate.

  4. Can I use custum images for pins with this library?

  5. This is a class that calculates the clusters, you have to implement your own UI. So yes, you can use an images you like.

  6. I am currently using Revolver to do clustering in my application and one thing it does not handle is pins that are right on top of each other. I know clustering isn’t designed to solve this particular issue, but I was hoping your code would.