Hoekpunten perceel via API voor Choropleth

Hi,

Ik zoek een API waarmee ik perceelgrenzen van panden kan ophalen, om wat gegevens te visualiseren in een jupyter notebook, zie Interactive map visualization

API input = lat+lon OF postcode+huisnummer+huisnummertoevoeging
API output = reeks lat,lon’s die de perceelbegrenzing aangeven

Output idealiter in json
En als iemand een Postman-voorbeeld heeft, dan zou dat helemaal geweldig zijn!

grt,

Pieter

ps, ik heb dit geprobeerd, maar dan (0) krijg ik geregeld te veel coordinaten terug en (1) is het geen lat+lon en (2) is het geen json:
https://geodata.nationaalgeoregister.nl/kadastralekaartv3/wfs?request=getfeature&service=wfs&version=1.0.0&outputFormat=GML2&typename=kadastralekaartv3:perceel&FILTER=<Filter><Contains><PropertyName>begrenzingperceel<%2FPropertyName><Point%20srsName%3D"http%3A%2F%2Fwww.opengis.net%2Fgml%2Fsrs%2Fepsg.xml%234326"><coordinates%20decimal%3D"."%20cs%3D"%2C">4.4902692%2C52.1575823<%2Fcoordinates><%2FPoint><%2FContains><%2FFilter>

ps, dit is ook leuk, maar meer voor een tussenstap om een perceelcode op te halen:
https://geodata.nationaalgeoregister.nl/locatieserver/v4/free/?q=wolsteeg%206%2C+leiden&fq=type%3Aadres&rows=50

Hoi Pieter,

Niet in Postman wel in Python. gezien het feit dat je Jupyter notebook gebruikt. kom je er vast wel uit.

Onderstaand voorbeeld gebruik ik altijd. Let wel op dat één adres meerdere percelen kan bevatten. vandaar op lijn 37 de for loop om alle percelen binnen te halen. Het maakt geen gebruik van de WFS aar van de locatieserver. hier staan wel lat en lon in.

In onderstaand script staan twee regels:
lon = float(geoloc[‘response’][‘docs’][0][‘geometrie_ll’][16:26])
lat = str(geoloc[‘response’][‘docs’][0][‘geometrie_ll’][6:15])
deze kan je beter vervangen door:
lon = re.findall(r"[-+]?\d*.\d+|\d+", geoloc[‘response’][‘docs’][0][‘geometrie_ll’])[0]
lat = re.findall(r"[-+]?\d*.\d+|\d+", geoloc[‘response’][‘docs’][0][‘geometrie_ll’])[1]

!! deze was ik vergeten. import re

Citaat API Locatieserver · PDOK/locatieserver Wiki · GitHub

import csv
import requests
import json
from pprint import pprint

with open('[HIER EEN NAAM VOOR EEN BESTAND].extentie', 'w', newline='') as oefen:
    fieldnames = ['Straat', 'Plaats', 'geom', 'weergavenaam'
                  'woonplaatsnaam', 'straatnaam', 'lat', 'lon', 'id_verblijfsobject']
    writer = csv.DictWriter(oefen, fieldnames=fieldnames, delimiter=";")
    writer.writeheader()
    with open('test_geocoderen_1.csv') as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=';')
        headers = next(csv_reader, None)
        print(headers)
        print(csv_reader)
        for row in csv_reader:
            Plaats = row[0]
            Straat = row[1]
            adres = f'{Straat} {Plaats}'
            print(adres)
            payload = {'q': {adres}, 'fq': 'type:adres',
                       'fl': '*', 'rows': '1'}
            r = requests.get(
                "http://geodata.nationaalgeoregister.nl/locatieserver/free?", params=payload)
            geoloc = r.json()
            woonplaatsnaam = geoloc['response']['docs'][0]['woonplaatsnaam']
            straatnaam = geoloc['response']['docs'][0]['straatnaam']
            lon = float(geoloc['response']['docs'][0]['geometrie_ll'][16:26])
            lat = str(geoloc['response']['docs'][0]['geometrie_ll'][6:15])
            id_verblijfsobject = int(
                geoloc['response']['docs'][0]['adresseerbaarobject_id'])
            # print(r.url)
            print(lat, lon)
            for perceel in geoloc:
                try:
                    perceel_code = geoloc['response']['docs'][0]['gekoppeld_perceel']
                    for i, p in enumerate(perceel_code):
                        payload = {'q': {p}, 'fq': 'perceel',
                                   'fl': '*', 'rows': '1'}
                        r2 = requests.get(
                            "http://geodata.nationaalgeoregister.nl/locatieserver/free?", params=payload)
                        poly = r2.json()
                        poly_vlak = poly['response']['docs'][0]['geometrie_rd']
                        weergavenaam = poly['response']['docs'][0]['weergavenaam']
                        pprint(r2.url)
                        # pprint(adres)
                        pprint(poly_vlak)
                        fields = [{'Straat': Straat, 'Plaats': Plaats,  'geom': poly_vlak, 'weergavenaam': weergavenaam,
                                   'woonplaatsnaam': woonplaatsnaam, 'straatnaam': straatnaam, 'lon': lon, 'lat': lat, 'id_verblijfsobject': id_verblijfsobject}]
                        rows = fields
                        writer.writerows(rows)
                except KeyError:
                    poly_vlak = "Geometrie niet mogelijk"
3 likes

Nice. Ik ga er mee aan de slag!