Erstellen eines Google Map Clusters 3.0

Bei zu vielen Markern in einer Karte wird es schnell unübersichtlich und es ist kaum zu erkennen wie viele Marker in einer bestimmten Region gesetzt sind.

In manchen Anwendungsfällen ist es aber fördernd die Anzahl der Marker zu kennen. Daher bietet die Google Maps API mit der MarkerClustter Erweiterung Abhilfe.

Ausgehend von einer Map mit drei Markern und dem Bounce aus dem Letzten Post kann dies einfach nachgepflegt werden.

Die Ausgangslage:

<div class=”gmap” id=”google_map”></div>
<script type=”text/javascript” src=”https://maps.google.com/maps/api/js?sensor=false&amp;language=de”></script>
<script type=“text/javascript“>

/* zu erst werden die Optionen im JSON Format definiert */
var myOptions = {
zoom: 12, // Zoom Stufe der Karte
mapTypeId: google.maps.MapTypeId.ROADMAP // Ausgabeart der Karte ( Staßenkarte / Sattelitenkarte / Terrain Karte / Hybrid )
};

/* anschließend wird das Eigentlich Karten Objekt erstellt*/
var myMap = new google.maps.Map(
document.getElementById(„google_map“), // Die ID des HTML DIV in dem die Karte gezeigt werden soll.
myOptions // die oben definierten Optionen. Diese könneten auch direkt hier übergeben werde.
);

/* Ein Bounce Objeket erstellen */
var Bounds = new google.maps.LatLngBounds(); // das Objekt zur verwaltung der Marker Positionen

// Die Position für New York wäre die folgende
var latlong = new google.maps.LatLng(40.7143528,-74.0059731);

/* dem Bounce die Position des ersten Markers übergeben */
Bounds.extend(latlong);

/* neuen Marker erstellen */
var Marker = new google.maps.Marker({
position: latlong, // Position des Markers ( hier New York das Zentrum der Karte )
map: myMap // die Karte zuweisen
});

// Die Position für den zweiten Marker erstellen
var latlong = new google.maps.LatLng(39.7143528,-75.0059731);

/* dem Bounce die Position des zweiten Markers übergeben */
Bounds.extend(latlong);

/* Einen weiterern Marker erstellen */
var Marker = new google.maps.Marker({
position: latlong, // Position des Markers ( hier New York das Zentrum der Karte )
map: myMap // die Karte zuweisen
});

// Die Position für den zweiten Marker erstellen
var latlong = new google.maps.LatLng(41.7143528,-73.0059731);

/* dem Bounce die Position des dritten Markers übergeben */
Bounds.extend(latlong);

/* Einen weiterern Marker erstellen */
var Marker = new google.maps.Marker({
position: latlong, // Position des Markers ( hier New York das Zentrum der Karte )
map: myMap // die Karte zuweisen
});

/* nun muss die Karte auf das Richtige Zoom Level gesetzt werden um alle Punkte sehen zu können. */
var zoomLevel = myMap.fitBounds(Bounds);

/* jetzt wird das Zentrum des Bounce Objektes benötigt. */
var mapCenter = Bounce.getCenter();

/* nun muss noch das Zentrum der Karte auf die Position gesetzt werden */
myMap.setCenter(mapCenter, zoomLevel);
</script>

Um mit dem MarkerCluster zu arbeiten muss dieser in die Webseite eingebunden werden. Dies können wir über googlecode.com realisieren.
Hierzu wird nach der Google Map Api einbindung noch folgender Tag hinzugefügt.

<script type=“text/javascript“ src=“http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/src/markerclusterer.js“></script&gt;

Dieser bindet nun die MarkerCluster Erweiterung in die Webseite ein.

Im nächsten Schritt muss dem Cluster mitgeteilt werden welche Marker es Gibt, hierzu merkt man sich die erstellten Marker in einem Array was dann dem MarkerCluster übergeben wird.

<script type=“text/javascript“>
// das Array für Marker definieren
var MarkerArray = [];

// Die Position für New York wäre die folgende
var latlong = new google.maps.LatLng(40.7143528,-74.0059731);

/* dem Bounce die Position des ersten Markers übergeben */
Bounds.extend(latlong);

