Att komma igång med Leaflet: Skillnad mellan sidversioner

Från Webbling
Hoppa till: navigering, sök
Ingen redigeringssammanfattning
 
(25 mellanliggande sidversioner av samma användare visas inte)
Rad 1: Rad 1:
Leaflet är öppen källkod och utvecklas med hjälp av ett community. Den fungerar bra tillsammans med all vanliga webbläsare, såväl på skrivbordet som på mobila enheter. Det finns många olika plugins till biblioteket som kan användas för att lägga till ytterligare funktionalitet. På det hela taget är det enkelt att jobba med Leaflet.
Leaflet är öppen källkod och utvecklas med hjälp av ett community. Det fungerar bra tillsammans med alla vanligt förekommande webbläsare, såväl på skrivbordet som på mobila enheter. Det finns många olika plugins till biblioteket som kan användas för att lägga till ytterligare funktionalitet. På det hela taget är det enkelt att jobba med Leaflet.


== Att lägga till Leaflet ==
== Att lägga till Leaflet ==
Precis som var fallet med jQuery, går det att använda en [[CDN]] för att lägga till Leaflet i en sida. Vi kommer att använda den metoden, då den är enklast och mest flexibelt.  Tyvärr har inte huvud-CDN:en på https://cdn.leafletjs.com/ ett korrekt certifikat och det går därmed inte att köra HTTPS mot den. Det vill vi gärna göra, så därför har vi valt en annan CDN som tillhandahåller biblioteket via HTTPS.
Precis som var fallet med jQuery, går det att använda en [[CDN]] för att lägga till Leaflet i en sida. Vi kommer att använda den metoden, då den är enklast och mest flexibelt.  Tyvärr har inte huvud-CDN:en på https://cdn.leafletjs.com/ ett korrekt certifikat och det går därmed inte att köra HTTPS mot den. Det vill vi gärna göra, så därför har vi valt en annan CDN som tillhandahåller biblioteket via HTTPS.


För att lägga till Leaflet behöver vi inkludera två filer - dels en CSS-fil, dels en JavaScript-fil. CSS-filen lägger vi till i vår sidas <code>head</code>. Följande kommer att ta ner nuvarande version av Leaflet.
För att lägga till Leaflet behöver vi inkludera två filer - dels en CSS-fil, dels en JavaScript-fil. CSS-filen lägger vi till i vår sidas <code>head</code>. Följande kommer att ta ner nuvarande version av Leaflet. Kolla alltid deras webbsajt för att se om det kommit en nyare version.


<code><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/leaflet.css" /></code>
<syntaxhighlight lang="html">
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
</syntaxhighlight>


Detta är grundinställningar för den CSS som Leaflet behöver. Dessa kommer antagligen inte att störa den CSS som du själv lagt till sidan.
Detta är grundinställningar för den CSS som Leaflet behöver. Dessa CSS-regler kommer antagligen inte att störa den CSS som du själv lagt till sidan. Men du kan ju vara uppmärksam på om det händer något oväntat i din sida när du lägger till denna rad.


Därefter lägger vi till själva JavaScript-biblioteket. Man lägger oftast till detta någonstans i slutet av sidan, t.ex. strax före <code>&lt;/body></code>.  
Därefter lägger vi till själva JavaScript-biblioteket. Man lägger oftast till detta någonstans i slutet av sidan, t.ex. strax före <code>&lt;/body></code>.  


<code><script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/leaflet.js"></script></code>
<syntaxhighlight lang="JavaScript">
<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
</syntaxhighlight>


Med dessa två rader på plats kan vi skapa ett exempel.
Med dessa två rader på plats kan vi skapa ett exempel.
Rad 19: Rad 23:
Låt säga att vi skulle vilja se var Soltorgsgymnasiet i Borlänge ligger. Då kunde vi göra som i följande exempel.
Låt säga att vi skulle vilja se var Soltorgsgymnasiet i Borlänge ligger. Då kunde vi göra som i följande exempel.


