[mapserver-users] Issue in using MapServer WFS Filter

Rahkonen Jukka (MML) jukka.rahkonen at maanmittauslaitos.fi
Wed Apr 26 12:57:39 PDT 2017


Hi,

When it comes to extra spatial filter, there is a brand new metadata item for switching it off. See http://mapserver.org/ogc/wfs_server.html


wfs_use_default_extent_for_getfeature
    (Optional, since MapServer 7.0.4) Whether the MAP.EXTENT should be used in request to datasources in the absence of other spatial filter. This is the default behaviour, but this might affect performance in some use cases. In those cases, setting this item to NO will avoid he default spatial filter to be appended to the request. This is only implemented for OGR datasources. 

However, with PostGIS the && query is fast. The weird part in your log
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))

means that the layer extent is not set correctly or Mapserver can't get is correctly from PostGIS which means data error on that side. For sure using the non-existing keyword wfs_boundingbox is not right. See what can be used from http://mapserver.org/ogc/wfs_server.html.

When you play with spatial filters I recommend to start by using the native SRS for the feature type in filters. Non-native SRS in filter should be transformed by the server but it is error prone. Your filter is also also a little bit fuzzy. gml:coordinates belongs to GML2 and was removed from GML2. But you are using service version 2.0 that defaults to GML3. Is the meaning that your filter is GML2 or GML3? That is a big difference because in the first case the axis order of EPSG:4326 coordinates is longitude-latitude but in the latter it is latitude-longitude. Do you search near the equator or from somewhere in Europe?

 <PropertyName>wkb_Geometry</PropertyName>
  <gml:Point srsName="urn:ogc:def:crs:EPSG::4326">
   <gml:coordinates>0.112034,53.567972</gml:coordinates>
   </gml:Point>

One more thing, "wfs_srs" metadata takes only one SRS, not a list.

If you send SQL for CREATE TABLE and for inserting one polygon into the table, and WFS filter you are using in your trials I thing I could find some time for testing.

-Jukka Rahkonen-
________________________________________
Jeff McKenna  wrote:
Re: [mapserver-users] Issue in using MapServer WFS Filter

Hi Kajod,

If you are using PostGIS, then I would set the 'wfs_extent' metadata at
the layer level of the mapfile (it looks like you tried that, with an
odd 'wfs_boundingbox' parameter): please review the syntax of the
wfs_extent parameter at
http://www.mapserver.org/ogc/wfs_server.html#layer-object

Then, next step is always to execute a GetCapabilities request and go
through that response and make sure there are no "WARNING" messages, and
make the changes in the mapfile to remove those warnings if necessary...

-jeff


--
Jeff McKenna
MapServer Consulting and Training Services
http://www.gatewaygeomatics.com/




On 2017-04-26 10:42 AM, Kajod Sharma wrote:
> Hi,
>
> Greetings!
>
> I hope this is a right platform to discuss my query regarding FILTER
> applied on MapServer WFS.
>
> I'm new in this area and exploring some features of MapServer. I want to
> use GetFeature request of WFS to get features applied on any location on
> map. I'm using "MapServer version 7.0.4 (MS4W 3.2.1)" and trying to
> apply filter "Contains" for it.
>
> I can see two problems when it applies Filter query on PostGIS:
>
> 1. It looks it adds an extra default geospatial filter in it while
> making a query to PostGIS. This default spatial filter is not stopping
> to return any result from PostGIS. Is there any way to exclude this
> default filter?
> 2. It seems Contains coordinates are not transformed properly according
> to SRS of data in PostGIS.
>
> I've tries with different projection in map file and request message
> with no success.
>
> Supporting data to give your input on my queries:
>
> WFS request
> *************************
> Formatted Version:
>
> 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>
> *************************
>
> PostGIS query [Could see in log file]:
> *************************
> 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)
> *************************
>
> Similar WFS query to GeoServer works perfectly.
>
> It would be very helpful if someone can help me on it. Thanks a lot in
> advance.
>
> Map File looks like:
>
> **************************************************
> 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
> **************************************************
>
> Regards,
> Kajod
>
>


_______________________________________________
mapserver-users mailing list
mapserver-users at lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/mapserver-users


More information about the mapserver-users mailing list