Indholdsfortegnelse
Det Google Maps Javascript API Det er ekstremt kraftfuldt, da det ikke kun tillader oprettelse af kortene som sådan, men vi kan gå et skridt videre ved at udvide dets funktionaliteter og bruge vektorer til at tilføje interessepunkter, rullelister, linjer og rutesimulering.En anden af styrkerne ved de kort, vi implementerer, og hvis vi nogensinde har arbejdet med Javascript, er begivenheder, som er kernen i sproget og har ansvaret for at styre brugerens interaktion med webstedet, i dette specifikke tilfælde interaktionen med vores kort.
Inden vi går i praksis, skal vi først kende nogle af teorien bag de begivenheder, der håndteres af API'en, dette bruger navneområdet google.maps.event at arbejde med dem. Det har statiske metoder til at lytte til de begivenheder, der er defineret i API'et og controlleren af addListener () at registrere dem.
Ved at kende dette, lad os se nogle af de vigtigste begivenheder, der er tilgængelige i API'en, og som vi vil bruge i vores eksempler:
center_ændretDenne hændelse udløses, når egenskaben for midten af kortet ændres.
klikDenne begivenhed udløses, når brugeren klikker på kortet, det er vigtigt at nævne, at den udelukker klik på markører eller informationsvinduer.
trækDenne hændelse udløses gentagne gange, når brugeren trækker kortet.
museflytDenne hændelse udløses, når brugeren flytter musen overalt i kortbeholderen.
HøjreklikDenne hændelse udløses, når DOM -kontekstmenuhændelsen udløses.
zoom_ændretDenne hændelse udløses, når zoomegenskaben på kortet ændres.
Det er vigtigt at nævne, at selvom disse begivenheder kan ligne standardbegivenhederne i SOL de er ikke, de er en del af Google Maps API. Dette for at undgå problemet, hvor browsere håndterer forskellige typer begivenheder for SOL.
Efter allerede at have set de begivenheder, der blev mest brugt af API Lad os gå til praksis for at demonstrere brugen af dem ved oprettelsen af vores kort, det første eksempel på denne vejledning vil være fokuseret på begivenheder relateret til ændringen af kortegenskaber, hvilket giver os mulighed for at opnå en synkroniseret kortfunktion, dvs. , har kort med forskellige baser, der viser de samme oplysninger uanset ændringer i deres center eller i deres zoom.
Lad os se de trin, vi skal følge for at nå dette mål:
1- Først opretter vi en ny fil, som vi vil kalde synchronized_maps.html og vi udfører inkluderingen af API sammen med de stilarter, containeren på vores kort vil have, er det vigtigt at definere de globale variabler på kortene, da vi bliver nødt til at bruge dem i hele programmets omfang:
var map1, map2;
2- Som vi nævnte før, skal vi synkronisere to kort med forskellige baser, til dette skal vi oprette to funktioner, der initialiserer dem. Disse funktioner ligner dem, vi har mestret i tidligere selvstudier, men de vil have håndtering af hændelser for at opnå synkroniseringsfunktionen, lad os se koden for den første funktion:
funktion initializeMap1 () {var mapOptions = {center: new google.maps.LatLng (40.41678, -3.70379), zoom: 10, mapTypeId: google.maps.MapTypeId.ROADMAP}; var mapElement = document.getElementById ('divmap'); map1 = nyt google.maps.Map (mapElement, mapOptions); google.maps.event.addListener (map1, 'center_changed', function () {map2.setCenter (map1.getCenter ());}); google.maps.event.addListener (map1, 'zoom_changed', funktion () {map2.setZoom (map1.getZoom ());}); }
Som vi kan se, har vi mulighederne på vores kort som normalt for at definere midten, zoomen og basen, som i dette tilfælde er ROADMAP, så sætter vi mulighederne til vores kort og endelig vores begivenheder, der er ansvarlige for at opnå værdierne for egenskaberne for kortnummer 1 og indstille dem på kortnummer 2, til dette vil vi bruge begivenhederne i center_ændret Y zoom_ændret det er det, der giver os mulighed for at synkronisere.
3- Så er vi nødt til at oprette vores funktion for at initialisere det andet kort, koden ligner den forrige, men hændelserne vil blive affyret fra kort nummer 2 til nummer 1, og basen vil være HYBRID for at vise forskellen mellem begge:
funktion initializeMap2 () {var mapOptions2 = {center: new google.maps.LatLng (40.41678, -3.70379), zoom: 10, mapTypeId: google.maps.MapTypeId.HYBRID}; var mapElement2 = document.getElementById ('mapDiv2'); map2 = nyt google.maps.Map (mapElement2, mapOptions2); google.maps.event.addListener (map2, 'center_changed', function () {setTimeout (function () {map1.setCenter (map2.getCenter ());}, 10);}); google.maps.event.addListener (map2, 'zoom_changed', function () {setTimeout (function () {map1.setZoom (map2.getZoom ());}, 10);}); }
4- Endelig opretter vi en funktion til at instantiere kortene, som giver os mulighed for at lave forekomsten af begge, vi bygger vores HTML og vi sætter den samme klasse til de divs, der vil indeholde vores kort:
funktion initializeMaps () {initializeMap1 (); initializeMap2 (); } google.maps.event.addDomListener (vindue, 'load', initializeMaps); Synkroniserede kort
Lad os se, hvordan vores synkroniserede kort ser ud, når vi kører vores øvelse i browseren:
FORSTØRRE
FORSTØRRE
1- Vi opretter en ny fil kaldet get_coordinates.html og vi inkluderer vores API sammen med stilarterne:
2- Så opretter vi funktionen initializeMap () som sædvanligt, men dette vil have noget andet og er definitionen af begivenheden klik i addListener sammen med implementeringen af en dialog, der giver os oplysninger om breddegrad og længdegrad, hvor vi klikker, lad os se:
google.maps.event.addListener (kort, 'klik', funktion (e) {if (infowindow! = null) infowindow.close (); infowindow = new google.maps.InfoWindow ({indhold: 'Muskoordinater:
Breddegrad: ' + e.latLng.lat () +'
Længde: '+ e.latLng.lng (), position: e.latLng}); infowindow.open (kort); });
3- Endelig bygger vi vores HTML og vi definerer vores container til kortet:
Opnåelse af koordinater med museklik
Når vores kode er færdig, lad os se, hvordan vores kort ser ud i vores browser, når vi klikker på det, og oplysninger om breddegrad og længdegrad for dette punkt vises:
FORSTØRRE
1- Vi inkluderer vores API og opretter vores stilarter til vores kort og til den kontrol, der har ansvaret for at vise oplysninger om breddegrad og længdegrad:
2- Vi skaber vores funktion initializeMap () som i tidligere øvelser, og vi definerer parametrene for vores kontrol, hvor vi initialiserer det med koordinaterne 0.00 / 0.00:
var controlDiv = document.createElement ('div'); controlDiv.className = 'mapControl'; controlDiv.id = 'mapCoordinates'; controlDiv.innerHTML = 'Lat / Lng: 0.00 / 0.00';
3- Så skal vi oprette kontrollen og tilføje den til vores kort, vi gør dette med google.controls, hvor vi kan angive den position, det vil være i, i dette tilfælde vil vi bruge RIGHT_BOTTOM som svarer i nederste højre del og beholderen, hvor den skal vises:
map.controls [google.maps.ControlPosition.RIGHT_BOTTOM] .push (controlDiv);
4- Endelig definerer vi vores begivenhed, som vil være af typen museflyt og det vil injicere teksten til kontrol af de oplysninger, vi får:
google.maps.event.addListener (kort, 'mousemove', funktion (e) {var coordinateText = 'Lat / Lng:' + e.latLng.lat (). toFixed (6) + ' /' + e.latLng. lng (). toFixed (6); controlDiv.innerHTML = coordinateText;});
Lad os se, hvordan vores kort ser ud med kontrollen for at få oplysninger om breddegrad og længdegrad:
FORSTØRRE
1- Vi opretter en fil kaldet menu_kontekstuel.html og vi inkluderer Google Maps Javascript API, vi opretter også stilarterne til vores kort og kontekstmenu:
2- Inden vi opretter vores funktion initializeMap () Vi skal udføre et par ekstra trin, et af dem er at oprette funktionen til at definere klassen til kontekstmenuen, lad os se:
funktionsmenuContextual (kort) {this.setMap (kort); dette.map = kort; this.mapDiv = map.getDiv (); this.menuDiv = null; };
3- Når dette er gjort, skal vi oprette mulighederne for vores kontekstuelle menu og tilføje den begivenhed, der vil affyre hver af disse, når den vælges, hvilket som vi forestiller os vil være klik:
menuContextual.prototype = ny google.maps.OverlayView (); menuContextual.prototype.draw = funktion () {}; menuContextual.prototype.onAdd = function () {var that = this; this.menuDiv = document.createElement ('div'); this.menuDiv.className = 'kontekstmenu'; this.menuDiv.innerHTML = 'Opret bogmærke
Zoom
Fortryd zoom
'; this.getPanes (). floatPane.appendChild (this.menuDiv); google.maps.event.addListener (dette.map, 'klik', funktion (mouseEvent) {that.hide ();}); };
4- For at afslutte med vores kontekstmenu behøver vi kun at tilføje showet og skjule handlinger, lad os se, hvordan vores del af koden ser ud for dette:
menuContextual.prototype.show = function (coord) {var proj = this.getProjection (); var mouseCoords = proj.fromLatLngToDivPixel (coord); var venstre = Math.floor (mouseCoords.x); var top = Math.floor (mouseCoords.y); this.menuDiv.style.display = 'blok'; this.menuDiv.style.left = venstre + 'px'; this.menuDiv.style.top = top + 'px'; this.menuDiv.style.visibility = 'synlig'; }; menuContextual.prototype.hide = funktion (x, y) {this.menuDiv.style.visibility = 'skjult'; }
5- Når vi er færdige med vores kontekstuelle menu, behøver vi kun at programmere funktionerne for valgmulighederne i vores menu, som skal zoome, fortryde zoom og placere en markør:
funktion doZoom () {map.setZoom (map.getZoom () + 1); } funktion undoZoom () {map.setZoom (map.getZoom () - 1); } funktion createMarker () {var marker = new google.maps.Marker ({position: lastCoordinate, map: map, title: 'Random Marker'}); }
6- Endelig initialiserer vi vores kort, hvor det vigtige her er at oprette kontekstuel menu for vores kort og definere hovedbegivenheden Højreklik som udløses af højre museklik, når der trykkes på:
contextMenu = ny menuContextual (kort); google.maps.event.addListener (kort, 'højreklik', funktion (e) {lastCoordinate = e.latLng; contextMenu.show (e.latLng);});
7- Vi skaber vores HTML på den konventionelle måde og køre vores eksempel, lad os se, hvordan vores kontekstmenu ser ud, når vi højreklikker på vores kort:
FORSTØRRE
FORSTØRRE