<codepen pen="adJmEj" tab="js" height="550">
<codepen pen="adJmEj" tab="js,result" height="600">
</codepen>
</codepen>


(Som vanligt, kom ihåg att även titta på "Result"-fliken.)
(Som vanligt, kom ihåg att även titta på "Result"-fliken.)


Låt oss gå igenom exempelet oc se vad de olika delarna gör för något.
Låt oss gå igenom exempelet och se vad de olika delarna gör för något.


=== HTML ===
=== HTML ===
I HTML-koden har vi dels lagt till CDN-hämtningarna som föreser oss med Leaflet. Dessutom har vi skapat en tom <code>[[div]]</code> som fått ID:n <code>karta</code>. Här kommer vi att visa upp vår karta.
I HTML-koden började vi med att lägga till CDN-hämtningarna som föreser oss med Leaflet. Förutom detta så har vi skapat en tom <code>[[div]]</code> som fått ID:n <code>karta</code>. Här kommer vi att visa upp vår karta.


=== CSS ===
=== CSS ===
I CSS:en har vi inte gjort så mycket mer än att ge en storlek till den <code>div</code> som ska innehålla kartan. Viktigast är höjden, bredden kommer att sättas till 100 % om vi inte anger något annat.
I CSS:en har vi inte gjort så mycket mer än att ge en storlek till den <code>div</code> som ska innehålla kartan. Viktigast är höjden, bredden kommer att sättas till 100 % om vi inte anger något annat. Anger vi ingen höjd kommer vår karta inte att synas. Detta är på grund av att <code>div</code>:en är helt tom och därmed får sin höjd satt till <code>0</code>.


=== JavaScript ===
=== JavaScript ===
I JavaScript-delen har vi gjort lite mer.
I JavaScript-delen har vi gjort lite mer. Vi tar och går igenom detta i mer detalj.


==== Initiering av Leaflet ====
==== Initiering av Leaflet ====
På den första raden skapar vi en karta och ställer vi in grunderna för den. Leaflet registreas som <code>L</code> när vi lägger till det. De flesta metoder som vi vill kalla på ligger alltså samlade i <code>L</code>-objektet (detta går att jämföra med hur jQuery registrerar sig i <code>$</code>).  
På den första raden skapar vi en karta och ställer vi in grunderna för den. Leaflet registreas som <code>L</code> när vi lägger till det. De flesta metoder som vi vill kalla på ligger alltså samlade i <code>L</code>-objektet (detta går att jämföra med hur jQuery registrerar sig i <code>$</code>).  


<code>map</code> skapar en ny kartaregion, som inparameter tar den ID:n på den div där kartan ska visas. Därefter talar vi om vilka koordinater som gäller för denna karta genom att anropa metoden <code>setView</code>. Som inparameterar tar denna en array med koordinaterna, först latitud och sen longitud. Vår karta kommer att centreras kring den angivna koordinaten. Den sista parametern är zoomfaktorn vi ska använda oss av, desto större tal desto mer inzoomade är vi.
<code>map</code> skapar en ny kartregion Som inparameter tar den ID:t för den <code>div</code> där kartan ska visas. Därefter talar vi om vilka koordinater som vi är intresserade av genom att anropa metoden <code>setView</code>. Som inparameterar tar denna en array med koordinaterna, först latitud och sen longitud. Vår karta kommer att centreras kring den angivna koordinaten. Den sista parametern anger vilken zoomfaktor som kartan ska visas upp med, desto högre tal desto längre inzoomade är vi.


==== Sätta datakälla ====
==== Inställningar för datakälla ====
Vi måste nu ange varifrån all kartdata ska hämtas. Vi kommer att använda oss av Open Street Map.
Vi måste nu ange varifrån all kartdata ska hämtas. Vi kommer att använda oss av Open Street Map.


