Percelen opvragen GeoJson Polygon API

Hallo,

Ik ben hier nog niet heel bekend maar kon geen antwoord op mijn vraag vinden. Ik wil uit de BRK een aantal percelen binnen een polygon exporteren. Hiervoor gebruik ik de functie Geografisch zoeken op percelen van de BRK API. nu is het geval dat mij geojson polygon een deel van Rotterdam bedekt alleen krijg ik resultaten van het gehele land binnen.

Mij put data
{“geometry”: {“contains”: {“polygon”: [[[4.44379664547597, 51.923017106040895], [4.474334827135394, 51.92263831819494], [4.473868606308714, 51.90840125346902], [4.443339739698314, 51.90877951799954], [4.44379664547597, 51.923017106040895]]]}}}

Wat ik dus als resultaat zou verwachten zijn alleen percelen binnen mij aanvraag polygon. Maar ik krijg percelen buiten mijn polygon.

Ik weet niet precies waar dit mis gaat maar ik gebruik steeds het _links.next.href object om naar de volgende pagina te gaan, omdat 1 pagina maar 20 resultaten bevat. Ik stuur met de aanvraag naar de volgende pagina weer mijn polygoon mee.

Ik hoop dat jullie mij kunnen helpen.

Mvg,
Reinder

Hallo,

Inmiddels heb ik mijn probleem op kunnen lossen. Het zat hem niet geheel in de API alleen kreeg ik wel een resultaat maar niet het verwachte resultaat. De reden dat ik een foutief resultaat kreeg was dat mijn python script een verkeerde aanvraag verstuurde ik had in de headers niet meegeven dat het om een content-type application/json ging.

Wat ik raar vind is dat de API mij resultaten laat zien bij een “verkeerde” aanvraag ik kreeg percelen verdeeld over Nederland waar ik dacht dat ik percelen in Rotterdam had aangevraagd. Als je alle percelen op kan halen via een put Geografische zoeken op percelen dan zou ik die functie verwachten onder de url https://brk.basisregistraties.overheid.nl/api/v1/perceel/alles of /all en niet zonder put data mee te geven.

Verder werkt de API echt prima en is de documentatie uitstekend voor elkaar!

1 like

Hoi @Reinder, dank voor je feedback!

Als er geen Content-Type meegestuurd wordt denkt de API dat er helemaal geen body en dus geen filtercriterium binnenkomt. Hierdoor wordt alles getoond. We zullen voor de volgende versie overwegen om een geldige body bij een geografische zoekopdracht te verplichten, zodat er een 400 Bad Request geretourneerd wordt als er iets niet klopt.

Hallo,

Wellicht helpt bijgaande testcode:

def get_perceel_from_geometry(data_geometry, operator):
#Restapi url
url = ‘https://brk.basisregistraties.overheid.nl/api/v1/perceel
#url = ‘http://data.pdok.nl/sparql

# rest api operators and geometry types
# operators: within, contains, disjoint en intersects
# geometry_types: point, polygon of bbox

#{"' + operator + '": ' + data_geometry + '}
json_data_operator = {operator: data_geometry}
json_data_geometry = {"geometry": json_data_operator}
print "Geometry: %s" %json_data_geometry
jsondata=json.dumps(json_data_geometry)

#headers niet meegeven dat het om een content-type application/json ging.
headers = {"Content-Type": "application/json"}

#Call REST API: put request
response = requests.put(url, data=jsondata, headers=headers)
return response

def print_json_brkgeodata(response, title = “results:”):
print “**** " + title + “**** "
lresponse = json.loads(response.text)
#print lresponse[”_links”][“self”][“href”]
results = lresponse["_embedded"][“results”]
#print(response.text)
i = 1
if len(results) == 0: print “!!! No results !!!”
for res in results:
print “%3d %s ; %s ; %s ; %s; %s; %s” %(i, res[‘kadastraleGemeentenaam’], res[‘kadastraleGemeentecode’], res[‘sectie’], res[‘perceelnummer’], res[‘kadastraleGrootte’], res[‘perceelnummerRotatie’])
print " Perceel uri: %s" %res[’_links’][‘source’][‘href’]
i = i + 1

def test_get_perceel_from_geometry():
polygon1 = {“polygon”: [[[4.44379664547597, 51.923017106040895], [4.474334827135394, 51.92263831819494], [4.473868606308714, 51.90840125346902], [4.443339739698314, 51.90877951799954], [4.44379664547597, 51.923017106040895]]]}
polygon2 = {“polygon”: [[[6.544236,53.200271], [53.224838, 6.534097], [6.554042,53.200605], [6.546425,53.198600], [6.544236,53.200271]]]}
polygon3 = {“polygon”: [[[6.5,53.2], [6.56,53.25], [6.57,53.26], [6.58,53.35], [6.5,53.2]]]}

point1 = {"point": [4.3132, 52.6231] }
point2 = {"point": [ 6.533989, 53.224809] }

# rest api operators and geometry types
# operators: within, contains, disjoint en intersects
# geometry_types: point, polygon of bbox  

title = "1********** polygon within******************************1"
response = get_perceel_from_geometry(polygon1, "within")
print_json_brkgeodata(response, title)

title = "1********** point contains********************************1"
response = get_perceel_from_geometry(point1, "contains")
print_json_brkgeodata(response, title)

title = "2********** point contains********************************2"
response = get_perceel_from_geometry(point2, "contains")
print_json_brkgeodata(response, title)

test_get_perceel_from_geometry()