Ännu en SPA med Leaflet

Från Webbling
Version från den 23 oktober 2021 kl. 13.58 av PGJ (diskussion | bidrag)
Hoppa till: navigering, sök

Vi ska gå igenom hur man kan göra en variant på föregående SPA. Sveriges Radio har flera öppna API:er där man kan få tillgång till diverse data. Vi ska ta och titta närmare på deras API för trafikmeddelanden. Här kan man läsa ut information om de trafiksituationer som uppstår runt om i landet. Vi kan bland annat läsa ut är koordinater, titel och beskrivning. Sveriges Radios API:er kräver ingen API-nyckel. De supportar även CORS så vi kan hämta data direkt ifrån vår webbapplikation. Detta är alltså en utmärkt källa till exempeldata.

För denna app ska vi ha ett något annorlunda upplägg. Kartan visar var det finns trafikmeddelanden och när användaren för musen över dessa så visar vi information om datapunkten i ett informationsfönster.

Vår applikation

Väldigt mycket påminner om vår föregående SPA, så vi kommer bara att gå igenom skillnaderna.

HTML

See the Pen bErYzM by Patrik Grip-Jansson (@PGJ) on CodePen.


Den största skillnaden är att vi lägger till en extra div där vi ska visa information om vald trafiksituation. Vi delar upp ytan för trafikinformationen i två delar; en för kartan och en för textinformationen. Dessa ska vi sedan snygga till med lite CSS.

CSS

See the Pen bErYzM by Patrik Grip-Jansson (@PGJ) on CodePen.

Vi sätter info-div:en till en flexbox, så att informationen som finns inuti den kommer att radas upp på samma rad. Vi väljer att de ska placeras ut likformigt med jusitfy-content: space-around;.

Vi sätter #karta och #info till samma storlek, så det blir att se proportionellt ut.

JavaScript

See the Pen bErYzM by Patrik Grip-Jansson (@PGJ) on CodePen.

I JavaScriptet har vi gjort en hel del ändringar...

Zoomnivå

Första zoomar ut kartan och centrerar den så vi ser det mesta av Sverige (i alla fall om det finns plats i vår webbläsare).

hämtaTrafikmeddelande

Vi döper om vår funktion avsedd för att hämta data till hämtaTrafikmeddelande. Även Sveriges Radios API är ett REST-API, så vi kan kalla på det med en "vanlig" URL. Den enda inparameter vi bryr oss om att skicka med är format, då vi vill ha data i JSON-format.

AjaxKlar

AjaxKlar är i det närmaste helt omskriven. Den data vi får ifrån Sveriges Radio är inte i GeoJSON. Vi får därför göra en egen loop som går igenom datan och behandlar varje post. För omväxlingens skull använder vi en anonym funktion denna gång.

Vi lägger först till en markör på den position som anges för trafikmeddelandet. Vi kopplar en popup till varje markör - när användaren klickar på markören kommer namnet på platsen att visas. Därefter binder vi några händelsehanterare till markören. Först en som kommer att triggas när användaren sätter muspekaren ovanför markören och sedan en som triggas när muspekaren avlägsnas från markören.

MouseOver

Till MouseOver skickar vi även med nuvarande trafikmeddelande. När funktionen triggas kommer this att vara satt till respektive trafikmeddelande. Vi kan nu läsa ut informationen om trafikmeddelandet och sätta respektive informationsfält till den data som vi vill visa upp.

MouseOut

MouseOut gör inte speciellt mycket mer än att den rensar informationsfälten.

Nästa aktivitet

Vi är klara med sektionen som handlar om applikationer som körs i webbläsaren. Nu ska vi gå vidare och lära oss om hur man skapar serverapplikationer....

Node - En introduktion