<div class="well well-warning">
<div class="well well-warning">
==== HTTPS eller ej ====
==== HTTPS eller ej ====
Det är diskutabelt hurvida kartdatan verkligen kan vara integretskränkande och behövs hålla hemlig, men vi kommer ändå att hämta materialet via HTTPS. Främst för att detta kommer att undvika att vi får de "mixed content"-varningar som uppstår när man blandar HTTP- och HTTPS-objekt i en och samma sida. Att inte kryptera kartdatat skulle vara marginellt snabbare, men det är nog ingenting man behöver bry sig i, speciellt inte på klientsidan. På servern kommer det självklart att bli något högre last när alla kartsegment måste krypteras innan de skickas ut.
Det är diskutabelt huruvida kartdatan verkligen kan vara integritetskränkande och behövs hålla hemlig, men vi kommer ändå att hämta materialet via HTTPS. Främst för att detta kommer att undvika att vi får de "mixed content"-varningar som uppstår när man blandar HTTP- och HTTPS-objekt i en och samma sida. Att inte kryptera kartdatat skulle vara marginellt snabbare, men det är nog ingenting man behöver bry sig i, speciellt inte på klientsidan. På servern kommer det självklart att bli något högre last när alla kartsegment måste krypteras innan de skickas ut.
</div>
</div>


==== Kart-tiles ====
==== Kart-tiles ====
Med <code>tileLayer</code> anger vi dels att kartan vi ska hämta består av karttiles. Där tiles betyder mosaikbitar och anger att det är små bitar som bygger upp en större helhet. Det vill säga att kartan ska laddas in som flera småbilder som visas bredvid varandra och på så vis i kombination bygger upp den kompletta kartvyn. När vi skrollar runt i kartan laddas enbart de tiles som tillkommer in och läggs bredvid redan befintliga tiles. Detta gör att vi minimerar hur mycket data som måste hämtas hela tiden. Denna teknik för karthämtning på webben uppfanns av Google när de skapade sin karttjänst Google Maps.
Med <code>tileLayer</code> anger vi dels att kartan vi ska hämta består av karttiles. Där tiles betyder mosaikbitar. Det vill säga, det är småbitar som bygger upp en större helhet och kartan kommer att laddas in som ett flertal mindre grafikfiler. Dessa komibineras och visas bredvid varandra och på så vis byggs den kompletta kartvyn upp. När vi skrollar runt i kartan laddas enbart de nya tiles som behövs för att täcka den inskrollade arean. Dessa läggs intill redan befintliga tiles och gör vår kartvy komplett igen. Om vi skrollar tillbaka kommer de tiles som redan är nedladdade att användas. Zoomar vi in eller ut, måste förstås nya karttiles laddas in.
 
Hanteringen av karttiles gör att vi minimerar hur mycket data som måste hämtas när användaren skrollar runt i kartan. Denna teknik för karthämtning på webben uppfanns av Google när de skapade sin karttjänst Google Maps. Så gott som alla webbaserade karttjänster använder sig av liknande metoder.


==== Att ange datakälla ====
==== Att ange datakälla ====
Som första inparameter tar <code>tileLayers</code> en länk till den server som kommer att tillhandahålla den behövliga kartdatan. Därefter följer ett objekt som innehåller inställningar som ska gälla för källan. I vårt exempel anger vi varifrån datat hämtas. Kom ihåg att ett av kraven som ställdes för att få utnyttja Open Street Map i en applikation var att man angav vilken källa datat hämtades ifrån. Det är alltså viktigt att ha med denna information, speciellt i applikationer som vi ska "visa" upp för världen.
Som första inparameter tar <code>tileLayers</code> en länk till den server som kommer att tillhandahålla den behövlig kartdata. Därefter följer ett objekt som innehåller de inställningar som ska gälla för källan. I vårt exempel anger vi varifrån data hämtas.
 
<div class="well well-warning">
Kom ihåg att ett av kraven som ställdes för att få utnyttja Open Street Map i en applikation var att man angav vilken källa data hämtades ifrån. Det är alltså viktigt att ha med denna information, speciellt i applikationer som vi ska "visa" upp för världen.
</div>


