Werkwijze:

Een kopie van het getekende vlak wordt verschoven naar de oorsprong van het assenstelsel. Vervolgens worden een reeks parallel lopende lijnstukken, die de wind voorstellen, over het vlak getrokken. Dan wordt de intersectie van de lijnstukken met het vlak bepaald (de lijnstukken worden als het ware met een koekjesvorm uitgesneden). De gemiddelde lengte van de resterende lijnstukken is een schatting voor de (deel)strijklengte in de richting van de lijnstukken. Door daarna in stappen een cirkel rond te gaan en per stap een reeks parallel lopende lijnen te trekken, maar nu x graden gedraaid kan de (deel)strijklengte in elke richting bepaald worden. De strijklengte is dan het gemiddelde van alle afzonderlijk bepaalde (deel)strijklengten. Dit wordt verfijnd door per richting een weging uit te voeren volgens de frequentietabel met windrichtingen van het dichtstbijzijnde meetstation van het KNMI.

Gebruikte hulpmiddelen

De applicatie bestaat uit een html pagina met bijbehorend javascript, een python programma en een spatialite database. De html-pagina toont de Open Streetmap. Het javascript maakt gebruik van openlayers versie 3 en Proj4j, het start na het tekenen van een vlak het python programma dat een aantal gisbewerkingen laat uitvoeren door spatialite. De applicatie draait op een linux server ( ubuntu), met als webserver apache en de mod_python module. Daarnaast is gebruik gemaakt van het meetnet met automatische meetstations van het KNMI voor de frequentietabellen met windrichting in graden en de CBS wijk en buurtkaart. Met Qgis en Open Jump zijn Thiessenpolygonen (voronoi-diagram) uitgerekend om het dichtst bij een getekend vlak gelegen knmi station te vinden om de verschillende windrichtingen te verrekenen in de strijklengte.


Werkwijze in detail

Het proces (berekenen van de strijklengte) verloopt in 4 stappen:

Overzichtkaart Nederland (Open Streetmap) met Kraaijenbergse Plassen
Figuur 1
Overzichtkaart Nederland (CBS gemeentegrenzen) met Kraaijenbergse Plassen
Figuur 2
Stap 1

De applicatie bestaat uit een html pagina waarop de Open Streetmap getoond wordt. In deze pagina is een tweede html pagina opgenomen (middels een inline frame) met een formulier waarin de coördinaten van een te tekenen vlak zijn opgenomen alsmede enkele instellingen voor het berekenen van de strijklengte. In het voorbeeld filmpje wordt een vlak getekend over de Kraaijenbergse plas nabij Cuijk. In figuren 1 en 2 is de plek terug te vinden op resp. Open Streetmap en de CBS-wijk en buurten kaart. Na sluiten van het vlak worden de coördinaten door een javascript programma (gebruik makend van Open Layers) omgezet van de Mercatorprojectie van open streetmap naar het rijksdriehoeksstelsel en in een variabele in het formulier gezet. Vervolgens start het formulier de berekening door het python programma.


Naar oorsprong verschoven omtrek van Kraaijenbergse Plas met assenkruis en overzichtkaart Nederland
Figuur 3
Omtrek Kraaijenbergse Plas op de oorprong met omhullend vierkant en vierkant met een wortel(2) grotere ribbe
Figuur 4
Stap 2

Het python programma geeft eerst opdracht aan spatialite een nieuw volgnummer te genereren voor deze sessie, vervolgens worden de coördinaten opgeslagen in de spatialite database en wordt het zwaartepunt van het vlak bepaald. Daarna wordt vastgesteld in welk Thiessen polygoon dit zwaartepunt ligt en wordt de bijbehorende frequentieverdeling van windrichtingen zoals vastgesteld door het KNMI opgehaald.(In het voorbeeld is dat station 375, Volkel.) Dan wordt in spatialite een kopie van het vlak gemaakt, verschoven zodanig dat het zwaartepunt van het vlak op de oorsprong van het assenstelsel komt te liggen en wordt de maximum coördinaat van de omhullende rechthoek van de kopie opgevraagd. (Alle verdere acties maken gebruik van de verschoven kopie) Figuur 3 toont de verschuiving en in Figuur 4 staat de kopie met zwaartepunt op de oorsprong in een omhullend vierkant en een vierkant met een ribbe die wortel twee groter is.