/* neuen Marker erstellen */
var Marker = new google.maps.Marker({
position: latlong, // Position des Markers ( hier New York das Zentrum der Karte )
map: myMap // die Karte zuweisen
});

/* DEM Cluster Array den Marker übergeben. */
MarkerArray.push(Marker);

/* Cluster Optionen */
var mcOptions = {
gridSize: 50,
maxZoom: 14, // definiert die Maximale Stufe in die gezoomt wird
}

/* Cluser erstellen */
var Cluste = new MarkerClusterer(
myMap, // Karte definieren
MarkerArray, // Marker Array übergeben
mcOptions // Cluster Optionen
);
</script>

Mit dieser Änderung Cluster Google Map nun die Marker und zeigt die Anzahl der Marker an.

Das Vollständiges Script

<div class=”gmap” id=”google_map”></div>
<script type=”text/javascript” src=”https://maps.google.com/maps/api/js?sensor=false&amp;language=de”></script>
<script type=“text/javascript“>

// das Array für Marker definieren
var MarkerArray = [];

/* zu erst werden die Optionen im JSON Format definiert */
var myOptions = {
zoom: 12, // Zoom Stufe der Karte
mapTypeId: google.maps.MapTypeId.ROADMAP // Ausgabeart der Karte ( Staßenkarte / Sattelitenkarte / Terrain Karte / Hybrid )
};

/* anschließend wird das Eigentlich Karten Objekt erstellt*/
var myMap = new google.maps.Map(
document.getElementById(„google_map“), // Die ID des HTML DIV in dem die Karte gezeigt werden soll.
myOptions // die oben definierten Optionen. Diese könneten auch direkt hier übergeben werde.
);

/* Ein Bounce Objeket erstellen */
var Bounds = new google.maps.LatLngBounds(); // das Objekt zur Verwaltung der Marker Positionen

// Die Position für New York wäre die folgende
var latlong = new google.maps.LatLng(40.7143528,-74.0059731);

/* dem Bounce die Position des ersten Markers übergeben */
Bounds.extend(latlong);

/* neuen Marker erstellen */
var Marker = new google.maps.Marker({
position: latlong, // Position des Markers ( hier New York das Zentrum der Karte )
map: myMap // die Karte zuweisen
});

/* DEM Cluster Array den Marker übergeben. */
MarkerArray.push(Marker);

// Die Position für den zweiten Marker erstellen
var latlong = new google.maps.LatLng(39.7143528,-75.0059731);

/* dem Bounce die Position des zweiten Markers übergeben */
Bounds.extend(latlong);

/* Einen weiterern Marker erstellen */
var Marker = new google.maps.Marker({
position: latlong, // Position des Markers ( hier New York das Zentrum der Karte )
map: myMap // die Karte zuweisen
});

/* DEM Cluster Array den Marker übergeben. */
MarkerArray.push(Marker);

// Die Position für den zweiten Marker erstellen
var latlong = new google.maps.LatLng(41.7143528,-73.0059731);

/* dem Bounce die Position des dritten Markers übergeben */
Bounds.extend(latlong);

/* Einen weiterern Marker erstellen */
var Marker = new google.maps.Marker({
position: latlong, // Position des Markers ( hier New York das Zentrum der Karte )
map: myMap // die Karte zuweisen
});

/* DEM Cluster Array den Marker übergeben. */
MarkerArray.push(Marker);

/* Cluster Optionen */
var mcOptions = {
gridSize: 50,
maxZoom: 14, // definiert die Maximale Stufe in die gezoomt wird
}

/* Cluser erstellen */
var Cluste = new MarkerClusterer(
myMap, // Karte definieren
MarkerArray, // Marker Array übergeben
mcOptions // Cluster Optionen
);

/* nun muss die Karte auf das Richtige Zoom Level gesetzt werden um alle Punkte sehen zu können. */
var zoomLevel = myMap.fitBounds(Bounds);

/* jetzt wird das Zentrum des Bounce Objektes benötigt. */
var mapCenter = Bounce.getCenter();

/* nun muss noch das Zentrum der Karte auf die Position gesetzt werden */
myMap.setCenter(mapCenter, zoomLevel);
</script>

Natürlich können alle Marker Icons und Cluster Icons selbst über die Style und Icon Parameter der Api konfiguriert werden.
Hierzu mehr in der Google Map API Dokumentation und der MarkerCluster Dokumentation.