==== Koppla data till vy ====
==== Koppla data till vy ====
När vi skapat ett objekt som kan tillhandahålla oss med kartdata måste vi även länka detta till vår kartvy. Dvs den vy som vi tidigare kopplade till vår <code>karta-div</code> med <code>map</code>-metoden. Detta gör vi med det chainade metodanropet <code>addTo</code>. Som inparameter tar denna det objekt som vi fick tillbaka ifrån <code>map</code> och som innehåller information om vår kartvy.
När vi skapat ett objekt som kan tillhandahålla oss med kartdata måste vi även länka detta till vår kartvy. Detta gör vi med det chainade metodanropet <code>addTo</code>. Som inparameter tar denna metod det objekt som vi fick tillbaka när vi körde <code>map</code>-metoden. Det vill säga det objekt som innehåller information om vår kartvy.


== Vår första karta ==
== Vår första karta ==
Om du klickar på "Resultat" bör du nu se vår första karta! Man har automatiskt fått med en del finesser, förutom bara kartvyn. Man kan panorera genom att dra runt kartan. Man kan zooma angingen med "+/-"-knapparna eller via musens skrollhjul. I nedre hörnet finns information om vad som används för att skapa/visa kartan.
Om du klickar på "Resultat" bör du nu se vår första karta! Förutom att kartan visas upp, så har man automatiskt fått med en del finesser. Man kan panorera genom att dra runt kartan. Man kan zooma, antingen med "+/-"-knapparna eller via musens skrollhjul. I det nedre hörnet finns information om vad som används för att skapa/visa kartan - dvs Open Street Map och Leaflet. Länken till Open Street Map är nödvändig för att uppfylla användningsvillkoren för Open Street Maps. Så kom alltid ihåg att ha något liknande med!
 
Länken till Open Street Map är nödvändig för att uppfylla användningsvillkoren för Open Street Maps. Så kom alltid ihåg att ha något liknande med!


== Kombination av våra geografiska exempel ==
== Kombination av våra geografiska exempel ==
Man skulle förstås kunna kombinera vårt nuvarande exempel med det som vi gjorde tidigare i "[[Att ta reda på var någon befinner sig]]"-aktiviteten. Ett sådan exempel skulle kunna tänkas se ut så här:
Man skulle förstås kunna kombinera vårt nuvarande exempel med det som vi gjorde tidigare i "[[Att ta reda på var någon befinner sig]]"-aktiviteten. Ett sådant exempel skulle kunna tänkas se ut så här:
 
<codepen pen="pgeWKx" tab="js,result" height="1300">
<codepen pen="pgeWKx" tab="js" height="1400">
</codepen>
</codepen>


Det finns väl inte mycket att tillägga angående vad koden gör. I stort sett är allt det samma som i våra tidigare exempel, förutom att istället för att visa upp koordinatvärdena så drar vi istället upp en karta som centreras kring den punkt där webbläsaren anger att vi befinner oss.  
Det finns väl inte mycket att tillägga angående vad koden gör. I stort sett är allt det samma som i våra tidigare exempel, förutom att istället för att visa upp koordinatvärdena så drar vi istället upp en karta som centreras kring den punkt där webbläsaren anger att vi befinner oss.  


Här kan det bli mer uppenbart om positionen är ett närme värde. Prova gärna att köra exempelt både på din dator och på en mobil enhet som har GPS. Det borde märkas en väsentlig skillnad i precision på positionsangivelsen.
Här kan det bli mer uppenbart om positionen är ett närmevärde. Prova gärna att köra exemplet både på din dator och på en mobil enhet som har GPS. Det borde märkas en väsentlig skillnad i precision på positionsangivelsen.


== Nästa aktivitet ==
== Nästa aktivitet ==
I nästa aktivtet ska vi titta på hur man kan lägga ut diverse typer av extrainformation i kartor, vilket kan behövas om vi ska skapa appar som är baserade kring kartor och geografisk data.
I nästa aktivitet ska vi titta på hur man kan lägga ut diverse typer av extrainformation i kartor, vilket kan behövas om vi ska skapa appar som är baserade kring kartor och geografisk data.


