Kreativ werden mit der Google Maps API
() translation by (you can also view the original English article)



Sie haben eine glänzende neue Website entworfen; sorgfältige Auswahl von Farben, Typografie und Fotografien, um das Branding des Unternehmens perfekt widerzuspiegeln. Dann fordert Sie Ihr Client auf, eine Karte hinzuzufügen. Sicher, Sie könnten einen Kartenerstellungs-Assistenten verwenden, wie er in jedem Google-Konto enthalten ist. Aber seien wir ehrlich, ihre Funktionalität ist begrenzt und sie sehen ziemlich allgemein aus!
Die Google Maps API hingegen gibt Ihnen die Freiheit, komplett maßgeschneiderte Karten zu erstellen, die alle möglichen coolen Dinge tun können. Die Karte von Portsmouth History ist eine Website, die ich kürzlich mit dieser API erstellt habe.



In dieser Reihe von Tutorials erfahren Sie, wie Sie mit der Google Maps-API benutzerdefinierte Karten erstellen. Sie werden sich mit ein wenig JavaScript die Hände schmutzig machen, aber es wird sich lohnen.
Die Tutorials werden alle möglichen Dinge behandeln. Um nur einige zu nennen: benutzerdefinierte Kartenfarben, Menüs und Markierungen; Erwecken Sie Ihr eigenes Kartendesign (z. B. eine handgezeichnete Karte) zum Leben, indem Sie es auf eine zoombare Google-Karte legen; Verknüpfung mit der Flickr-API; Bildoptimierung; sich anpassendes Design; Codeoptimierung und Validierung. Mit anderen Worten, wenn Sie fertig sind, können Sie nicht nur schöne Karten erstellen, sondern haben sich auch viele Dinge angesehen, die für den Aufbau einer Website relevant sind.
Szenario
Diese Tutorials verwenden das Szenario eines britischen Unternehmens, das Musikfestivals fördert. Das Bild "Endprodukt" oben zeigt das, was wir anstreben. Schauen Sie sich die Demo an.
Hinweis: In diesem Beispiel ist nur der Glastonbury-Marker „aktiv“.
Bevor Sie beginnen, können Sie die zu diesem Tutorial gehörenden Dateien herunterladen. Ich habe für jede Aktivität eine separate HTML-Datei hinzugefügt.
Was ist überhaupt eine API?
Eine API oder Application Programming Interface ist eine ausgefallene Art, eine Reihe von Befehlen (z. B. Funktionen) zu sagen, die ein Unternehmen (z. B. Facebook, Twitter, You Tube, Google) veröffentlicht. Die Idee ist, dass Sie diese Befehle verwenden können, um eine stark angepasste Version ihres Inhalts zu erstellen. Bei der Google Maps API sind der „Inhalt“ beispielsweise die Karten, während bei der Flickr API der „Inhalt“ die Fotos sind.
Wenn Leute von „Mash-ups“ sprechen, meinen sie, dass sie die API von zwei oder mehr Unternehmen verwendet haben, um Inhalte zu kombinieren, zum Beispiel Bilder von Flickr auf einer Google-Karte erscheinen zu lassen. Es gibt buchstäblich Tausende dieser APIs. Weitere Informationen finden Sie unter Programmable Web.
Wir werden uns die Flickr-API in einem späteren Tutorial ansehen, aber zunächst konzentrieren wir uns auf die Google Maps-API. Auf diese Weise können Sie alle möglichen Dinge tun, einschließlich der Anpassung der Farben, Kartenmarkierungen, des Popup-Box-Stils, der Detailstufe und der Zoomstufe. Ganz zu schweigen davon, dass die Karte einige coole Dinge tut, wie z. B. das Anzeigen von Live-Daten, das Gruppieren von Markierungen, das Planen von Routen, das Zeichnen benutzerdefinierter Überlagerungen, das dynamische Aufdecken von Daten .... die Liste ist endlos!
Erste Schritte mit Google Maps
Auch wenn Sie auf das Offensichtliche hinweisen, benötigen Sie für den Einstieg ein Google-Konto. Wenn Sie derzeit noch keinen haben, gehen Sie zu Google und melden Sie sich an.
Ausgestattet mit Ihrem Google-Konto können Sie sich jetzt auf die API-Seiten von Google Maps wagen. Ein Lesezeichen auf diese Seite setzen; Sie werden damit sehr vertraut. Die Hauptbereiche sind:-
- Entwicklerhandbuch: Code-Snippets, die Ihnen zeigen, wie Sie die API-Funktionen verwenden, um bestimmte Dinge zu tun.
- API-Referenz: Die vollständige Referenzliste aller Funktionen in der API. Verwenden Sie dies als eine Art "Einkaufsliste", was Sie mit der API tun können. (Aber denken Sie daran, dass es zusätzliche Bibliotheken gibt, mit denen Sie noch mehr tun können. Dazu kommen wir später).
Bevor Sie fortfahren, benötigen Sie außerdem einen API-Schlüssel (eine lange Folge von Buchstaben und Zahlen, die für Sie eindeutig sind). Holen Sie sich hier Ihren API-Schlüssel.



