In deze toepassing ontwerp je een app die aan de hand van de GPS-coördinaten (latitude en longitude) de weersvoorspelling voor de volgende dagen toont. De weersvoorspelling ga je opvragen via de OpenWeatherMap API. De exacte plaatsnaam haal je op via http://nominatim.openstreetmap.org/
$ cordova create meteo be.uwnaam.meteo Meteo
$ cd meteo
$ cordova platform add browser android
$ cordova plugin add cordova-plugin-geolocation
Deze pagina is volledig klaar. Hier hoef je niets meer aan te wijzigen.
In de initialisatieface wordt de preloader h4#city getoond. De (oude) inhoud van div#weather wordt gewist en onzichtbaar gezet. Waarom de inhoud wissen? De link a#renew roept eveneens deze functie op. De oude inhoud moet je dus eerst verwijderen voor je nieuwe data kan toevoegen.
$ phonegap serve

In de console verschijnt het volledig position-object (lijn 11 in de code) en daarna de
latitude en longitude (lijn 14).
Je kan ook andere locaties simuleren vanuit de DevTools. Klik op de drie puntjes bovenaan rechts. Kies
uit het menu More tools -> Sensors. In onderstaande
schermafbeelding zie je de locatie voor Londen.
Nu de juiste locatie gekend is, kunnen we de variabelen lat en lon
doorgeven aan de functies _getWeather(lat, lon) en aan _getCity(lat, lon). De
eerste functie haalt de weersvoorspelling op, de tweede functie de stad of gemeente.
De weersvoorspelling voor Londen kunnen we via onderstaande URL opvragen:
https://api.openweathermap.org/data/2.5/onecall?lat=51.507351&lon=-0.127758&lang=nl&units=metric&exclude=minutely%2Chourly&appid=[key]
(Vervang in de URL [key] door je persoonlijke sleutel.)
TIP: voeg de Chrome-extensie JSON
Formatter toe zodat je het resultaat mooi, gestructureerd kan bekijken.
De velden die ons interesseren zijn:
timezone: de tijdzone (Europe/London)daily: een array van acht objecten met onderandere het icoon (weather[0].icon),
het icoon-id (weather[0].id), de Nederlandse omschrijving (weather[0].description),
de dag (dt) en de minimum/maximum temperatuur (temp.min) en temp.max).
De dag en het icoon tonen, vragen misschien wat extra uitleg.
new Date(this.time * 1000))new
Date(...).getDay()). Dit geeft een cijfer tussen 0 (zondag) en 6 (zaterdag).
Ziehier de weersvoorspelling voor mijn huidige locatie.

Ben je niet echt tevreden met de icoontjes van OpenWeatherMap, dan kan je eventueel opteren om één van de talloze freeware weather-icons te gebruiken.
Vaak moet je dan wel zelf een translatietabel maken om de code van OpenWeatherMap om te vormen naar de juiste afbeelding.
Bijvoorbeeld 10d vervangen door rain.png.
Gebruik je de Weather Icons van Erik Flowers dan hoef je zelf geen translatietabel te schrijven. Deze is reeds ingebouwd (https://erikflowers.github.io/weather-icons/api-list.html).
In plaats van weather[0].icon gebruik je nu weather[0].ico.
Je hoeft het CSS-bestand ook niet te downloaden. Deze is reeds via een CDN gelinkt op lijn 8 van de indexpagina.
Vervan de image op lijn 35 door het bijbehorend Weather icon:
<img src="http://openweathermap.org/img/w/${icon}.png" alt=""><h4 class="wi wi-owm-${iconId}"></h4>
Open Street Maps heeft een APi waarmee je vanuit de latitude en longitude het juiste adres kan opvragen. Dit noemt men reverse geocode. Deze API mag je vrij gebruiken zonder key.
De informatie die je terugkrijgt, is niet echt uniform. Kijk eens naar volgende locaties:
address.townaddress.cityaddress.city_districtof
address.townAfhankelijk van de locatie moet je verschillende velden controleren. Vandaar dat we in de code alle mogelijkheden opvragen via een OR-vergelijking (lijn 4).
Ziehier de weersvoorspelling voor mijn locatie.

$ cordova run android