var maps = {}; // Enthält das GMap2 Objekt für jede Id. var markers = {}; var markerbounds = {}; var baseIcon = new GIcon(); baseIcon.shadow = "http://www.google.de/mapfiles/shadow50.png"; baseIcon.iconSize = new GSize(20, 34); baseIcon.shadowSize = new GSize(37, 34); baseIcon.iconAnchor = new GPoint(9, 34); baseIcon.infoWindowAnchor = new GPoint(9, 2); baseIcon.infoShadowAnchor = new GPoint(18, 25); function zIndex10000(marker) { return 10000; } function zIndex5000(marker) { return 5000; } /** * @fn object makeMarker( GMap2 map, Array data, String image, GLatLngBounds bounds ) * Erstellt einen Marker auf der Karte @a map, basierend auf den Daten in @a data. * @param map Map-Objekt der GoogleMaps API V2. * @param data Liste der Daten mit folgenden Inhalten * - fortlaufende Nr. * - Id * - Latitude * - Longitude * - Titel für den Marker * - Adresse * - HTML-Code für das InfoWindow, wenn kein DIV mit der Id infowindow_ @i nr existiert. * - Typ (plus, basis, gs) * @param image URL des Icons für den Marker. * @param bounds[out] Wenn übergeben, werden diese Grenzen um den neu erzeugten Punkt erweitert. * @return Objekt mit den Einträgen * - @p GMarker @p marker Referenz auf das erzeugte Marker Objekt. * - @p Node|String @p info HTML-Element des Info-Fensters des Markers oder HTML-Code des Inhalts. * - @p GLatLng @p position Koordinaten des Markers. * - @p GMarkerOptions @p opts Optionen für den Marker. */ function makeMarker(map, data, image, bounds ) { var icon = new GIcon(baseIcon, image); var pos = new GLatLng(data[2],data[3]); var opts = { icon:icon, title:data[4] }; if( data[7] == "plus" ) opts.zIndexProcess=zIndex10000; var marker = new GMarker(pos,opts); //marker.bindInfoWindow( document.getElementById('infowindow_'+spk[0]) );// funktioniert nur einmal :( map.addOverlay(marker); if( bounds ) bounds.extend(pos); var info; if( info = document.getElementById('infowindow_'+data[0]) ) { GEvent.addListener(marker, "click", function() { marker.openInfoWindow(info); }); } else { info = data[6]; GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(info); }); } return {marker:marker, info:info, position:pos, options:opts}; } /** * @fn void setMarkers( String id, Array list, boolean letters ) * Setzt für jeden Datensatz in der Liste @a list einen Marker auf die Karte @a map * @param id Id des HTML-Elements, in welches die GoogleMap erzeugt wurde. * @param list Liste von Datensätzen der Form, wie in makeMarker() beschrieben. * @param letters Gibt an, ob die Marker mit Buchstaben versehen werden sollen. Wenn ja, geschieht dies nur bis zum max. 26. Eintrag. */ function setMarkers(id, list, letters) { for( var i = 0; i < list.length; i++ ) { var typ = list[i][7]; var bgcolor = typ == "plus" ? "FF5555" : "F8F8F8"; var letter = i < 26 ? String.fromCharCode("A".charCodeAt(0) + i) : ''; var image = letters ? "http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld="+letter+"|"+bgcolor+"|000000" : "http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=|FF0000|000000"; markers[id].push( makeMarker( maps[id], list[i], image, markerbounds[id] ) ); } } /** * @fn GMap2 createMap( String id ) * Erzeugt ein neues GoogleMap-Objekt im HTML-Element mit der Id @a id und speichert die Referenz intern. * @param id Id des HTML-Elements, in dem eine GoogleMap erzeugt wird. * @return Erzeugtes GoogleMap-Objekt. */ function createMap( id ) { maps[id] = new GMap2(document.getElementById(id)); markers[id] = []; markerbounds[id] = new GLatLngBounds(); return maps[id]; } /** * @fn GMap2 getMap( String id ) * Liefert das GoogleMap-Objekt zum Element mit der Id @a id. * @return GoogleMap-Objekt. */ function getMap( id ) { return maps[id]; } /** * @fn void zoomMapToFitMarkerBounds( String id, int maxzoom ) * Stellt die Karte mit der Id @a id so dar, dass alle über setMarkers() gesetzten Marker hinein passen. * @param id Id des HTML-Elements, in dem eine GoogleMap erzeugt wird. */ function zoomMapToFitMarkerBounds( id, maxzoom ) { var boundsZoomLevel = maps[id].getBoundsZoomLevel(markerbounds[id]); if( maxzoom && boundsZoomLevel > maxzoom ) boundsZoomLevel = maxzoom; maps[id].setCenter(markerbounds[id].getCenter(), boundsZoomLevel); //maps[id].setZoom( maps[id].getBoundsZoomLevel(markerbounds[id]) ); } /** * @fn object getMarkerData( String id, int index ) * Liefert die durch makeMarker() gespeicherten Daten zum Marker mit Index @a index. * @param id Id des HTML-Elements der zugehörigen GoogleMap. * @param index Index des Markers. Entspricht der Reihenfolge der Erzeugung, beginnend mit 0. */ function getMarkerData( id, index ) { return markers[id][index]; }