Skip to content

De data in de kaart

romyjkk edited this page Dec 1, 2022 · 13 revisions

Inladen van de data

Het eerste wat ik probeerde was het toevoegen van een popup, aangezien dit in de tutorial stond.

image

Dit was niet lastig, het kon namelijk met de volgende code:

let popup = L.popup() .setLatLng([9.005401, 38.763611]) .setContent("The Abyssinian, Ethiopia") .openOn(map);

Toch vond ik dit niet helemaal handig, aangezien je op deze manier al je data handmatig in je JS bestand moet zetten. Ook weet ik niet hoeveel je kan met Leaflet. Misschien kun je er niet genoeg mee..

image

Het volgende wat ik heb geprobeerd was het toevoegen van een custom icon en daarop weer een popup, maar de positioning is heel vreemd en ik heb geen idee hoe ik dat moet fixen.

image

Ik heb er nog meer toegevoegd, maar ik ben er niet super enthousiast over.

GeoJSON

Op de site van Leaflet vond ik een tutorial over geoJSON, dus besloot ik dat te proberen. Ik heb het op meerdere manieren geprobeerd, maar voor nu leek dit mij het snelste:

image image

Een object met daarin arrays van de data. Ik wist nog niet hoe ik hier een naam aan toe kon voegen, maar er staan in ieder geval markers op de plekken waar ze moeten staan.

image

Ik heb de manier wat omgegooid, en daar feedback op gekregen. Volgens mijn docent kon je het json bestand ook via d3 inladen, in plaats van de code die ik gebruikt had. Toch wilde dit niet helemaal lukken. Wel is het met de oude manier gelukt om de coördinaten in te laden met de volgende code:

L.marker(myJson[0], {icon:abyssinianIcon}).addTo(map).bindPopup("The Abyssinian, from Ethiopia");

image

Dit was al een hele stap!

D3

Van mijn docent kreeg ik te horen dat het mogelijk was om je JSON bestand in te laden via D3. Dit wilde ik graag proberen, maar wat ik ook deed, het werkte niet. In de volgende les vroeg ik het nogmaals en uiteindelijk zijn we op de volgende code gekomen:

d3.json("../coordinates.json").then(d => console.log(d[0])) .catch(e => console.log("Laden niet gelukt"));

Ondanks dat ik het bestand kon console-loggen, wilde het me toch niet lukken. De coördinaten deden het namelijk niet in de kaart. Dus besloot ik om nogmaals naar de docent te gaan, die uitlegde dat ik er een function van moest maken aangezien hij dan pas begon met het inladen van de data in de kaart, wanneer de data ook echt was ingeladen. Dit hebben we op deze manier gedaan:

d3.json("../coordinates.json").then(d => { makeMap(d) console.log(d) })

Vervolgens hebben we alle code voor mijn kaart in een functie gezet, namelijk makeMap(). Toen werkte het!

Iteraties

Ik heb het formaat van mijn JSON nogmaals verandert, dit keer heb ik het op deze manier gedaan:

image

Dit is namelijk hoe ik het online overal zag staan en dit werkte prima. name is hetgene wat in de popup komt. Vervolgens heb ik ervoor gezorgd dat alle katten met de juiste coördinaten in dit bestand kwamen te staan. Dit moest handmatig, aangezien ik de exacte coördinaten niet heb.

Nog iets wat belangrijk was, is een loop die ervoor zorgt dat er voor alle verschillende katten een marker aangemaakt wordt. Ik heb hiervoor even met m'n docent gezeten, en uiteindelijk is dit er van gemaakt:

image image

JavaScript loops zijn een beetje een mysterie voor mij, maar het wordt me al iets duidelijker. Het toegevoegde icoontje is een custom icon die ik heb aangemaakt. Hier heb ik eerder natuurlijk al mee gekloot, maar het leek me nog even niet mogelijk om voor iedere kat een eigen icoon toe te voegen. Daarom heb ik een algemene. Het ziet er beter uit dan de standaard marker en ook voorkomt het de chaos die zou ontstaan als ze allemaal hun eigen icoontjes zouden hebben. Op deze manier kun je ook goed zien waar de meeste katten vandaan komen: namelijk de Verenigde Staten, Thailand en het Verenigd Koninkrijk.

image

Ondanks dat ik het niet prachtig vind, ben ik er best blij mee. Wanneer je inzoomd, kun je in alle rust kijken naar de verschillende landen.