Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
# Vraag Rainguru data op, op basis van locatie (latitude, longitude)

# Inlog gegevens gebruiker
username = "gebruiker@rainguru.nl"
password = "*********"

# Locatie: kies een locatie op basis van een latutide en longitude
# Voorbeeld locatie HKV Delft 
#latitudelatitude = 51.99772 
#longitudelongitude = 4.381829

# Kwantiel: in deze versie van Rainguru kan alleen het 50% kwantiel gebruikt worden. Mogelijk wordt dat in de toekomst uitgebreid.
quantile = "0.5"

# Uitvoer formaat: kies uit 'json' of 'csv'
format = "csv"

# Controleer of Rainguru API beschikbaar is
API_available, my_headers = check_status_API(username, password) 

if API_available == True: 
    
    # Voeg parameters toe aan parameters object t.b.v. API verzoek
    my_parameters = {
        "latitude": f"{latitude}",
        "longitude": f"{longitude}",
        "quantile": f"{quantile}" 
    }

    # Verzoek Rainguru API op basis van locatie (latutide, longitude): https://api.rainguru.nl/data.csv of https://api.rainguru.nl/data.json
    response_get_data_by_location = requests.get(f"{server}/data.{format}", params=my_parameters, headers=my_headers, verify=rainguru_cert)
    
    # Controleer reactie Rainguru API
    if response_get_data_by_location.status_code == 200:    
        
        # Succesvol: druk resultaat API af
        if format == "csv":
            print(response_get_data_by_location.text)
            # Resultaat opslaan in CSV bestand
            result_data = bytes(response_get_data_by_location.content)
            if not os.path.exists(result_folder):
                os.makedirs(result_folder)
            open(os.path.join(result_folder,datetime.datetime.now().strftime("%Y%m%d%H%M%S") + "_Rainguru.csv"), 'wb').write(response_get_data_by_location.content)
        elif format == "json":
            print(response_get_data_by_location.json())
            # Resultaat opslaan in JSON bestand
            result_data = bytes(response_get_data_by_location.content)
            if not os.path.exists(result_folder):
                os.makedirs(result_folder)
            open(os.path.join(result_folder,datetime.datetime.now().strftime("%Y%m%d%H%M%S") + "_Rainguru.json"), 'wb').write(response_get_data_by_location.content)
        else: 
            print(f"Er is een onverwachte fout opgetreden!")
    
    # Niet succesvol print foutmeldingen
    elif response_get_data_by_location.status_code == 400:
        print(f"Bad request, controleer API verzoek!")
    elif response_get_data_by_location.status_code == 401:
        print(f"Gebruikersnaam en/of wachtwoord zijn onjuist!")
    elif response_get_data_by_location.status_code == 405:
        print(f"API is niet beschikbaar!")
    elif response_get_data_by_location.status_code == 500:
        print(f"Er is een interne fout opgetreden!")
    else:
        print(f"Er is een ongedefinieerde fout opgetreden!")    
else:
    # De API is niet beschikbaar; neem contact op met de helpdesk
    print(f"Rainguru API is niet beschikbaar! Neem contact op met helpdesk-rainguru@hkv.nl")

...

Het resultaat ziet er als volgt uit:

...

En in GIS ziet dat er als volg uit:

...

Stap 8: (optioneel)

...

Als een validatie-taak is beeindigd (al dan niet succesvol), kan de metadata van de validatie-taak gedownload worden ter controle van het validatie resultaat. Allereerst wordt een lokale folder op een computersysteem gedefinieerd waar naartoe een bestand met metadata kan worden gedownload. Met een POST request naar de API op het endpoint task/result/metadata wordt een bestand met metadata van de validatie-taak opgevraagd. Naast de id van de validatie-taak (in de URL) worden ook de Bearer token (opgeslagen in my_headers) en het (https) beveiligingscertificaat (verify=hydamo_cert) meegegeven in het request. Als de HTML statuscode van de response gelijk is aan 200 (het post request geeft een succesvol resultaat), kan het bestand met de metadata worden opgeslagen in de lokale folder. Hiertoe wordt het resultaat van het request eerst opgeslaten in de variabele ‘result_data'. Vervolgens wordt gecontroleerd of de map waar het bestand opgeslagen moet worden bestaat en zo niet, dan wordt deze aangemaakt. Tot slot wordt het resultaat van het request opgeslagen in het bestand 'taak-id_metadata.json’.

...

Converteren van adres naar coordinaten met PDOK locatieserver

We hebben een stap 8 toegevoegd aan het notebook, waarmee een adres met behulp van de PDOK locatieserver omgezet kan worden naar coordinaten (zie voor een uitgebreide beschrijving https://www.pdok.nl/pdok-locatieserver ).

Code Block
# Ter illustratie een voorbeeld van de geolocation functie van PDOK die gebruikt wordt om adres gegevens om te zetten coordinaten

# locatie: geef een adres op (straatnaam + huisnummer, plaatsnaam en/of postcode)
adres = "8232JN, Botter"

# PDOK url geolocation functie (zie ook https://www.pdok.nl/pdok-locatieserver)
PDOK_url = "https://api.pdok.nl/bzk/locatieserver/search/v3_1/free"

# Voeg parameters toe aan API verzoek
my_parameters = {
    "q": f"{adres}",
    "rows": 1,
    "fl": "centroide_rd,centroide_ll,straatnaam,woonplaatsnaam,postcode",
}

# Verzoek aan PDOK geolocation API
resonse_PDOK = requests.get(url=PDOK_url, params=my_parameters)

if resonse_PDOK.status_code == 200:    
    # Succesvol: druk resultaat API af
    print(resonse_PDOK.json())

# Niet succesvol print foutmeldingen
elif resonse_PDOK.status_code == 400:
    print(f"Bad request, controleer API verzoek!")
elif resonse_PDOK.status_code == 401:
    print(f"Gebruikersnaam en/of wachtwoord zijn onjuist!")
elif resonse_PDOK.status_code == 200405:
    result_data = bytes(response_get_metadata.content)
    if not os.path.exists(result_folder)print(f"API is niet beschikbaar!")
elif resonse_PDOK.status_code == 500:
    print(f"Er is een  os.makedirs(result_folder)
interne fout opgetreden!")
else:
    open(os.path.join(result_folder,f"{task_id}_metadata.json"), 'wb').write(response_get_metadata.content)print(f"Er is een ongedefinieerde fout opgetreden!")

Het resultaat is een json bestand met de volgende inhoud (zie ook Resultaten):de coordinaten van de locatie.

Notebook

Bovenstaande voorbeelden zijn opgenomen in een Jupyter notebook. Dit notebook kunt u hier downloaden. Let op: u moet wel de paden en login gegevens zelf aanpassen, anders werkt het notebook niet.

View file
nameVoorbeeldrainguru_Wikiwiki.ipynb