Les utilisateurs de l’API Google Map sont souvent confrontés à un problème lorsqu’ils ont beaucoup de marqueurs sur une carte google map et qu’ils n’arrivent pas à avoir un cadrage cohérent et un zoom approprié.

En effet, on peut remédier à ce problème grâce aux mathématiques : il suffit de prendre le point central entre les 2 points les plus éloignés et d’ajuster le zoom en fonction de la distance entre ces 2 derniers.

Le script suivant vous montre comment calculer le zoom et les coordonnées du cadrage le plus approprié à partir d’un ensemble de marqueurs. Cette fonctionnalité est disponible sur PhoogleMap.

public function enableAutoZoom ()
{
$latitude_array = array();
$latitude_array = array();
foreach ($this->validPoints as $key => $value)
{
$latitude_array[] = $value['lat'];
$longitude_array[] = $value['long'];
}
$minimal_latitude = min ($latitude_array);
$maximal_latitude = max ($latitude_array);
$minimal_longitude = min ($longitude_array);
$maximal_longitude = max ($longitude_array);

$central_latitude = $minimal_latitude + ($maximal_latitude - $minimal_latitude) / 2;
$central_longitude = $minimal_longitude + ($maximal_longitude - $minimal_longitude) / 2;

$miles = (3958.75 * acos(sin($minimal_latitude / 57.2958) * sin($maximal_latitude / 57.2958) + cos($minimal_latitude / 57.2958) * cos($maximal_latitude / 57.2958) * cos($maximal_longitude / 57.2958 - $minimal_longitude / 57.2958)));

switch ($miles)
{
case ($miles < 0.2):
$zoom = 2;
break;
case ($miles < 0.5):
$zoom = 3;
break;
case ($miles < 1):
$zoom = 3;
break;
case ($miles < 2):
$zoom = 4;
break;
case ($miles < 3):
$zoom = 5;
break;
case ($miles < 7):
$zoom = 6;
break;
case ($miles < 15):
$zoom = 8;
break;

case ($miles < 50):
$zoom = 9;
break;

case ($miles < 300):
$zoom = 12;
break;

case ($miles < 600):
$zoom = 14;
break;
default:
$zoom = 16;
break;
}
$this->centerMap($central_latitude, $central_longitude);
$this->zoomLevel = $zoom;
}