[[Att lägga till extra data med Leaflet]]
[[Att lägga till extra data med Leaflet]]

Nuvarande version från 23 oktober 2021 kl. 12.53

Leaflet är öppen källkod och utvecklas med hjälp av ett community. Det fungerar bra tillsammans med alla vanligt förekommande webbläsare, såväl på skrivbordet som på mobila enheter. Det finns många olika plugins till biblioteket som kan användas för att lägga till ytterligare funktionalitet. På det hela taget är det enkelt att jobba med Leaflet.

Att lägga till Leaflet

Precis som var fallet med jQuery, går det att använda en CDN för att lägga till Leaflet i en sida. Vi kommer att använda den metoden, då den är enklast och mest flexibelt. Tyvärr har inte huvud-CDN:en på https://cdn.leafletjs.com/ ett korrekt certifikat och det går därmed inte att köra HTTPS mot den. Det vill vi gärna göra, så därför har vi valt en annan CDN som tillhandahåller biblioteket via HTTPS.

För att lägga till Leaflet behöver vi inkludera två filer - dels en CSS-fil, dels en JavaScript-fil. CSS-filen lägger vi till i vår sidas head. Följande kommer att ta ner nuvarande version av Leaflet. Kolla alltid deras webbsajt för att se om det kommit en nyare version.

<link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />

Detta är grundinställningar för den CSS som Leaflet behöver. Dessa CSS-regler kommer antagligen inte att störa den CSS som du själv lagt till sidan. Men du kan ju vara uppmärksam på om det händer något oväntat i din sida när du lägger till denna rad.

Därefter lägger vi till själva JavaScript-biblioteket. Man lägger oftast till detta någonstans i slutet av sidan, t.ex. strax före </body>.

<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>

Med dessa två rader på plats kan vi skapa ett exempel.

Leaflet-exempel

Låt säga att vi skulle vilja se var Soltorgsgymnasiet i Borlänge ligger. Då kunde vi göra som i följande exempel.


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

(Som vanligt, kom ihåg att även titta på "Result"-fliken.)

Låt oss gå igenom exempelet och se vad de olika delarna gör för något.

HTML

I HTML-koden började vi med att lägga till CDN-hämtningarna som föreser oss med Leaflet. Förutom detta så har vi skapat en tom div som fått ID:n karta. Här kommer vi att visa upp vår karta.

CSS

I CSS:en har vi inte gjort så mycket mer än att ge en storlek till den div som ska innehålla kartan. Viktigast är höjden, bredden kommer att sättas till 100 % om vi inte anger något annat. Anger vi ingen höjd kommer vår karta inte att synas. Detta är på grund av att div:en är helt tom och därmed får sin höjd satt till 0.

JavaScript

I JavaScript-delen har vi gjort lite mer. Vi tar och går igenom detta i mer detalj.

Initiering av Leaflet

På den första raden skapar vi en karta och ställer vi in grunderna för den. Leaflet registreas som L när vi lägger till det. De flesta metoder som vi vill kalla på ligger alltså samlade i L-objektet (detta går att jämföra med hur jQuery registrerar sig i $).

map skapar en ny kartregion Som inparameter tar den ID:t för den div där kartan ska visas. Därefter talar vi om vilka koordinater som vi är intresserade av genom att anropa metoden setView. Som inparameterar tar denna en array med koordinaterna, först latitud och sen longitud. Vår karta kommer att centreras kring den angivna koordinaten. Den sista parametern anger vilken zoomfaktor som kartan ska visas upp med, desto högre tal desto längre inzoomade är vi.

Inställningar för datakälla

Vi måste nu ange varifrån all kartdata ska hämtas. Vi kommer att använda oss av Open Street Map.

HTTPS eller ej

