25 januari 2024
Met de release van GWA 3.3 voegden we een aantal interessante nieuwe mogelijkheden toe aan de applicatie (meer info vind je hier). In dit artikel praten we over de technische aspecten van twee functionaliteiten: het aanpassen van de interactieve legende (herschalen) en de nieuwe maskeerfunctie.
Herschalen van de legende
Gebruikers hebben in GWA niet enkel de mogelijkheid om de kleurenschaal te kiezen (bv. viridis), maar ook om de minimum en maximum waarden van gerenderde datalagen aan te passen ('herschalen'). Dit laat hen toe om te focussen op de locaties die voor hen interessant zijn, zoals bijvoorbeeld meer details tonen voor regio's met windsnelheden tussen 4.8 en 9 m/s.
In oudere versies van de Global Wind Atlas boden we data aan via op voorhand gerenderde PNG-tiles. Dit is een zeer simpele en kostenefficiënte oplossing, omdat hierbij enkel statische tiles vanuit onze (S3) buckets moeten aangeboden worden, zonder enige tussenkomst van een tile-server. Deze oplossing heeft echter een aantal beperkingen, met als voornaamste dat we hiermee in de front-end van de applicatie geen toegang hebben tot de ruwe waarden van de lagen: door het vooraf renderen van de tiles worden echte waarden vertaald naar RGB waarden en gaan ze dus verloren. Herschalen vraagt dan om zware server-side re-rendering. De originele waarden achterhalen in de front-end is ook onmogelijk: we kunnen de data wel proberen herberekenen op basis van de RGB waarden van elke pixel, maar hiermee kunnen we de originele data enkel benaderen.
Een alternatieve aanpak is het rechtstreeks aanbieden van de ruwe COG-data als tiles (meer over Cloud Optimized Geotiffs in deze blogpost). Dit opent een scala aan nieuwe mogelijkheden in de browser van de gebruiker. Met dit type toegang moeten er geen concessies gedaan worden aan de nauwkeurigheid van de data en kan het renderen van tiles gewoon in de browser van de gebruiker gebeuren. Hierdoor kunnen de tiles in realtime opnieuw renderen wanneer de gebruiker interageert met de applicatie. Het wijzigen van de legenda en de kleurschaal kan zo snel en efficiënt, zonder tussenkomst van een server.
Leaflet, de mapping library die we gebruiken in GWA, maakt het ons ook erg makkelijk om een eigen plugin te maken voor het renderen van COG-tiles. Meer zelfs, ontwikkelaars kunnen Leaflet-plugins maken om eender welk HTML-element te renderen als tiles. In de Global Wind Atlas doen we dit met de canvas: dit maakt manipulatie op pixelniveau mogelijk, waardoor de kaart in realtime kan worden bijgewerkt.
Het toevoegen van een mask
Met een mask kan een gebruiker een deel van een datalaag verbergen onder een (donkere) overlay. Met de nieuwe mask-tool in GWA kan de gebruiker zelf een mask genereren op basis van de waarden van een datalaag naar keuze.
Dankzij de client side tile rendering, gebouwd voor de herschaal-tool, kunnen we de mask-laag efficiënt berekenen op basis van de ruwe data van de COG tiles. Leaflet maakt het hier opnieuw erg makkelijk om tiles boven elkaar te tonen.
De applicatie laat gebruikers ook toe om de mask die ze hebben gemaakt te downloaden. In de front-end is dit een nodeloos gecompliceerde taak, omdat data van verschillende tiles moet worden samengevoegd. Daarom maken we hiervoor gebruik van onze betrouwbare backend server met een GDAL service. Op basis van COG bestanden kan GDAL zeer efficiënt masks genereren.
We zijn erg dankbaar voor alle opensourcebibliotheken en -tools die beschikbaar zijn in de GIS-wereld en in ruil leveren we graag onze eigen bijdrage aan de opensourcegemeenschap.