Проблема с фильтрами WFS (BBOX, INTERSECTS)

10

Я пытаюсь получить функцию / функции из небольшой области, используя фильтр BBOX (или INTERSECTS) в моем запросе WFS. Я должен ожидать только небольшого набора функций или одной функции, и все же запрос возвращает довольно большую группу из них.

У меня GeoServer версии 2.2.2 с хранилищем данных Oracle. Я отключил выбор «свободный bbox», чтобы не было причиной проблемы.

Вот запрос с фильтром 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>

Проблема сохраняется с фильтром INTERSECTS. Размер многоугольника составляет около 10 х 10 метров.

<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>

Редактировать:

Вот еще один запрос (на этот раз запрос 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

Несмотря на то, что область BBOX довольно мала, я возвращаю 1263 объекта, большинство из которых даже не попадают в пределы, указанные в запросе. Например, из одной из функций в ответе:

<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
источник

Ответы:

5

Проблема была решена путем установки значения SRID для базы данных и использования собственного SRS в Geoserver. Хотя объявленный (и принудительный) код SRS в Geoserver был таким же, как и собственный SRS, он, очевидно, влиял на пространственные фильтры.

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
источник
2
Можете ли вы добавить немного больше деталей к этому ответу? Что вы имеете в виду, устанавливая SRID для базы данных? Вы говорите, что решение было использовать нативный SRS, но вы также говорите, что тот, который вы использовали, был нативным SRS, поэтому мне не ясно, что вы сделали для решения этой проблемы.
ca0v