Geoserver: GetFeature opvragen middels Bounding Box - Opgelost

Beste Allen,

Ik heb een vraag met betrekking tot opvragen van feature info (json) van een WFS laag middels de bounding box functie van geoserver. Zie ook onderstaand plaatje.

In een webapplicatie doe ik een request op Geoserver (A) via

http://geoserver_A.nl/geoserver/wfs?
service=wfs&
version=2.0.0&
request=GetFeature&
typeNames=namespace:featuretype&
srsName=CRS
bbox=a1_pos1,b1_pos1,a2_pos1,b2_pos1

  1. Ik krijg hierbij prima de feature info terug bij een klik binnen de polygoon contouren, bijv positie 1.

  2. Als ik vervolgens een klik plaats op locatie 2 krijg ik ook de feature informatie terug van het polygoon. Het lijkt als alle kliks binnen de “boundingbox” van het polygoon (binnen de rode stippellijn) de feature info terug geven. Dit is niet gewenst. Alleen de feature info van een klik binnen het polygoon is gewenst.

  3. Een klik op locatie 3 (net buiten de “boundingbox” van het polygoon) laat gelukkig geen feature info zien.

Heeft iemand een idee waar dit aan kan liggen? En of ik nog een aanvullend filter mee kan geven (bij within?) of dat het een instelling is van geoserver?

Het vreemde is, dezelfde aanroep doen we op een tweede laag van geoserver_B en daar werkt het wel goed. Een klik buiten de polygoon (maar binnen de “boundingbox” van het polygoon) laat geen info zien.

Van beide lagen zijn de bron en projectie hetzelfde.

Hopelijk is mijn verhaal een beetje duidelijk (ik kon zo snel geen duplicaat van dit topic vinden via de zoekfuctie, anders hoor ik het graag).

met vriendelijke groet,

Mark de Haan

Wat gebeurt er als je klikt?
Wordt er dan client side code uitgevoerd, of wordt er een GetFeatureInfo request afgevuurd of zels een GetFeature request?

Hoi Marco,

Dank voor de snelle reactie.

Op een leaflet kaart wordt een WMS geplot (via Geoserver).

Het idee is om vanuit deze leaflet kaart een klik te doen op een kaart en van die locatie de feature informatie op te vragen via GetFeature (van de WFS van deze laag). Aan de hand van deze lat, lon / klik wordt een (kleine) bounding box gedefinieerd waarmee we via een url geoserver bevragen om de feature informatie op te halen (in dit geval van de info van bovenstaande polygoon). Deze informatie wordt opgehaald in JSON vorm en ingelezen in onze applicatie.

Het werkt goed, alleen dus op positie 2 van bovenstaand polygoon krijgen we ook informatie waar dat niet wenselijk is.

Alvast bedankt!

Mark

In de datastore op geoserver A de optie “loose bbox” aangevinkt, en in datastore van geoserver B uitgevinkt?
https://docs.geoserver.org/master/en/user/data/database/postgis.html#postgis-loose-bbox

Als ik het goed begrijp wordt er dus op positie 2 een GetFeature request gedaan, waarbij de polygoon terug komt.
Kun je hier het request en de response tonen?

Dank voor de antwoorden

@gisnederland, die had ik nog niet geprobeerd maar had helaas ook geen effect. Wat misschien wel een goede is, de bron bij Geoserver_A is inderdaad een PostGIS DB , bij Geoserver_B is de bron een geopackage. Ik zal ook eens testen of ik op Geoserver_A de bron ook als geopackage kan krijgen.

@marco_duiker, er wordt inderdaad een GetFeature request gedaan. Hierbij komen de attributen van de polygoon (naam, status, beschrijving etc) terug. Voor een klik binnen de polygoon is dat inderdaad wenselijk (en werkt het zoals het zou moeten) echter een klik net buiten de polygoon, maar binnen de ‘boundingbox’ van het polygoon op positie 2, geeft ook de attributen terug.


aanvulling:

Ik begrijp dat het handiger is om met een daadwerkelijk adres te debuggen, ik zal vragen of ik deze mag publiceren van de klant.

je mag eventueel het domein uit de requests en responses weglaten. het gaat me hier om de mogelijkheid te controleren hoe de bbox/ andere eigenschappen van het request zich verhoudt tot de response.

Hoi @marco_duiker,

Hierbij een json van de response. In dit geval was de klik net buiten de drone no-fly zone (groene markertje), toch komt de respons terug (zie bijlage) alsof het een klik was binnen het gebied.

wfs_getfeature

JSON
https://storage.googleapis.com/publ_data/temp/geoforum/getfeature_response.json

Mark

Graag ook het request of de parameters van het request dat tot deze response leidt erbij.

@marco_duiker bij deze

https://bedanktgeoforum.nl/geoserver/aeret/wfs?service=WFS&version=2.0.0&request=GetFeature&maxFeatures=50&outputFormat=application%2Fjson&BBOX=5.20820%2C51.35592%2C5.20820%2C51.35592%2CEPSG%3A4326&srsName=EPSG%3A4326&typeName=aeret%3Aairspace

hmm, ik zie iets geks. Als ik URL-decodeer, dan zie ik:

https://bedanktgeoforum.nl/geoserver/aeret/wfs?service=WFS&version=2.0.0&request=GetFeature&maxFeatures=50&outputFormat=application/json&BBOX=5.20820,51.35592,5.20820,51.35592,EPSG:4326&srsName=EPSG:4326&typeName=aeret:airspace

imho zou BBOX=5.20820,51.35592,5.20820,51.35592,EPSG:4326 dit moeten zijn: BBOX=5.20820,51.35592,5.20820,51.35592.

Zou je dat even kunnen proberen?

1 like

Overigens is deze bounding box incorrect. Lower Left en Upper Right zijn gelijk aan elkaar.
Ik neem aan dat het hierdoor misgaat.
Probeer het eens met een hele kleine bounding box.

1 like

@marco_duiker

Thanks! je eerste opmerking was inderdaad het schot in de roos, de (te kleine) te kleine bounding box gaan we ook naar kijken.

Een klik op positie twee geeft nu inderdaad 0 features terug (hoera!)

Iedereen bedankt!

Mark

Ai… iets te snel door de bocht… een klik in de de polygoon geeft nu ook features 0 terug … we gaan nog even aan de slag met de boundingbox grootte.

Dank voor het meedenken.

De oplossing is voor nu.

De bron (PostGres) van Geoserver_A is overgezet naar gpkg op Geoserver_B en nu werkt het gelukkig zoals het hoort.

Merci voor het meedenken.