Percelen data downloaden met python

Hallo, ik ben een student en ik ben bezig met een opdracht waarvoor ik data nodig heb van alle percelen in de gemeentes van de Veluwe. Ik ben hier al een tijd mee bezig en het is niet goed aan het lukken. Ik vroeg me af of iemand me hier mee kan helpen. Ik had het eerst geprobeerd met de WFS te doen maar hiermee kreeg ik maar 1000 percelen. Nu probeer ik het via de API. Na aanleiding van deze post: Kadastrale kaart Amsterdam downloaden met Python - #7 door Robbert-cloud heb ik het nu op deze manier gedaan:

import requests
import json
import time
import os
import pathlib
from urllib.parse import urlparse

url = "https://api.pdok.nl/kadaster/kadastralekaart/download/v5_0"
bbox = 133434.5608,423128.6974,228763.3473,510194.2813
featuretypes = ["perceel", "pand"]
format = "gml"

def datafromAPI(api_url, featuretypes, format, bbox_rd=None, geofilter=None):
    if bbox_rd is None and geofilter is None:
        raise ValueError("both bbox and geofilter args are None")
    if bbox_rd is not None:
        geofilter = "POLYGON(({} {},{} {},{} {},{} {},{} {}))".format(
            bbox_rd[0],
            bbox_rd[1],
            bbox_rd[0],
            bbox_rd[3],
            bbox_rd[2],
            bbox_rd[3],
            bbox_rd[2],
            bbox_rd[1],
            bbox_rd[0],
            bbox_rd[1],
        )  # noqa: E501

    # zie api docs: https://api.pdok.nl/lv/bgt/download/v1_0/ui/
    print(f"view api docs: {api_url}/ui/")
    api_url_p = urlparse(api_url)
    base_url = f"{api_url_p.scheme}://{api_url_p.netloc}"
    full_custom_url = f"{api_url}/full/custom"
    headers = {"Content-Type": "application/json", "Accept": "application/json"}

    data = {"featuretypes": featuretypes, "format": format, "geofilter": geofilter}
    r = requests.post(full_custom_url, data=json.dumps(data), headers=headers)

    if r.status_code != 202:
        print("error occured creating custom download")
        print(f"response status: {r.status_code}")
        print(f"response body: {r.text}")
        exit(1)

    response_object = json.loads(r.text)
    status_path = response_object["_links"]["status"]["href"]
    download_request_id = response_object["downloadRequestId"]
    download_url = None
    status_url = f"{base_url}{status_path}"
    while True:
        r = requests.get(status_url)
        status_object = r.json()
        custom_status = status_object["status"]
        print(f"status generating download: {custom_status}")
        if custom_status == "COMPLETED":
            download_path = status_object["_links"]["download"]["href"]
            download_url = f"{status_url}{download_path}"
            break
        elif custom_status == "PENDING":
            print(f"progress generating download:  {status_object['progress']}")
        else:
            break
        time.sleep(2)

    if download_url:
        filename = f"{download_request_id}_{os.path.basename(download_url)}"
        filepath = os.path.join(pathlib.Path().absolute(), filename)
        print(f"downloading file {download_url} to {filepath}")
        r = requests.get(download_url)
        with open(filepath, "wb") as f:
            f.write(r.content)
    else:
        print("error occured generating download")
        
        
dataKadaster = datafromAPI(url, featuretypes, format, bbox_rd = bbox)

als ik dit run krijg ik helaas een error message.

dataKadaster = datafromAPI(url, featuretypes, format, bbox_rd = bbox)
view api docs: https://api.pdok.nl/kadaster/kadastralekaart/download/v5_0/ui/
status generating download: PENDING
progress generating download:  0
status generating download: RUNNING
error occured generating download

Weet iemand hoe ik dit kan fixen? Of is er misschien een andere manier om deze data te krijgen?
Alvast bedankt,
Mirte

1 like

Hoi Mirte

Een handigere manier om de data te krijgen is via de download-viewer:

https://www.pdok.nl/downloadviewer/-/article/kadastrale-kaart#96671b51a568665fa220dcba7ffbc41b

Groet,
Raymond

2 likes

Dankjewel Raymond, het is met de download-viewer gelukt!

1 like