Problema con los filtros WFS (BBOX, INTERSECTS)

10

Estoy tratando de obtener una característica / características de un área pequeña usando el filtro BBOX (o INTERSECTS) en mi consulta WFS. Debería esperar solo un pequeño conjunto de características o una sola característica y, sin embargo, la consulta devuelve un grupo bastante atractivo de ellas.

Tengo GeoServer versión 2.2.2 con un almacén de datos de Oracle. He desactivado la selección de 'bbox suelto' para que esa no sea la causa del problema.

Aquí está la consulta con un filtro BBOX:

<wfs:GetFeature
xmlns:wfs="http://www.opengis.net/wfs"
service="WFS"
version="1.1.0"
outputFormat="json"
xsi:schemaLocation="http://www.opengis.net/wfs
http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <wfs:Query typeName="LiVi:LIIKENNE_ELEMENTTI" srsName="EPSG:3067" xmlns:LiVi="http://172.17.14.211:8080/LiVi">
    <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
      <ogc:BBOX>
        <ogc:PropertyName>GEOMETRY</ogc:PropertyName>
        <gml:Envelope xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:3067">
          <gml:lowerCorner>316600 6838986</gml:lowerCorner>
          <gml:upperCorner>327696 6844298</gml:upperCorner>
        </gml:Envelope>
      </ogc:BBOX>
    </ogc:Filter>
  </wfs:Query>
</wfs:GetFeature>

El problema persiste con el filtro INTERSECTS. El tamaño del polígono es de unos 10 x 10 metros.

<wfs:GetFeature
xmlns:wfs="http://www.opengis.net/wfs"
service="WFS"
version="1.1.0"
outputFormat="json"
xsi:schemaLocation="http://www.opengis.net/wfs
http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <wfs:Query typeName="LiVi:LIIKENNE_ELEMENTTI" srsName="EPSG:3067" xmlns:LiVi="http://172.17.14.211:8080/LiVi">
    <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
      <ogc:Intersects>
        <ogc:PropertyName>GEOMETRY</ogc:PropertyName>
        <gml:Polygon xmlns:gml="http://www.opengis.net/gml" srsName="EPSG:3067">
          <gml:exterior>
            <gml:LinearRing>
              <gml:posList>308082.07106781186 6833724.928932188 308082.07106781186 6833739.071067812 308067.92893218814 6833739.071067812 308067.92893218814 6833724.928932188 308082.07106781186 6833724.928932188</gml:posList>
            </gml:LinearRing>
          </gml:exterior>
        </gml:Polygon>
      </ogc:Intersects>
    </ogc:Filter>
  </wfs:Query>
</wfs:GetFeature>

Editar:

Aquí hay otra solicitud (esta vez una solicitud GET):

http://172.17.14.211:8080/geoserver/wfs?request=GetFeature&version=1.1.0&srsName=EPSG:3067&typeName=LiVi:LIIKENNE_ELEMENTTI&BBOX=316600,6838986,316605,6838991,EPSG:3067

Aunque el área de BBOX es bastante pequeña, recupero las características de 1263, la mayoría de las cuales ni siquiera caen dentro de los límites especificados en la solicitud. Por ejemplo, de una de las características en la respuesta:

<gml:boundedBy>
  <gml:Envelope srsDimension="2" srsName="http://www.opengis.net/gml/srs/epsg.xml#3067">
    <gml:lowerCorner>317629.69841038 6841957.478078741</gml:lowerCorner>
    <gml:upperCorner>317902.64972173725 6841987.000123474</gml:upperCorner>
  </gml:Envelope>
</gml:boundedBy>
mrLite
fuente

Respuestas:

5

El problema se resolvió estableciendo el valor SRID en la base de datos y utilizando el SRS nativo en Geoserver. A pesar de que el código SRS declarado (y forzado) en Geoserver era el mismo que el SRS nativo, aparentemente afectó los filtros espaciales.

http://172.17.14.211:8080/geoserver/wfs?request=GetFeature&version=1.1.0&srsName=EPSG:3067&typeName=LiVi:LIIKENNE_ELEMENTTI&BBOX=316600,6838986,316605,6838991,EPSG:3067

mrLite
fuente
2
¿Puedes agregar un poco más de detalle a esta respuesta? ¿Qué quiere decir con configurar el SRID en la base de datos? Usted dice que la solución fue usar el SRS nativo, pero también dice que el que estaba usando era el SRS nativo, por lo que no me queda claro qué hizo para resolver esto.
ca0v