1 votos

MapServer: ¿Cómo puedo excluir el filtro espacial por defecto añadido en el filtro WFS añadido con la consulta interna de PostGIS?

Mi consulta se refiere al FILTRO aplicado en el WFS de MapServer.

Soy nuevo en esta área y estoy explorando algunas características de MapServer. Quiero utilizar la solicitud GetFeature de WFS para obtener las características aplicadas en cualquier ubicación en el mapa. Estoy utilizando "MapServer versión 7.0.4 (MS4W 3.2.1)" y tratando de aplicar el filtro "Contiene" para ello.

Puedo ver dos problemas cuando se aplica la consulta de filtro en PostGIS:

  1. Parece que añade un filtro geoespacial extra por defecto al hacer una consulta a PostGIS. Este filtro espacial por defecto no deja de devolver ningún resultado de PostGIS. ¿Hay alguna manera de excluir este filtro por defecto?
  2. Parece que las coordenadas de Contains no se transforman correctamente según el SRS de los datos en PostGIS.

He intentado con diferentes proyecciones en el archivo de mapa y el mensaje de solicitud sin éxito.

Datos de apoyo para dar su opinión sobre mis consultas:

Solicitud del CMA


Versión formateada:

http://localhost/cgi-bin/mapserv.exe?
service=WFS&
map=C:/Data/MapServerWFSSample.map&
request=GetFeature&
version=2.0.0&
typeName=SampleLayer&
FILTER=<Filter xmlns="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:ms="http://mapserver.gis.umn.edu/mapserver">
  <Contains>
    <PropertyName>wkb_Geometry</PropertyName>
    <gml:Point srsName="urn:ogc:def:crs:EPSG::4326">
      <gml:coordinates>0.112034,53.567972</gml:coordinates>
    </gml:Point>
  </Contains>
</Filter>

Consulta interna de PostGIS [Se puede ver en el archivo de registro]:


msPostGISLayerWhichShapes query: select "Attribute1","Attribute2","Attribute3",encode(ST_AsBinary(ST_Force2D("wkb_geometry"),'NDR'),'hex') as geom 
from SampleGeoDataTable 
where wkb_geometry && ST_GeomFromText('POLYGON((-0.999462804873474 -1.00102606014116,-0.999462804873474 -1.00102606014116,-0.999462804873474 -1.00102606014116,-0.999462804873474 -1.00102606014116,-0.999462804873474 -1.00102606014116))',find_srid('','SampleGeoDataTable','wkb_geometry'))
and (st_contains(wkb_geometry,ST_GeomFromText('POINT (7853690.3631838141000000 -5506204.5232773330000000)')) = TRUE)

Una consulta WFS similar a GeoServer funciona perfectamente.

El archivo del mapa se parece:


MAP
  NAME "Sample_WMS"
  CONFIG "PROJ_LIB" "C:\ms4w\proj\nad"
  CONFIG "MS_ERRORFILE" "C:/Data/ms_tmp/ms_error.txt"
  CONFIG "CPL_DEBUG" "ON"
  CONFIG "PROJ_DEBUG" "ON"
  STATUS ON
  PROJECTION
    "init=epsg:27700"
  END 

  WEB
   IMAGEPATH "C:/Data/ms_tmp/"
   IMAGEURL "/ms_tmp/"
   METADATA 
    "wfs_enable_request" "*"
    "wfs_title"         "My Global Map WFS Server"
    "wfs_srs"           "EPSG:4326 EPSG:900913 EPSG:27700"
    "wfs_boundingbox"    "EPSG:27700 749.099975585938 -90036.5 660460.875 1227306.5"     
   END
  END

  LAYER
   NAME "SampleLayer"
   STATUS DEFAULT
   TYPE POLYGON
   PROJECTION
    "init=epsg:27700"
   END  
   CONNECTIONTYPE POSTGIS
   CONNECTION "host=localhost port=5432 dbname=SampleGeoDataTable user=postgres password=hahaha"
   DATA "wkb_geometry from SampleLayer"
   CLASS
     STYLE
      COLOR      0 100 255
      OUTLINECOLOR 0 0 0
     END
   END

   METADATA     
    "wfs_enable_request" "*"
    "wfs_title"         "Sample WFS"
    "wfs_srs"           "EPSG:27700 EPSG:4326 EPSG:900913"
    "wfs_boundingbox"    "EPSG:27700 749.099975585938 -90036.5 660460.875 1227306.5"
    "gml_include_items" "all"
   END 
  END   
END

1voto

Neil Puntos 31

Bueno, ahora he encontrado la solución. Me faltaba el parámetro EXTENT en el archivo del mapa. Después de añadirlo según los datos de origen, empezó a funcionar.

Sólo quiero mencionar un punto aquí, todavía tiene un filtro espacial por defecto en la consulta PostGIS, pero esta vez con coordenadas correctas de acuerdo con EXTENT definido en el archivo de mapa.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X