Erstellen Sie Ihre erste Karte
OK, Sie können mit dem Bauen beginnen.



Damit die bereitgestellte Karte funktioniert, ersetzen Sie dort, wo "YOUR_API_KEY_GOES_HERE" steht, durch Ihren eigenen API-Schlüssel. Ihre Karte sollte der oben gezeigten Karte ähneln.
Das Grundprinzip des Codes besteht darin, dass er ein Div (festival-map
genannt) erstellt, in das das JavaScript die Karte lädt. Ich habe dem Code Kommentare hinzugefügt, um zu erklären, wie es funktioniert, aber es lohnt sich, die wichtigsten Punkte hervorzuheben.
Der Code deklariert Ihre Anwendung zunächst als HTML5 mit der Doctype-Deklaration <!DOCTYPE html>
.
Es richtet dann das Styling für die Karte ein; die Bits zwischen den Tags <style type="text/css">
und </style>
. Sie können das Styling der #festival-map
-ID anpassen, je nachdem, wo Sie Ihre Karte platzieren möchten. Wenn Sie eine Vollbildkarte wünschen, stellen Sie Breite und Höhe auf 100 Prozent ein und entfernen Sie die Ränder.
Dann wird das JavaScript für einen Moment übersprungen und der Code zwischen den Body-Tags erstellt ein leeres HTML-Objekt, d. h. ein div (festival-map
), um die Karte zu halten. Dieser fungiert als eine Art 'Platzhalter', in den das JavaScript die Karte lädt.
1 |
<div id="festival-map"></div> |
OK - jetzt schauen Sie sich das JavaScript an - der Code verbindet sich zuerst mit Ihrem Google Maps-API-Schlüssel.
1 |
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY_GOES_HERE&sensor=true"></script> |
Es wird dann in das JavaScript gestartet, das die Karte erstellt. Kurze Erinnerung: JavaScript-Funktionen (z. B. loadFestivalMap
) sind eine Reihe von Befehlen, die nur ausgeführt werden, wenn sie von einem anderen Code aufgerufen werden. Das mag kompliziert aussehen, aber es macht eigentlich nur ein paar Dinge -
- Die Konfigurationsoptionen (
festivalMapOptions
) der Karte (z.B. Breiten- und Längengrad, Zoomstufen etc.) werden gesetzt und eine leere JavaScript-Variable (festivalMap
) erstellt, der die Karte in Kürze zugewiesen wird. (Tipp: itouchmap ist eine praktische Seite zum Nachschlagen von Breiten- und Längengradkoordinaten eines beliebigen Ortes.) - Dann wird die Funktion
loadFestivalMap
durch diese Zeile ausgeführt:google.maps.event.addDomListener(window, 'load', loadFestivalMap);
- Diese Funktion erstellt die Karte und weist sie der dafür erstellten JavaScript-Variablen (zB
festivalMap
) zu. Dabei wendet es auch die Konfigurationsoptionen an und lädt die Karte in das dafür erstelltefestival-map
-Div. - Schließlich wird die Funktion
loadMapMarkers
durch die letzte Zeile der FunktionloadFestivalMap
zum Laufen gebracht.
Wenn dies keinen Sinn ergibt, lesen Sie sich die Kommentare in der Vollversion des Codes durch, um sie weiter zu erläutern.
Bilder als Kartenmarkierungen
Inzwischen sollten Sie eine Karte am Laufen haben und mit etwas Glück waren Sie nicht allzu sehr vom JavaScript verwirrt! Vorausgesetzt, dass alles in Ordnung ist, können wir damit beginnen, die Karte etwas interessanter zu gestalten.