Omtrek Kraaijenbergse Plas met een meanderende lijn die de wind voorstelt (in NZ richting)
Figuur 5
Lijnstukken van bovengenoemde meanderende lijn na de intersectie met het vlak van de Kraaijenbergse Plas, de gemiddelde lengte van de lijnstukken is de strijklengte in N en in Z richting
Figuur 6
Stap 3

Daarna zal het python programma de coördinaten van een (meanderende) lijn uitrekenen die binnen het grootste bovengenoemde vierkant valt. De parallel lopende lijnstukken verbeelden de wind, het aantal lijnstukken wordt bepaald door een variabele op het html formulier. De lijn wordt in spatialite ingelezen, zie figuur 5. Dan wordt met spatialite de intersectie bepaald tussen de lijn en het vlak van de Kraaijenbergse Plas. De gemiddelde lengte van de resterende lijnstukken, zie figuur 6, komt overeen met de (deel)strijklengte in deze windrichting. In dit geval is dat zowel de N-Z richting als de Z-N richting. Ter verfijning wordt de gemiddelde (deel)strijklengte vermenigvuldigt met de som van de bijbehorende percentages uit de frequentieverdeling van de windrichting van het KNMI station (hier de N en Z richting van KNMI station 375 Volkel).


Omtrek Kraaijenbergse Plas met een meanderende lijn die de wind voorstelt (Lijn is 30 graden gedraaid richting NO-ZW)
Figuur 7
Lijnstukken van bovengenoemde meanderende lijn na de intersectie met het vlak van de Kraaijenbergse Plas, de gemiddelde lengte van de lijnstukken is de strijklengte in de richting 30 graden en 210 graden
Figuur 8
Stap 4

Het python programma geeft spatialite opdracht om stap 3 te herhalen met de meanderende lijn 10 graden rechtsom gedraaid, dit proces herhaald zich tot een halve cirkel beschreven is. Figuur 7 toont de meanderende lijn 30 graden gedraaid en figuur 8 de resulterende lijnstukken na de intersectie met het vlak van de Kraaijenbergse Plas. De (deel)strijklengtes worden gemiddeld tot de strijklengte. Het python programma bouwt vervolgens de html pagina van het formulier op met de resultaten.


Probleem QGis en bepaling Thiessenpolygonen

Het blijkt dat QGis geen correcte thiessenpolygonen maakt, gelukkig doet Open Jump dit wel. Hieronder wordt dit geïllustreerd.

Stations van het KNMI waar de windrichting gemeten wordt
Figuur 9
Thiessen polygonen op basis van de KNMI stations bepaald met QGis, 0% buffer; lijken correct, maar alleen te gebruiken binnen de omhullende rechthoek van de KNMI stations
Figuur 10

In figuur 9 worden de KNMI stations getoond waar de windrichting bepaald is. Figuur 10 laat de Thiessen polygonen zien zoals die gemaakt worden door QGis, de instelling voor de buffer is 0%. De polygonen lijken op het oog correct, alleen zijn ze beperkt bruikbaar omdat de polygonen niet verder gaan dan de omhullende rechthoek van de punten die de stations weergeven.


Thiessen polygonen op basis van de KNMI stations bepaald met QGis, 20% buffer; fouten: overlap in afzonderlijke polygonen zichtbaar door transparante weergave
Figuur 11
Thiessen polygonen op basis van de KNMI stations bepaald met QGis, 100% buffer; fouten nemen toe: overlap in afzonderlijke polygonen zichtbaar door transparante weergave
Figuur 12

Door de buffer te vergroten wordt het gebied dat beschreven wordt door de polygonen ook vergroot. Alleen worden dan niet correcte polygonen gemaakt door QGis, er ontstaat overlap tussen verschillende polygonen. Dit wordt pas goed zichtbaar wanneer de polygonen half transparant worden weergegeven. In figuur 11 staan Thiessen polygonen gemaakt met Qgis met een buffer van 20 % (dit is juist genoeg om het vaste land en de waddeneilanden te bestrijken). Vergroten van de buffer naar 100 %, zie figuur 12, maakt de fouten groter.


Thiessen polygonen op basis van de KNMI stations bepaald met Open Jump, tolerance 0.0; lijken correct
Figuur 13

De Thiessen polygonen die gemaakt zijn met Open Jump (tolerance 0.0) lijken correct (figuur 13)

De software is beschikbaar (zip bestand ca. 1,7 mB door de data in de spatialite database).