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