Es ist ganz einfach, Ihre eigenen Bilder als Kartenmarkierungen zu verwenden. Ähnlich wie Sie die Eigenschaftenoptionen für die Karte selbst festlegen (z. B. center, zoom
usw. wie oben beschrieben), können Sie auch die Eigenschaften der Kartenmarkierungen ändern. Um ein anderes Bild als Kartenmarkierung zu verwenden, müssen Sie nur die icon
-Eigenschaft Ihrer Kartenmarkierungen festlegen. (Wenn Sie interessiert sind, listet der Abschnitt "Google Maps API - Markierungen" alle Eigenschaften, Methoden und Ereignisse von Kartenmarkierungen auf, die Sie verwenden können.)
Normalerweise handelt es sich bei den Kartenmarkierungen um PNGs, da sie eine unregelmäßige Form mit transparentem Hintergrund ermöglichen.
Wir müssen auch den „anklickbaren“ Bereich für jeden Marker festlegen, um sicherzustellen, dass das „Bild“-Bit der PNG-Datei anklickbar ist und das transparente Bit nicht. Dies ist sehr wichtig, wenn sich die Markierungen überlappen.
Sie erstellen zuerst das Kartensymbolbild (markerIconGlastonbury
) und dann die Kartensymbolform (markerShapeGlastonbury
) und schließlich verknüpfen Sie beide mit Ihrer Kartenmarkierung (markerGlastonbury
).
1 |
//Setting the position of the Glastonbury map marker. |
2 |
var markerPositionGlastonbury = new google.maps.LatLng(51.159803, -2.585585); |
3 |
|
4 |
//Setting the icon to be used with the Glastonbury map marker. |
5 |
var markerIconGlastonbury = { |
6 |
url: 'icons/icon_glas_uk.png', |
7 |
//The size image file. |
8 |
size: new google.maps.Size(225, 120), |
9 |
//The point on the image to measure the anchor from. 0, 0 is the top left. |
10 |
origin: new google.maps.Point(0, 0), |
11 |
//The x y coordinates of the anchor point on the marker. e.g. If your map marker was a drawing pin then the anchor would be the tip of the pin. |
12 |
anchor: new google.maps.Point(189, 116) |
13 |
}; |
14 |
|
15 |
//Setting the shape to be used with the Glastonbury map marker. |
16 |
var markerShapeGlastonbury = { |
17 |
coord: [12,4,216,22,212,74,157,70,184,111,125,67,6,56], |
18 |
type: 'poly' |
19 |
}; |
20 |
|
21 |
//Creating the Glastonbury map marker. |
22 |
markerGlastonbury = new google.maps.Marker({ |
23 |
//uses the position set above. |
24 |
position: markerPositionGlastonbury, |
25 |
//adds the marker to the map. |
26 |
map: festivalMap, |
27 |
title: 'Glastonbury Festival', |
28 |
//assigns the icon image set above to the marker. |
29 |
icon: markerIconGlastonbury, |
30 |
//assigns the icon shape set above to the marker. |
31 |
shape: markerShapeGlastonbury, |
32 |
//sets the z-index of the map marker. |
33 |
zIndex:102 |
34 |
}); |
Sie können die vollständige HTML-Datei oben auf dieser Seite herunterladen oder sich die Live-Version ansehen. Im Moment habe ich nur eine Kartenmarkierung hinzugefügt…natürlich werde ich in Kürze weitere hinzufügen!
Eine kurze Anmerkung zu Z-Indizes
Elemente wie Kartenmarkierungen können sowohl x-, y- als auch z-Koordinaten aufweisen. Der Z-Index ist die Tiefe. Es bestimmt, wie Elemente übereinander „gestapelt“ werden und somit wie sie sich überlappen.
Wenn die x- und y-Koordinaten eines Elements gleich sind, werden Elemente mit höheren Z-Indizes über Elementen mit niedrigeren Z-Indizes angezeigt. (Z-Index funktioniert nur bei positionierten Elementen, z.B. relativ, fest oder absolut).
Bisher sieht die Karte in Ordnung aus, da die Google Maps-API standardmäßig Elementen, die weiter unten auf dem Bildschirm erscheinen, einen höheren Z-Index zuweist, sodass sie über den Elementen etwas weiter oben auf dem Bildschirm erscheinen. Z.B. das Symbol der Isle of Wight befindet sich über den Symbolen des Glastonbury- und des Reading-Festivals (siehe Bild unten).
Später in diesem Tutorial sehen wir uns an, wie Sie die Z-Indizes ändern können, um die Anzeige der Kartenmarkierungen zu ändern.
Ändern von Farbe und Detaillierungsgrad
Obwohl die Karte langsam Gestalt annimmt, passt die Standardkarte nicht wirklich zu dem Gesamteffekt, den ich erreichen möchte. Glücklicherweise ist es sehr einfach, mit den API-Stiloptionen das Aussehen der Karte anzupassen.
Ich sollte an dieser Stelle auch sagen, dass ich mir gerade ein paar Musikfestivals geschnappt habe, um dieses Beispiel zu veranschaulichen. Das war etwas zufällig und meine Auswahl spiegelt nicht meine Meinung wider - weder für noch gegen - irgendwelche Festivals!



