Masalah dengan filter WFS (BBOX, INTERSECTS)

10

Saya mencoba untuk mendapatkan fitur / fitur dari area kecil menggunakan filter BBOX (atau INTERSECTS) dalam kueri WFS saya. Saya seharusnya hanya mengharapkan sejumlah kecil fitur atau satu fitur, namun kueri mengembalikan cukup banyak dari mereka.

Saya memiliki GeoServer versi 2.2.2 dengan penyimpanan data Oracle. Saya telah menonaktifkan pilihan 'kotak kosong' sehingga tidak seharusnya menjadi penyebab masalah.

Inilah permintaan dengan filter 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>

Masalahnya berlanjut dengan filter INTERSECTS. Ukuran poligon sekitar 10 x 10 meter.

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

Edit:

Ini permintaan lain (kali ini permintaan GET):

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

Meskipun area BBOX cukup kecil, saya mendapatkan kembali 1.263 fitur, yang sebagian besar bahkan tidak termasuk dalam batas yang ditentukan dalam permintaan. Misalnya, dari salah satu fitur dalam respons:

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

Jawaban:

5

Masalah diselesaikan dengan menetapkan nilai SRID ke database dan menggunakan SRS asli di Geoserver. Meskipun kode SRS yang dinyatakan (dan dipaksakan) di Geoserver sama dengan SRS asli, kode SRS tampaknya memengaruhi filter spasial.

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

mrLite
sumber
2
Bisakah Anda menambahkan sedikit lebih detail pada jawaban ini? Apa yang Anda maksud dengan mengatur SRID ke database? Anda mengatakan solusinya adalah menggunakan SRS asli tetapi Anda juga mengatakan yang Anda gunakan adalah SRS asli sehingga tidak jelas bagi saya apa yang Anda lakukan untuk menyelesaikan ini.
ca0v