OK, Vijzelstraat 32 Amsterdam als voorbeeld.
Eerst de locatieserver:
https://geodata.nationaalgeoregister.nl/locatieserver/v3/suggest?q=Vijzelstraat 32 Amsterdam
dat geeft je het volgende json terug:
{
“response”:{“numFound”:1,“start”:0,“maxScore”:19.388288,“docs”:[
{
“type”:“adres”,
“weergavenaam”:“Vijzelstraat 32, 1017HL Amsterdam”,
“id”:“adr-26870471e0b53450b8be0128a11aeb44”,
“score”:19.388288}]
},
En nog wat, maar dat is niet interessant voor nu. de ID is wat we vervolgens nodig hebben om de details op te vragen:
https://geodata.nationaalgeoregister.nl/locatieserver/v3/lookup?id=adr-26870471e0b53450b8be0128a11aeb44
Dat geeft je de volgende json terug:
{
“response”:{“numFound”:1,“start”:0,“maxScore”:15.750006,“docs”:[
{
“bron”:“BAG”,
“woonplaatscode”:“3594”,
“type”:“adres”,
“woonplaatsnaam”:“Amsterdam”,
“wijkcode”:“WK036303”,
“huis_nlt”:“32”,
“openbareruimtetype”:“Weg”,
“buurtnaam”:“Gouden Bocht”,
“gemeentecode”:“0363”,
“rdf_seealso”:“http://bag.basisregistraties.overheid.nl/bag/id/nummeraanduiding/0363200012162038”,
“weergavenaam”:“Vijzelstraat 32, 1017HL Amsterdam”,
“straatnaam_verkort”:“Vijzelstr”,
“id”:“adr-26870471e0b53450b8be0128a11aeb44”,
“gekoppeld_perceel”:[“ASD06-I-8025”],
“gemeentenaam”:“Amsterdam”,
“buurtcode”:“BU03630301”,
“wijknaam”:“Grachtengordel-Zuid”,
“identificatie”:“0363010012159931-0363200012162038”,
“openbareruimte_id”:“0363300000005292”,
“waterschapsnaam”:“Waterschap Amstel, Gooi en Vecht”,
“provinciecode”:“PV27”,
“postcode”:“1017HL”,
“provincienaam”:“Noord-Holland”,
“centroide_ll”:“POINT(4.89239814 52.3645642)”,
“nummeraanduiding_id”:“0363200012162038”,
“waterschapscode”:“11”,
“adresseerbaarobject_id”:“0363010012159931”,
“huisnummer”:32,
“provincieafkorting”:“NH”,
“centroide_rd”:“POINT(121297.519 486412.465)”,
“straatnaam”:“Vijzelstraat”}]
}}
Hiervan hebben we het adresseerbaarobject_id nodig, daarmee kunnen we het Verblijfsobject ophalen uit de BAG wfs. Daarvoor maken we een filter xml aan:
<fes:Filter xmlns:fes="http://www.opengis.net/fes/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd">
<fes:PropertyIsEqualTo>
<fes:PropertyName>identificatie</fes:PropertyName>
<fes:Literal>0363010012159931</fes:Literal>
</fes:PropertyIsEqualTo>
</fes:Filter>
En dat gooien we naar de BAG:
https://geodata.nationaalgeoregister.nl/bag/wfs/v1_1?service=WFS&version=2.0.0&request=GetFeature&typename=bag:verblijfsobject&outputFormat=json&filter=<fes:Filter xmlns:fes="http://www.opengis.net/fes/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd"> <fes:PropertyIsEqualTo><fes:PropertyName>identificatie</fes:PropertyName><fes:Literal>0363010012159931</fes:Literal></fes:PropertyIsEqualTo></fes:Filter>
Kun je eventueel ook met een POST doen als het te lang word, maar alleen op een ID filteren valt meestal wel mee. Hierop krijg je de VBO informatie terug:
{
“type”: “FeatureCollection”,
“numberMatched”: 1,
“name”: “verblijfsobject”,
“crs”: { “type”: “name”, “properties”: { “name”: “urn:ogc:def:crs:EPSG::28992” } },
“features”: [
{ “type”: “Feature”, “properties”: { “gid”: 3570770, “identificatie”: “0363010012159931”, “oppervlakte”: 17442, “status”: “Verblijfsobject in gebruik”, “gebruiksdoel”: “bijeenkomstfunctie”, “openbare_ruimte”: “Vijzelstraat”, “huisnummer”: 32, “huisletter”: “”, “toevoeging”: “”, “postcode”: “1017HL”, “woonplaats”: “Amsterdam”, “bouwjaar”: 1924, “pandidentificatie”: “0363100012165077”, “pandstatus”: “Pand in gebruik”, “rdf_seealso”: “http://bag.basisregistraties.overheid.nl/bag/id/verblijfsobject/0363010012159931” }, “geometry”: { “type”: “Point”, “coordinates”: [ 121297.519, 486412.465 ] } }
]
}
En daarvan is de pandidentificatie belangrijk. Daarmee kunnen we het pand ophalen, en dat kunnen we direct in EPSG:4326 doen - dus je eindresultaat is meteen wat je nodig hebt. Eventueel kun je ook nog opnemen in welk formaat je het eindresultaat terug wil hebben, de BAG wfs ondersteund het volgende lijstje:
- application/gml+xml; version=3.2
- text/xml; subtype=gml/3.2.1
- text/xml; subtype=gml/3.1.1
- text/xml; subtype=gml/2.1.2
- application/json; subtype=geojson
- application/json
- text/xml
In dit voorbeeld vraag ik json op in EPSG:4326, wederom met een filter:
<fes:Filter xmlns:fes="http://www.opengis.net/fes/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd">
<fes:PropertyIsEqualTo>
<fes:PropertyName>identificatie</fes:PropertyName>
<fes:Literal>0363100012165077</fes:Literal>
</fes:PropertyIsEqualTo>
</fes:Filter>
https://geodata.nationaalgeoregister.nl/bag/wfs/v1_1?service=WFS&version=2.0.0&request=GetFeature&typename=bag:pand&srsName=urn:ogc:def:crs:EPSG::4326&outputFormat=json&filter=<fes:Filter xmlns:fes="http://www.opengis.net/fes/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd"> <fes:PropertyIsEqualTo><fes:PropertyName>identificatie</fes:PropertyName><fes:Literal>0363100012165077</fes:Literal></fes:PropertyIsEqualTo></fes:Filter>
en dat geeft je het volgende resultaat terug:
{
“type”: “FeatureCollection”,
“numberMatched”: 1,
“name”: “pand”,
“features”: [
{ “type”: “Feature”, “properties”: { “gid”: 3751862, “identificatie”: “0363100012165077”, “bouwjaar”: 1924, “status”: “Pand in gebruik”, “gebruiksdoel”: “bijeenkomstfunctie”, “oppervlakte_min”: 338, “oppervlakte_max”: 17442, “aantal_verblijfsobjecten”: 2, “rdf_seealso”: “http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012165077” }, “geometry”: { “type”: “Polygon”, “coordinates”: [ [ [ 4.892448247193042, 52.364601148030161 ], [ 4.892477848840883, 52.36468641247194 ], [ 4.892580792420174, 52.364983078078957 ], [ 4.892560943549834, 52.365004053418147 ], [ 4.892206423363819, 52.365051177637284 ], [ 4.892203453250191, 52.36505156966949 ], [ 4.892170752233234, 52.365055917845602 ], [ 4.892163062134366, 52.365056946249247 ], [ 4.892130522803257, 52.365061277114719 ], [ 4.892080361643198, 52.364922566478548 ], [ 4.892118604885792, 52.364917567419504 ], [ 4.892151334465833, 52.364913282291468 ], [ 4.892154936762576, 52.364912812013898 ], [ 4.892135330695073, 52.364856772442145 ], [ 4.892133154578334, 52.364857059939339 ], [ 4.891953076379428, 52.364342136858696 ], [ 4.891956680337729, 52.364341513802763 ], [ 4.891936598228092, 52.364284762168573 ], [ 4.89189295857533, 52.364290547491485 ], [ 4.891844625228277, 52.364153956491847 ], [ 4.892249877837053, 52.364100277669777 ], [ 4.892279091168968, 52.364113701615459 ], [ 4.89238190458375, 52.364409953457155 ], [ 4.892411591156121, 52.364495478918528 ], [ 4.892429911812327, 52.36454831344534 ], [ 4.892448247193042, 52.364601148030161 ] ] ] } }
]
}
En dat is volgens mij redelijk waar je naar op zoek bent. Goed, het kost 4 requests, en je zou de locatieserver stappen kunnen overslaan door direct te filteren op adres bij het opvragen van het VBO. Ik vind het wat makkelijker om eerst naar de locatieserver te gaan, omdat daar ok interessante extra informatie bij mee komt (percelen, waterschap, enz). Maar bovenstaande is goed in een scriptje te zetten dat simpelweg een aantal adressen afwerkt.