Schritt 1
Verwenden Sie den JSON-Assistenten, um zu trainieren, wie Ihre Karte aussehen soll. Sie können die Farben von so ziemlich allem ändern, Details hinzufügen und entfernen, die Farbfüllung und Geometrie unabhängig voneinander einstellen usw. Es lohnt sich, etwas Zeit damit zu verbringen, sich an die Funktionsweise zu gewöhnen. (Falls Sie sich fragen, JSON ist nur eine Möglichkeit, Informationen zu formatieren, damit ein Computer sie lesen kann.)
Schritt 2
Wenn Sie mit dem in der Vorschau des JSON-Assistenten angezeigten Stil zufrieden sind, klicken Sie auf die Schaltfläche JSON anzeigen und kopieren Sie den Code.
Schritt 3
Gehen Sie zurück zu Ihrem HTML-Dokument, fügen Sie direkt nach dem öffnenden JavaScript-Tag eine Variable hinzu, die diese Informationen enthält, und fügen Sie dann den Code ein.
1 |
//First, we read in the data describing style. |
2 |
var style_festival = [ |
3 |
{ |
4 |
"featureType": "administrative", |
5 |
"stylers": [ |
6 |
{ "visibility": "off" } |
7 |
] |
8 |
},{ |
9 |
"featureType": "poi", |
10 |
"stylers": [ |
11 |
{ "visibility": "off" } |
12 |
] |
13 |
},{ |
14 |
"featureType": "transit", |
15 |
"stylers": [ |
16 |
{ "visibility": "off" } |
17 |
] |
18 |
},{ |
19 |
"featureType": "road", |
20 |
"stylers": [ |
21 |
{ "visibility": "off" } |
22 |
] |
23 |
},{ |
24 |
"featureType": "landscape", |
25 |
"stylers": [ |
26 |
{ "color": "#FFE200" } |
27 |
] |
28 |
},{ |
29 |
"featureType": "water", |
30 |
"stylers": [ |
31 |
{ "visibility": "on" }, |
32 |
{ "color": "#4f92c6" } |
33 |
] |
34 |
} |
35 |
]; |
Schritt 4
Sie müssen Ihre Karte dazu bringen, die soeben hinzugefügten Informationen als Kartenstil zu behandeln. Verwenden Sie dazu StyledMapType
.
1 |
//Then we use this data to create the styles. |
2 |
var styled_festival = new google.maps.StyledMapType(style_festival, {name: "Festival style"}); |
Schritt 5
Schließlich müssen Sie Ihrer Map Ihren neuen Stil zuweisen, um den Stil zu "aktivieren".
1 |
festivalMap.mapTypes.set('map_styles_festival', styled_festival); |
2 |
festivalMap.setMapTypeId('map_styles_festival'); |
Bitte verwenden Sie den Link am Anfang dieses Tutorials, um eine Kopie des Codes für die bisherige Karte herunterzuladen, oder sehen Sie sich die Live-Demo für diesen Teil des Tutorials an. Ich habe tatsächlich zwei Stile hinzugefügt. Einer wird sofort aktiviert und der andere wird aktiviert, wenn die Karte gezoomt wird, um eine höhere Detailgenauigkeit zu erzielen. (Dies wird weiter unten erläutert.)
Ich konnte auch nicht widerstehen, an dieser Stelle einen Hintergrund hinzuzufügen :) Werfen Sie einen Blick auf den body
-CSS-Selektor, um zu sehen, wie ich das gemacht habe.
Popup-Boxen und dynamischer Zoom



