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"