Det är diskutabelt huruvida kartdatan verkligen kan vara integritetskränkande och behövs hålla hemlig, men vi kommer ändå att hämta materialet via HTTPS. Främst för att detta kommer att undvika att vi får de "mixed content"-varningar som uppstår när man blandar HTTP- och HTTPS-objekt i en och samma sida. Att inte kryptera kartdatat skulle vara marginellt snabbare, men det är nog ingenting man behöver bry sig i, speciellt inte på klientsidan. På servern kommer det självklart att bli något högre last när alla kartsegment måste krypteras innan de skickas ut.

Kart-tiles

Med tileLayer anger vi dels att kartan vi ska hämta består av karttiles. Där tiles betyder mosaikbitar. Det vill säga, det är småbitar som bygger upp en större helhet och kartan kommer att laddas in som ett flertal mindre grafikfiler. Dessa komibineras och visas bredvid varandra och på så vis byggs den kompletta kartvyn upp. När vi skrollar runt i kartan så laddas enbart de nya tiles som behövs för att täcka den inskrollade arean. Dessa läggs intill redan befintliga tiles och gör vår kartvy komplett igen. Om vi skrollar tillbaka kommer de tiles som redan är nedladdade att användas. Zoomar vi in eller ut, måste förstås nya karttiles laddas in.

Hanteringen av karttiles gör att vi minimerar hur mycket data som måste hämtas när användaren skrollar runt i kartan. Denna teknik för karthämtning på webben uppfanns av Google när de skapade sin karttjänst Google Maps. Så gott som alla webbaserade karttjänster använder sig av liknande metoder.

Att ange datakälla

Som första inparameter tar tileLayers en länk till den server som kommer att tillhandahålla den behövlig kartdata. Därefter följer ett objekt som innehåller de inställningar som ska gälla för källan. I vårt exempel anger vi varifrån data hämtas.

Kom ihåg att ett av kraven som ställdes för att få utnyttja Open Street Map i en applikation var att man angav vilken källa data hämtades ifrån. Det är alltså viktigt att ha med denna information, speciellt i applikationer som vi ska "visa" upp för världen.

Koppla data till vy

När vi skapat ett objekt som kan tillhandahålla oss med kartdata måste vi även länka detta till vår kartvy. Detta gör vi med det chainade metodanropet addTo. Som inparameter tar denna metod det objekt som vi fick tillbaka när vi körde map-metoden. Det vill säga det objekt som innehåller information om vår kartvy.

Vår första karta

Om du klickar på "Resultat" bör du nu se vår första karta! Förutom att kartan visas upp, så har man automatiskt fått med en del finesser. Man kan panorera genom att dra runt kartan. Man kan zooma, antingen med "+/-"-knapparna eller via musens skrollhjul. I det nedre hörnet finns information om vad som används för att skapa/visa kartan - dvs Open Street Map och Leaflet. Länken till Open Street Map är nödvändig för att uppfylla användningsvillkoren för Open Street Maps. Så kom alltid ihåg att ha något liknande med!

Kombination av våra geografiska exempel

Man skulle förstås kunna kombinera vårt nuvarande exempel med det som vi gjorde tidigare i "Att ta reda på var någon befinner sig"-aktiviteten. Ett sådant exempel skulle kunna tänkas se ut så här:

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

Det finns väl inte mycket att tillägga angående vad koden gör. I stort sett är allt det samma som i våra tidigare exempel, förutom att istället för att visa upp koordinatvärdena så drar vi istället upp en karta som centreras kring den punkt där webbläsaren anger att vi befinner oss.

Här kan det bli mer uppenbart om positionen är ett närmevärde. Prova gärna att köra exemplet både på din dator och på en mobil enhet som har GPS. Det borde märkas en väsentlig skillnad i precision på positionsangivelsen.

Nästa aktivitet

I nästa aktivitet ska vi titta på hur man kan lägga ut diverse typer av extrainformation i kartor, vilket kan behövas om vi ska skapa appar som är baserade kring kartor och geografisk data.

Att lägga till extra data med Leaflet