Okay, jetzt ist es an der Zeit, dass die Karte tatsächlich etwas tut! Sie könnten das integrierte Infofenster-Overlay verwenden, aber sie sehen nicht fantastisch aus und können nicht einfach angepasst werden. Stattdessen verwenden wir die Infobox-Bibliothek.
Schritt 1
Laden Sie eine Kopie der Infobox-Bibliothek herunter. Entpacken Sie es und speichern Sie es in einem Ordner in der Nähe Ihrer Karte. Fügen Sie dann diese Zeile am oberen Rand Ihrer HTML-Datei hinzu.
1 |
<script src="infobox/infobox.js" type="text/javascript"></script> |
Schritt 2
Fügen Sie für jede Kartenmarkierung Z-Indizes hinzu, sodass die am unteren Rand des Bildschirms über den weiter oben liegenden angezeigt werden. (d.h. je näher am unteren Rand des Bildschirms ein Marker ist, desto höher sollte sein Z-Index sein.) Alles darüber, warum Sie dies tun, wird später verraten! Beispielsweise -
1 |
//Creating the Glastonbury map marker. |
2 |
markerGlastonbury = new google.maps.Marker({ |
3 |
//uses the position set above. |
4 |
position: markerPositionGlastonbury, |
5 |
//adds the marker to the map. |
6 |
map: festivalMap, |
7 |
title: 'Glastonbury Festival', |
8 |
//assigns the icon image set above to the marker. |
9 |
icon: markerIconGlastonbury, |
10 |
//assigns the icon shape set above to the marker. |
11 |
shape: markerShapeGlastonbury, |
12 |
//sets the z-index of the map marker. |
13 |
zIndex:107 |
14 |
}); |
Schritt 3
Fügen Sie nach jeder Kartenmarkierung den folgenden Code hinzu. Bitte lesen Sie die Kommentare im Code durch, um zu sehen, was er tut.
1 |
//Creates the information to go in the pop-up info box. |
2 |
var boxTextGlastonbury = document.createElement("div"); |
3 |
boxTextGlastonbury.style.cssText = pop_up_info; |
4 |
boxTextGlastonbury.innerHTML = '<span class="pop_up_box_text"><img src="content/glastonbury.jpg" width="400" height="285" border="0" /></span>'; |
5 |
|
6 |
//Sets up the configuration options of the pop-up info box. |
7 |
var infoboxOptionsGlastonbury = { |
8 |
content: boxTextGlastonbury |
9 |
,disableAutoPan: false |
10 |
,maxWidth: 0 |
11 |
,pixelOffset: new google.maps.Size(-241, 0) |
12 |
,zIndex: null |
13 |
,boxStyle: { |
14 |
background: "url('infobox/pop_up_box_top_arrow.png') no-repeat" |
15 |
,opacity: 1 |
16 |
,width: "430px" |
17 |
} |
18 |
,closeBoxMargin: "10px 2px 2px 2px" |
19 |
,closeBoxURL: "icons/button_close.png" |
20 |
,infoBoxClearance: new google.maps.Size(1, 1) |
21 |
,isHidden: false |
22 |
,pane: "floatPane" |
23 |
,enableEventPropagation: false |
24 |
}; |
25 |
|
26 |
//Creates the pop-up infobox for Glastonbury, adding the configuration options set above. |
27 |
infoboxGlastonbury = new InfoBox(infoboxOptionsGlastonbury); |
28 |
|
29 |
//Add an 'event listener' to the Glastonbury map marker to listen out for when it is clicked. |
30 |
google.maps.event.addListener(markerGlastonbury, "click", function (e) { |
31 |
//Open the Glastonbury info box. |
32 |
infoboxGlastonbury.open(festivalMap, this); |
33 |
//Changes the z-index property of the marker to make the marker appear on top of other markers. |
34 |
this.setZIndex(google.maps.Marker.MAX_ZINDEX + 1); |
35 |
//Zooms the map. |
36 |
setZoomWhenMarkerClicked(); |
37 |
//Sets the Glastonbury marker to be the center of the map. |
38 |
festivalMap.setCenter(markerGlastonbury.getPosition()); |
39 |
}); |
Schritt 4
Im obigen Code haben Sie die Funktion setZoomWhenMarkerClicked
aufgerufen. Dadurch wird die Karte vergrößert, wenn eine Person auf eine Markierung klickt. Aber es wird nicht viel passieren, bis Sie diese Funktion erstellt haben! Dies ist die Funktion, die Sie erstellen müssen -
1 |
function setZoomWhenMarkerClicked(){ |
2 |
var currentZoom = festivalMap.getZoom(); |
3 |
if (currentZoom < 7){ |
4 |
festivalMap.setZoom(7); |
5 |
} |
6 |
} |
Schritt 5
Wenn die Karte vergrößert wird, möchten Sie wahrscheinlich mehr Details auf Ihrer Karte anzeigen. Dies geschieht durch Hinzufügen eines Ereignis-Listeners und Verwenden der getZoom
-Methode, um kontinuierlich zu überprüfen, ob der Zoom geändert wurde. Wenn es erhöht wurde (über Level 6), wird die Methode setMapTypeId
verwendet, um den zweiten(detaillierteren) oben definierten Stil zu setzen.
1 |
//Continuously listens out for when the zoom level changes. This includs when the map zooms when a marker is clicked. |
2 |
google.maps.event.addListener(festivalMap, "zoom_changed", function() { |
3 |
var newZoom = festivalMap.getZoom(); |
4 |
//If the map is zoomed in, the switch to the style that shows the higher level of detail. |
5 |
if (newZoom > 6){ |
6 |
festivalMap.setMapTypeId('map_styles_festival_zoomed'); |
7 |
} |
8 |
//Otherwise the map must be zoomed out, so use the style with the lower level of detail. |
9 |
else { |
10 |
festivalMap.setMapTypeId('map_styles_festival'); |
11 |
} |
12 |
|
13 |
}); |
Schritt 6
Gestalten Sie Ihre Infobox mit CSS, damit sie hübsch aussieht.
1 |
//Variable containing the style for the pop-up infobox. |
2 |
var pop_up_info = "border: 0px solid black; background-color: #ffffff; padding:15px; margin-top: 8px; border-radius:10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; box-shadow: 1px 1px #888;"; |
Schritt 7
Wenn eine Infobox geöffnet wurde, wird die Kartenmarkierung nach vorne gebracht. Wenn Sie jedoch die Infobox schließen und dann die Karte auf ihre ursprüngliche Position herauszoomen, bleibt die Markierung im Vordergrund. Das kann seltsam aussehen.
In Schritt 1 legen Sie den Z-Index für jeden Marker fest. Sie können dies jetzt verwenden, um dieses Problem zu beheben. Sie müssen eine Funktion (dh resetZindexes
) erstellen, die die Z-Indizes auf ihre ursprünglichen Werte zurücksetzt, und dann einen Aufruf dieser Funktion (dh resetZindexes();
) zu infobox.js hinzufügen, um die Ausführung der Funktion auszulösen, wenn die Infobox Fenster ist geschlossen.
Rufen Sie den Link oben auf dieser Seite auf, um eine Kopie des Codes für die bisherige Site zu erhalten, oder sehen Sie sich die Live-Version an, wie sie jetzt aussehen sollte. Ich habe nur das Pop-up für Glastonbury hinzugefügt. Fühlen Sie sich frei, die anderen selbst hinzuzufügen!
Benutzerdefinierte Banner und Navigation



