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