Tutorial: Erstellung einer Google Map

Erstellung einer Google Map

Einleitung:
Für die Einbindung einer Google Map wird JavaScript, HTML und die Google Map API benötigt.
Da zum 01.03.2013 die Google Map API 2.0 offiziell abgeschaltet wird sollten nun auch die letzten auf die Google Map API 3.0 upgraden.

Für eine einfache Map Einbindung wird nur die Google Map API 3.0 benötigt diese kann direkt über die Goolge Server eingebunden werden.
Der entsprechende JavaScript Aufruf ist:

<script type=“text/javascript“ src=“https://maps.google.com/maps/api/js?sensor=false&amp;language=de“></script&gt;

Der Parameter language steht für die Sprache. In diesem Fall de für Deutsch. Der Parameter Sensor steht für eine aktive Ortungsprüfung. In diesem Fall false da keine Endnutzer Ortung gewünscht ist. Sollte dies der gewünscht werden, diesen Wert auf true setzten oder den Parameter entfernen. Im nächsten Schritt wird ein HTML DIV definiert der die erzeugte Map enthalten wird. Der entsprechende Eintrag im HTML Dokument ist beispielsweise:

<div class=“gmap“ id=“google_map“></div>

Nun benötigen wir die eigentliche erstellung unserer Google Karte. Hierzu schreiben wir uns eine JavaScript Anweisung und definieren die Google Map.

<script type=“text/javascript“>// <![CDATA[
/* zu erst werden die Optionen im JSON Format definiert */
var myOptions = {
zoom: 12, // Zoom Stufe der Karte
mapTypeId: google.maps.MapTypeId.ROADMAP // Ausgabe art der Karte ( Straßenkarte / Satellitenkarte / Terrain Karte / Hybrid )
};

/* anschließend wird das Eigentlich Karten Objekt erstellt*/
var myMap = new google.maps.Map(
document.getElementById(„google_map“), // Die ID des HTML DIV in dem die Karte gezeigt werden soll.
myOptions // die oben definierten Optionen. Diese könneten auch direkt hier übergeben werde.
);

// Die Position für New York wäre die folgende
var latlong = new google.maps.LatLng(40.7143528,-74.0059731);

/* nun muss noch das Zentrum der Karte auf die Position gesetzt werden */
myMap.setCenter(latlong);

// ]]></script>

Nun wird unser Div mit der Karte ersetzt.

Koordinaten können zum Beispiel über die unten genannte Webseite gefunden werden.
http://www.mapcoordinates.net/

Um nun auch noch einen sogenannten Marker auf die Karte zu setzten muss das JavaScript erweitert werden.

/* neuen Marker erstellen */
var Marker = new google.maps.Marker({
position: latlong, // Position des Markers ( hier New York das Zentrum der Karte )
map: myMap // die Karte zuweisen
});

Mit dieser Erweiterung ist ein Marker im Zentrum der Karte gesetzt. Das JavaScript sieht nun wie folgt aus:

<script type=“text/javascript“>// <![CDATA[
/* zu erst werden die Optionen im JSON Format definiert */
var myOptions = {
zoom: 12, // Zoom Stufe der Karte
mapTypeId: google.maps.MapTypeId.ROADMAP // Ausgabe art der Karte ( Straßenkarte / Satellitenkarte / Terrain Karte / Hybrid )
};

/* anschließend wird das Eigentlich Karten Objekt erstellt*/
var myMap = new google.maps.Map(
document.getElementById(„google_map“), // Die ID des HTML DIV in dem die Karte gezeigt werden soll.
myOptions // die oben definierten Optionen. Diese könneten auch direkt hier übergeben werde.
);

// Die Position für New York wäre die folgende
var latlong = new google.maps.LatLng(40.7143528,-74.0059731);

/* nun muss noch das Zentrum der Karte auf die Position gesetzt werden */
myMap.setCenter(latlong);

/* neuen Marker erstellen */
var Marker = new google.maps.Marker({
position: latlong, // Position des Markers ( hier New York das Zentrum der Karte )
map: myMap // die Karte zuweisen
});

// ]]></script>

Um mehrere Marker auf die Karte zu setzten werden einfach mehrere neue Marker mit Positionen untereinander geschrieben.