Wir sind fast fertig mit der Anpassung des Aussehens der Karte, aber bevor es zu Ende geht, sollten wir ein paar Navigationssteuerelemente hinzufügen.
Google Maps hat 12 Bereiche, in denen Sie Kartensteuerelemente, Banner usw. hinzufügen können. Sie können diese Bereiche vollständig anpassen, indem Sie beliebige HTML-Dateien usw. hinzufügen.
Wir werden ein benutzerdefiniertes Banner und eine Navigation auf der rechten Seite der Karte hinzufügen.
Schritt 1
Definieren Sie zunächst eine Funktion zum Erstellen des Menüs. Dieser Codeauszug ist ziemlich lang…
1 |
//Function that creates the control panel area, ie. the map title and the 2 buttons just beneath it. |
2 |
function createControlPanel (controlPanelDiv){ |
3 |
controlPanelDiv.style.padding = '0px'; |
4 |
controlUI = document.createElement('div'); |
5 |
controlUI.style.border='0px solid white'; |
6 |
controlUI.style.margin='10px'; |
7 |
controlUI.style.paddingTop='11px'; |
8 |
controlUI.style.paddingBottom='5px'; |
9 |
controlUI.style.paddingLeft='0px'; |
10 |
controlUI.style.paddingRight='0px'; |
11 |
controlUI.style.width='245px'; |
12 |
controlUI.style.height='419px'; |
13 |
controlPanelDiv.appendChild(controlUI); |
14 |
|
15 |
//Map title |
16 |
titleBar = document.createElement('div'); |
17 |
titleBar.style.backgroundColor = '#89CBED'; |
18 |
titleBar.style.height='255px'; |
19 |
titleBar.style.width='245px'; |
20 |
titleBar.style.marginTop='0px'; |
21 |
titleBar.style.marginBottom='0px'; |
22 |
titleBar.style.marginLeft='0px'; |
23 |
titleBar.style.marginRight='0px'; |
24 |
titleBar.style.paddingTop='6px'; |
25 |
titleBar.style.paddingBottom='2px'; |
26 |
titleBar.style.paddingLeft='0px'; |
27 |
titleBar.style.paddingRight='0px'; |
28 |
titleBar.style.borderTopLeftRadius='5px'; |
29 |
titleBar.style.borderTopRightRadius='5px'; |
30 |
titleBar.style.borderBottomLeftRadius='0px'; |
31 |
titleBar.style.borderBottomLeftRadius='0px'; |
32 |
titleBar.style.cssFloat='left'; |
33 |
titleBar.innerHTML = '<div align="center"><img src="icons/map_title.png" width="230" height="252" border="0"/></div>'; |
34 |
controlUI.appendChild(titleBar); |
35 |
|
36 |
yellowStripe = document.createElement('div'); |
37 |
yellowStripe.style.backgroundColor = '#FFFF00'; |
38 |
yellowStripe.style.height='2px'; |
39 |
yellowStripe.style.width='245px'; |
40 |
yellowStripe.style.marginTop='3px'; |
41 |
yellowStripe.style.marginBottom='3px'; |
42 |
yellowStripe.style.marginLeft='0px'; |
43 |
yellowStripe.style.marginRight='0px'; |
44 |
yellowStripe.style.paddingTop='0px'; |
45 |
yellowStripe.style.paddingBottom='0px'; |
46 |
yellowStripe.style.paddingLeft='0px'; |
47 |
yellowStripe.style.paddingRight='0px'; |
48 |
yellowStripe.style.cssFloat='left'; |
49 |
yellowStripe.style.fontFamily='Georgia, serif'; |
50 |
yellowStripe.style.fontSize='14px'; |
51 |
controlUI.appendChild(yellowStripe); |
52 |
|
53 |
//'Smaller' events button. |
54 |
smallEvents = document.createElement('div'); |
55 |
smallEvents.style.height='108px'; |
56 |
smallEvents.style.width='129px'; |
57 |
smallEvents.style.marginTop='0px'; |
58 |
smallEvents.style.marginBottom='0px'; |
59 |
smallEvents.style.marginLeft='0px'; |
60 |
smallEvents.style.marginRight='0px'; |
61 |
smallEvents.style.paddingTop='0px'; |
62 |
smallEvents.style.paddingBottom='2px'; |
63 |
smallEvents.style.paddingLeft='0px'; |
64 |
smallEvents.style.paddingRight='0px'; |
65 |
smallEvents.style.cssFloat='left'; |
66 |
smallEvents.innerHTML = '<div align="center" onClick="handelRequests(\'small_events\')" OnMouseOver="this.style.cursor=\'pointer\';" OnMouseOut="this.style.cursor=\'default\';"><img src="icons/button_small_event.png" width="128" height="107" border="0"/></div>'; |
67 |
controlUI.appendChild(smallEvents); |
68 |
|
69 |
//Umbrella button |
70 |
brolly = document.createElement('div'); |
71 |
brolly.style.height='149px'; |
72 |
brolly.style.width='94px'; |
73 |
brolly.style.marginTop='0px'; |
74 |
brolly.style.marginBottom='0px'; |
75 |
brolly.style.marginLeft='0px'; |
76 |
brolly.style.marginRight='0px'; |
77 |
brolly.style.paddingTop='0px'; |
78 |
brolly.style.paddingBottom='2px'; |
79 |
brolly.style.paddingLeft='0px'; |
80 |
brolly.style.paddingRight='0px'; |
81 |
brolly.style.cssFloat='left'; |
82 |
brolly.innerHTML = '<div align="center" onClick="handelRequests(\'rainfall\')" OnMouseOver="this.style.cursor=\'pointer\';" OnMouseOut="this.style.cursor=\'default\';"><img src="icons/button_brolly.png" width="93" height="148" border="0"/></div>'; |
83 |
controlUI.appendChild(brolly); |
84 |
|
85 |
} |
Kurzer Hinweis zu Stilen: Der obige Code verwendet die style
-Eigenschaft eines Elements, um seine Stile mit JavaScript zu definieren. Um CSS-Eigenschaften in ihre JavaScript-Notation umzuwandeln, müssen Sie nur daran denken, dass Eigenschaften ohne Bindestrich gleich bleiben, während solche mit Bindestrich in camelCase umgewandelt werden, z. background-image wird zu backgroundImage. Die Ausnahme ist float
, das zu cssFloat
wird.
Schritt 2
Erstellen Sie dann ein Div, um das Menü zu halten, und fügen Sie das Menü zu diesem Div hinzu, indem Sie die Funktion aufrufen, die Sie gerade in Schritt 1 erstellt haben.
1 |
//Create control panel (ie. site title and 2 buttons) which appears on the right-hand side. |
2 |
var controlPanelDiv = document.createElement('div'); |
3 |
var festivalMapControlPanel = new createControlPanel(controlPanelDiv, festivalMap); |
Schritt 3
Legen Sie dann die Eigenschaft controls
Ihrer Karte fest, um das Menü an der entsprechenden Position hinzuzufügen, in diesem Fall RIGHT_TOP
.
1 |
//Add the control panel and reset button (created previously) to the map. |
2 |
festivalMap.controls[google.maps.ControlPosition.RIGHT_TOP].push(controlPanelDiv); |
Schritt 4
Jetzt sollten Sie auf der rechten Seite Ihrer Karte etwas haben, das wie ein benutzerdefiniertes Menü aussieht. Sie müssen also nur noch Ihre Speisekarte dazu bringen, etwas zu tun ...
Im Laufe der nächsten Tutorials erhalten wir die Schaltfläche Kleinere Ereignisse, um Fotos von Flickr anzuzeigen, und die Schaltfläche Regenschirm, um eine skizzierte Niederschlagskarten-Überlagerung anzuzeigen. (Ein Klischee, das ich kenne, aber in den Sommermonaten bekommen wir hier ziemlich viel Regen!)
Damit in diesem Tutorial etwas funktioniert, habe ich die obigen Schritte wiederholt, um auch eine Reset-Schaltfläche zum RIGHT_BOTTOM
-Bereich hinzuzufügen. Dazu gehört das Umschließen von Code um die Schaltfläche Zurücksetzen, um die Funktion handelRequests
aufzurufen.
1 |
//Function that creates the 'Reser map' button. |
2 |
function createResetButton (resetButtonDiv){ |
3 |
resetButtonDiv.style.padding = '0px'; |
4 |
controlUI2 = document.createElement('div'); |
5 |
controlUI2.style.backgroundColor = '#ffffff'; |
6 |
controlUI2.style.borderRadius='5px'; |
7 |
controlUI2.style.margin='10px'; |
8 |
controlUI2.style.paddingTop='2px'; |
9 |
controlUI2.style.paddingBottom='2px'; |
10 |
controlUI2.style.paddingLeft='2px'; |
11 |
controlUI2.style.paddingRight='5px'; |
12 |
controlUI2.style.textAlign='center'; |
13 |
controlUI2.style.width='148px'; |
14 |
controlUI2.style.height='31px'; |
15 |
controlUI2.innerHTML = '<div onClick="handelRequests(\'reset\')" OnMouseOver="this.style.cursor=\'pointer\';" OnMouseOut="this.style.cursor=\'default\';" ><img src="icons/button_reset.png" width="148" height="31" border="0"/></div>'; |
16 |
resetButtonDiv.appendChild(controlUI2); |
17 |
} |
Schritt 5
Die Funktion handelRequests
macht ein paar Dinge - werfen Sie einen Blick auf die Kommentare im Code.
1 |
//Function that is called when either the 'smaller events', unbrella or the 'reset map' buttons are clicked. |
2 |
function handelRequests (buttonPressed) { |
3 |
if (buttonPressed === "reset"){ |
4 |
//Resets the zoom, map position and marker z-indexes back to their orignal position. Also closes all infoboxes currently open. |
5 |
festivalMap.setZoom(festivalMapZoom); |
6 |
festivalMap.setCenter(festivalMapCenter); |
7 |
resetZindexes(); |
8 |
//This is a function I've created that closes any info boxes that are open. |
9 |
closeAllInfoboxes(); |
10 |
} |
11 |
else if (buttonPressed === "small_events"){ |
12 |
alert("This button will do something useful in a later tutorial!"); |
13 |
} |
14 |
else if (buttonPressed === "rainfall"){ |
15 |
alert("This button will do something useful in a later tutorial!"); |
16 |
} |
17 |
} |
Sie können eine vollständige Kopie der HTML-Datei für diesen Teil des Tutorials oben auf dieser Seite abrufen oder sich das Live-Beispiel ansehen. In diesem Beispiel ist nur die Kartenmarkierung Glastonbury aktiv.
Was nun?
Das war's für dieses Tutorial! Hoffentlich funktioniert jetzt etwas, das dem Bild oben auf dieser Seite vage ähnelt. Wenn etwas schief gelaufen ist, sehen Sie sich die herunterladbaren Dateien auf GitHub an. Ich habe den Code für jeden Teil dieses Tutorials in separate Dateien eingefügt, damit Sie herausfinden können, wo alles schief gelaufen ist.
Im nächsten Tutorial erfahren Sie, wie Sie mit der Google Maps API Ihre eigenen Karten (z. B. eine handgezeichnete oder historische Karte) zum Leben erwecken, zoombar und interaktiv machen.
Bildnachweise
Die in diesem Tutorial verwendeten Fotos wurden alle unter der Creative Commons-Lizenz veröffentlicht.
- Isle of Wight - aufgenommen von Tiggy
- Lesung - aufgenommen von Chris Ford
- Glastonbury - aufgenommen von Stig Nygaard
- Glastonbury (Bild im Pop-up) - aufgenommen von Wonker
- Secret Garden - aufgenommen von Joanne Pinkney
- Breitengrad - aufgenommen von Mike Mantin
- Leeds - aufgenommen von Ian Wilson
- T im Park - aufgenommen von Ian Oldham
- Rockness - aufgenommen von Phil und Pam Gradwell
- Glasgowbury – aufgenommen von Ben Andrews
- Backgroung-Bild - aufgenommen von Wonker