Ophalen uurgegevens KNMI via SSIS

Innoveren met open data, met gegevens van het KNMI! 
Je hebt vast wel gemerkt dat het weer behoorlijk koud aan het worden is ’s nachts. Volgens het KNMI is zelfs de koudste herfstnacht geweest sinds 1998. Wat zou er nu mooier zijn dan deze gegevens van het KNMI direct opnemen in je eigen toepassing? Deze gegevens zijn namelijk via een webquery direct op te halen uit een script.

Via deze link kom je op de achtergrondpagina van het Kennis- & datacentrum van ons Koninklijk Nederlands Meteorologisch Instituut. En data, dat hebben ze. Deze pagina bij het KNMI beschrijft een aantal datareeksen die opgehaald kunnen worden. In dit voorbeeld maak ik gebruik van het ophalen van uurlijkse data. De basislink wordt direct weergegeven, namelijk http://projects.knmi.nl/klimatologie/uurgegevens/getdata_uur.cgi. Door hier een aantal parameters achter te plakken, kan een specifiekere dataset opgehaald worden.

Een eerste belangrijke filter is het station. Data ophalen van alle beschikbare stations is meestal niet relevant. Op deze pagina staan de beschikbare stations: http://projects.knmi.nl/klimatologie/metadata/index.html.
Een volgend filter is de datumfilter. Hiervoor heeft het KNMI interessante filtermogelijkheden die goed beschreven zijn. Wanneer filter [end] leeg gelaten wordt, wordt de data t/m gisteren opgehaald.

Het belangrijkste filter is nog niet opgegeven, dat zijn namelijk de meetwaarden die je als resultaat wilt hebben. Deze kunnen per groep opgehaald worden of als los element. De groep TEMP bevat namelijk de elementen T, T10N en TD. Door de filters in de juiste volgorde achter de basislink te plaatsen kan je bijvoorbeeld de volgende link krijgen: http://projects.knmi.nl/klimatologie/uurgegevens/getdata_uur.cgi?stns=260&vars=T:FH:RH&start=2014010101. Hiermee haal je gegevens op van station 260 (De Bilt), met T (gemiddelde temperatuur), FH (gemiddeld windsnelheid) en RH (neerslag per uur) vanaf 1 januari 2014, het eerste uur.

Dan moet er nu een SSIS project aangemaakt worden om deze data te kunnen structureren in een SQL database. Maak als eerste een nieuwe connection aan met type HTTP. Voer daar bovenstaande link inclusief filters in. Nu kan de data benaderd worden. In SSIS lukt het helaas niet om deze link direct als Flat File input te gebruiken, dus daarom sla ik de uitkomst van de query eerst op in een CSV file. Hiervoor gebruik ik een Script Task (VB).
Plaats de volgende code in Main:

[code language=”vb”] ‘ Add your code here
Dim nativeObject As Object = Dts.Connections(“HTTP KNMI”).AcquireConnection(Nothing)
Dim connection As New HttpClientConnection(nativeObject)

‘ Save the file from the connection manager to the local path specified
Dim filename As String = Dts.Variables(“User::WeerDataUur_location”).Value.ToString()
connection.DownloadFile(filename, True)
Dts.TaskResult = ScriptResults.Success
[/code]

De HTTP connection die de link bevat heet hier HTTP KNMI. De locatie waar het bestand opgeslagen moet worden is opgenomen in een variabele WeerDataUur_location.
Wanneer de data is gedownload naar een CSV bestand, kan je deze door middel van een Flat File Connection importeren in SSIS. Houdt hierbij wel rekening met de kopregels van het document, deze moet je uitsluiten voor de import. Per gebruikt station en per meetwaarde plaatst het KNMI een regel in de output.

Na het importeren van deze gegevens in een database zijn er meer dan genoeg mogelijkheden voor visualisaties!

2 reacties. Reactie plaatsen

  • Hallo Gertjan,
    Ik kwam dit artikel tegen tijdens een zoektocht naar een stukje VBA dat hetzelfde kan doen in Excel. Het enige dat ik voorlopig voor elkaar wil krijgen is het ophalen van de TG van Rotterdam voor een in te vullen periode. Waarschijnlijk dus met:
    ?stns=344&vars=TG&byear=2018&bmonth=1&bday=1&eyear=2018&emonth=3&eday=3
    Heb je misschien een tip voor me hoe ik dit voor elkaar kan krijgen in VBAExcel?
    Bedankt voor je moeite/aandacht.

    Beantwoorden
  • He Ron,

    Vroeg me af of het gelukt is om de gegevens van de knmi in te lezen in Excel.
    Want ik probeer dit namelijk ook voor elkaar te krijgen.

    Beantwoorden

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Dit is een verplicht veld
Dit is een verplicht veld
Geef een geldig e-mailadres op.

Categorieën

Categorieën

Vragen?

Onze specialisten geven graag antwoord op uw vragen!