WFS GetFeature Filter: features (met een geometrie) bij een coördinaat?

Deze vraag gaat over de filter syntax van WFS.

Ik wil m.b.v. een call naar de WFS webservice alle enkelbestemmingen ophalen van een gegeven coördinaat. Bijvoorbeeld: “137922 456272”.

De enige manier waarop me dat nu lukt is om van de coördinaat een klein vierkantje te maken en dat mee te geven in een “Contains” query.

Dan doe ik een call naar http://afnemers.ruimtelijkeplannen.nl/afnemers2012/services waaraan ik de volgende xml mee-POST:

<?xml version="1.0" encoding="UTF-8"?>
<GetFeature xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/2.0/wfs.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns="http://www.opengis.net/wfs/2.0" service="WFS" version="2.0.0">
   <Query xmlns:app="http://www.deegree.org/app" typeNames="app:Enkelbestemming">
     <fes:Filter xmlns:fes="http://www.opengis.net/fes/2.0">
       <fes:Contains>
        <fes:ValueReference>app:geometrie</fes:ValueReference>
        <!-- gml:id is mandatory on GML 3.2 geometry elements -->
         <gml:Polygon srsName="urn:ogc:def:crs:EPSG::28992" gml:id="polygon.1">
           <gml:exterior>
             <gml:LinearRing>
              <!—maak een Klein vierkantje -->
              <gml:posList>137922.0 456272.0 137922.1 456272.0 137922.1 456272.1 137922.0 456272.1 137922.0 456272.0</gml:posList>
            </gml:LinearRing>
          </gml:exterior>
        </gml:Polygon>
      </fes:Contains>
    </fes:Filter>
  </Query>
</GetFeature>

Vervolgens krijg ik (zoals verwacht) 3 enkelbestemmingen terug.

Dit is echter volgens mij een erg omslachtige en onnauwkeurige query.
Het kan vast veel eenvoudiger, maar ik zie niet hoe en ben er al lang mee bezig.

Kan iemand me vertellen hoe ik van een gegeven coördinaat de enkelbestemmingen kan ophalen?

Alvast bedankt!!

Rik

Hmm… vreemd dat het niet lukt met een Point.

Een snelle suggestie/vraag: heb je Intersects icm met een Point al geprobeerd?

Ik probeer ondertussen te achterhalen of de Ruimtelijkeplannen WFS server CQL filters ondersteund. Dat scheelt nogal wat typwerk. :innocent:

Dank je Simeon.

Aargh… dat was het dusl!! Gewoon een Point meegeven…
Dus:

<?xml version="1.0" encoding="UTF-8"?>
<GetFeature xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/2.0/wfs.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns="http://www.opengis.net/wfs/2.0" service="WFS" version="2.0.0">
   <Query xmlns:app="http://www.deegree.org/app" typeNames="app:Enkelbestemming">
     <fes:Filter xmlns:fes="http://www.opengis.net/fes/2.0">
       <fes:Contains>
        <fes:ValueReference>app:geometrie</fes:ValueReference>
         <gml:Point>
           <gml:pos>137922 456272</gml:pos>
	 </gml:Point>
      </fes:Contains>
    </fes:Filter>
  </Query>
</GetFeature>

geeft precies het resultaat dat ik wil hebben! Simpel, maar uren mee bezig geweest!
Soms is het prettig dat iemand even iets noemt… dank daarvoor!

Naar die CQL filters ga ik kijken.

Bedankt!

Rik

1 like

Mooi dat het gelukt is!

Een eenvoudigere variant van bovenstaande is het meesturen van een micro bounding box in de GET request:

http://example.com/geoserver/wfs?
service=wfs&
version=2.0.0&
request=GetFeature&
typeNames=namespace:featuretype&
srsName=CRS
bbox=a1,b1,a2,b2

Je hoeft op deze manier geen XML te tikken en kan de POST achterwege laten.