<script type=“text/javascript“>// <![CDATA[
/* zu erst werden die Optionen im JSON Format definiert */
var myOptions = {
zoom: 12, // Zoom Stufe der Karte
mapTypeId: google.maps.MapTypeId.ROADMAP // Ausgabeart der Karte ( Staßenkarte / Sattelitenkarte / Terrain Karte / Hybrid )
};

/* anschließend wird das Eigentlich Karten Objekt erstellt*/
var myMap = new google.maps.Map(
document.getElementById(„google_map“), // Die ID des HTML DIV in dem die Karte gezeigt werden soll.
myOptions // die oben definierten Optionen. Diese könneten auch direkt hier übergeben werde.
);

// Die Position für New York wäre die folgende
var latlong = new google.maps.LatLng(40.7143528,-74.0059731);

/* nun muss noch das Zentrum der Karte auf die Position gesetzt werden */
myMap.setCenter(latlong);

/* neuen Marker erstellen */
var Marker = new google.maps.Marker({
position: latlong, // Position des Markers ( hier New York das Zentrum der Karte )
map: myMap // die Karte zuweisen
});

// Die Position für den zweiten Marker erstellen
var latlong = new google.maps.LatLng(39.7143528,-75.0059731);

/* Einen weiterern Marker erstellen */
var Marker = new google.maps.Marker({
position: latlong, // Position des Markers ( hier New York das Zentrum der Karte )
map: myMap // die Karte zuweisen
});

// ]]></script>

Die Karte kann zudem bei mehreren Markern dem Zentrum dieser ausgerichtet werden.
Die erreicht man mit dem Google Map LatLngBouncer.

Anhand des Folgenden Beispiels wird eine Karte mit drei Markern Mittig positioniert.

<script type=“text/javascript“>// <![CDATA[
/* zu erst werden die Optionen im JSON Format definiert */
var myOptions = {
zoom: 12, // Zoom Stufe der Karte
mapTypeId: google.maps.MapTypeId.ROADMAP // Ausgabeart der Karte ( Staßenkarte / Sattelitenkarte / Terrain Karte / Hybrid )
};

/* anschließend wird das Eigentlich Karten Objekt erstellt*/
var myMap = new google.maps.Map(
document.getElementById(„google_map“), // Die ID des HTML DIV in dem die Karte gezeigt werden soll.
myOptions // die oben definierten Optionen. Diese könneten auch direkt hier übergeben werde.
);

/* Ein Bounce Objeket erstellen */
var Bounds = new google.maps.LatLngBounds(); // das Objekt zur verwaltung der Marker Positionen

// Die Position für New York wäre die folgende
var latlong = new google.maps.LatLng(40.7143528,-74.0059731);

/* dem Bounce die Position des ersten Markers übergeben */
Bounds.extend(latlong);

/* neuen Marker erstellen */
var Marker = new google.maps.Marker({
position: latlong, // Position des Markers ( hier New York das Zentrum der Karte )
map: myMap // die Karte zuweisen
});

// Die Position für den zweiten Marker erstellen
var latlong = new google.maps.LatLng(39.7143528,-75.0059731);

/* dem Bounce die Position des zweiten Markers übergeben */
Bounds.extend(latlong);

/* Einen weiterern Marker erstellen */
var Marker = new google.maps.Marker({
position: latlong, // Position des Markers ( hier New York das Zentrum der Karte )
map: myMap // die Karte zuweisen
});

// Die Position für den zweiten Marker erstellen
var latlong = new google.maps.LatLng(41.7143528,-73.0059731);

/* dem Bounce die Position des dritten Markers übergeben */
Bounds.extend(latlong);

/* Einen weiterern Marker erstellen */
var Marker = new google.maps.Marker({
position: latlong, // Position des Markers ( hier New York das Zentrum der Karte )
map: myMap // die Karte zuweisen
});

/* nun muss die Karte auf das Richtige Zoom Level gesetzt werden um alle Punkte sehen zu können. */
var zoomLevel = myMap.fitBounds(Bounds);

/* jetzt wird das Zentrum des Bounce Objektes benötigt. */
var mapCenter = Bounce.getCenter();

/* nun muss noch das Zentrum der Karte auf die Position gesetzt werden */
myMap.setCenter(mapCenter, zoomLevel);

// ]]></script>