Zoeken binnen een grens

Voor een project heb ik een geocoder geschreven waarmee je een adres kunt zoeken in een woonplaats.
Maar er komt nu iets nieuws op m’n bordje: zoeken binnen een grens – polygon of multi polygon – is dit mogelijk?

Wat bedoel je precies? Of je in een URL een polygoon kan meegeven zodat de webservice dat doet, of wil je een stukje programmacode om dit zelf te doen? In welke taal?

Dag Anton,

Ik gebruik Django (python) in combinatie met Leaflet om bijvoorbeeld een adres op te zoeken in een plaats.

export default {
	class: L.Class.extend({
		options: {
			//serviceUrl: '//geodata.nationaalgeoregister.nl/locatieserver/v3',
			suggestQueryParams: {'fq': 'type:adres', 'limit': 15, 'format': 'json'},
		},
		initialize: function(options) {
			L.Util.setOptions(this, options);
		},
		suggest: function(query, cb, context) {
			query = query + ' AND woonplaatscode:"' + this.options.woonplaatscode + '"';
			getJSON(
				this.options.serviceUrl + 'suggest',
				L.extend({q: query}, this.options.suggestQueryParams),
				L.bind(function(response) {
					var response = response.response;
					if (response.numFound > 0) {
						var suggestions = [],
							docs = response.docs,
							i = 0;
						for (var i = docs.length - 1; i >= 0; i--) {
							suggestions[i] = {
								id: docs[i].id,
								name: docs[i].weergavenaam
							};
						}
					} else {
						suggestions  = null;
					}
					cb.call(context, suggestions);
				}, this)
			);
		},

Dit is dan de query waarbij de woonplaatcode in een eerder stadium is toegekend.
query = query + ’ AND woonplaatscode:"’ + this.options.woonplaatscode + ‘"’;

In plaats daarvan zoek ik nu naar een mogelijkheid om i.p.v. woonplaatscode een gebied mee te geven waarbinnen het adres moet liggen. In de praktijk wordt het adres een hectometerpaaltje.

In feite dus een polygoon aan een URL meegeven zodat de webservice daar binnen zoekt.

In de documentatie van de locatieserver kan ik zo’n mogelijkheid niet vinden. Je kunt alleen een gemeente, woonplaats, weg, adres, postcode meegeven.

Wat je zou kunnen doen is een centroid bepalen van de opgegeven polygoon en dan met de suggest gaan zoeken op de daarbij behorende woonplaats of gemeente (is ruimer). En dat resultaat kun je weer gebruiken om het hectometerpaaltje te vinden.

Tot nu toe ben ik het volgende tegengekomen maar de syntax is niet helemaal goed:

fq=centroide_ll: {“within”: {“type”: “Polygon”, “coordinates”: [ [ [ 5.995, 51.186], [ 5.999, 51.186], [ 5.999, 51.189], [ 5.995, 51.189], [ 5.995, 51.186] ] ] } } }

Een centroide_ll is altijd een POINT, geen Polygon.

Voor zover ik zie is een centroide_ll een veld dat je terugkrijgt, niet om zelf mee te geven. Je kunt wel een lat en lon meegeven in de url die vervolgens wordt gebruikt voor de sortering op afstand van de gevonden rijen.

De locatieserver is ook alleen een tekst search engine en geen geometrie search engine. Dus daar moet je niet de oplossing voor je huidige vraagstuk zoeken.

Denk dat je beter naar de WFS van de NWB kan kijken:
https://www.pdok.nl/geo-services/-/article/nationaal-wegen-bestand-nwb-#661f5b4ae13e0e859f3d6226bda95325

Dank je voor de info.
Jammer genoeg vind ik helemaal niks over het filteren.
Ik krijg wel een hoop paaltje boven water met https://geodata.nationaalgeoregister.nl/locatieserver/v3/free?fq=type:hectometerpaal, maar filteren ho maar…

zie: Zoeken op bounding box - LocatieServer - Geoforum

@marco_duiker,
Dit begint inderdaad iets op te leveren:

https://geodata.nationaalgeoregister.nl/locatieserver/v3/suggest?fq=type:hectometerpaal&q=centroide_ll:[53,6%20TO%2053.1,6.1]

Dag Robin,

Als het alleen een ‘text search engine’ is hoe kan het dan dat je wel een bounding box kunt meegeven?

Zoals:
https://geodata.nationaalgeoregister.nl/locatieserver/v3/suggest?fq=type:hectometerpaal&q=centroide_ll:[53,6%20TO%2053.1,6.1]

was misschien iets te kort door de bocht. De locatieserver is in principe bedoeld voor het zoeken van objecten met een tekst-query, en niet een geo-query. Dat je ook kan zoeken met een boundingbox is een ongedocumenteerd “feature” van de locatieserver.

En in de vorige versie is er ook zo’n feature voor een polygon.
Waarom is die eruit gehaald als ik vragen mag?

@robbedoes wat bedoel je met

Bedoel je dan de /v2 van de locatieserver?

Zelf schreef je het volgende hierover:

de huidige BAG V1 API ondersteunt zoeken met een polygon en kan nog gebruikt worden tot oktober dit jaar.

Wie ik? In welk topic?

Maar de BAG V1 API != locatieserver, dit zijn 2 verschillende producten van 2 verschillende diensten.

Hiero:

Ik ben @wouter.visscher, niet @RobinTopper :smiley:

Sorry, niet goed opgelet.