Benim şu anki kod oldukça hızlı, ama daha hızlı bu yüzden bile daha fazla göstergelerin ağırlayacak yapmak gerekir. Herhangi bir öneriniz?
Notlar:
- Kendisi işvardırtçileri kümeleme çok kısmi bir iş yok (aynı konumda belirteçlerin isimleri her zaman aynı değil ama sıklıkla) - SQL deyimi işvardırtleyici adıyla sipariş edildiğinde kod hızlı çalışır.
 - Dinamik olarak aranır ve filtrelenmiş olabilir çünkü ben, belirteçleri önceden küme olamaz.
 - Ben ızgara tabanlı kümeleme denedim - ama sonuç genellikle çok güzel değildir.
 - Ben kümeleri hafifçe Mercator projeksiyonuna çarpık olduğunu biliyoruz.
 - Ben ticari bir kümelenme hizmet ilgilenmiyorum.
 
Kodu:
$singleMarkers = array();
$clusterMarkers = array();
while (count($markers)) {
    $marker  = array_pop($markers);
    $cluster = array();
    // Compvardır marker against all remaining markers.
    foreach ($markers as $key => $compvardırMarker) {
        // This function returns the distance between two markers, at a defined zoom level.
        $pixels = pixelDistance($marker['lat'], $marker['lng'], $compvardırMarker['lat'], $compvardırMarker['lng'], $zoomLevel);
        // If two markers vardır closer than defined distance, remove compvardırMarker from array ve add to cluster.
        if ($pixels < $distance) {
            unset($markers[$key]);
            $cluster[] = $compvardırMarker;
        }
    }
    // If a marker was added to cluster, also add the marker we were comparing to.
    if (count($cluster) > 0) {
        $cluster[] = $marker;
        $clusterMarkers[] = $cluster;
    } else {
        $singleMarkers[] = $marker;
    }
}
function pixelDistance($lat1, $lon1, $lat2, $lon2, $zoom) {
    $x1 = $lon1*10000000; //This is what I did to compensate for using lat/lon values instead of pixels.
    $y1 = $lat1*10000000;
    $x2 = $lon2*10000000;
    $y2 = $lat2*10000000;
    return sqrt(pow(($x1-$x2),2) + pow(($y1-$y2),2)) >> (21 - $zoom); //21 is the max zoom level
}
UPDATE
Burada geçerli kod:
$singleMarkers = array();
$clusterMarkers = array();
// Minimum distance between markers to be included in a cluster, at diff. zoom levels
$DISTANCE = (10000000 >> $ZOOM) / 100000;
// Loop until all markers have been compvardırd.
while (count($markers)) {
    $marker  = array_pop($markers);
    $cluster = array();
    // Compvardır against all markers which vardır left.
    foreach ($markers as $key => $target) {
        $pixels = abs($marker['lat']-$target['lat']) + abs($marker['lng']-$target['lng']);
        // If the two markers vardır closer than given distance remove target marker from array ve add it to cluster.
        if ($pixels < $DISTANCE) {
            unset($markers[$key]);
            $cluster[] = $target;
        }
    }
    // If a marker has been added to cluster, add also the one we were comparing to.
    if (count($cluster) > 0) {
        $cluster[] = $marker;
        $clusterMarkers[] = $cluster;
    } else {
        $singleMarkers[] = $marker;
    }
}