AW: [mapserver-users] Spatial Filter with WFS
Fischer, Andreas
Andreas.Fischer at kreis-unna.de
Tue Nov 23 08:30:28 PST 2010
Hi Jukka,
I tried another getFeature request using your syntax. I only replaced the 'EPSG:4326' to 'EPSG:25832' since the coordinates are in this reference system. Unfortunately I got the same result. It doesn't matter if I ask for VERSION=1.1.0 or VERSION=1.0.0 - I tried out both.
Request
http://192.168.2.117/cgi-bin/mapserv?map=/mapserver/mapfiles/u218768/ku_testwfs.map&REQUEST=getFeature&typename=folie001&SERVICE=WFS&VERSION=1.0.0&
Filter=
<ogc:Filter>
<ogc:Intersects xmlns:gml='http://www.opengis.net/gml'>
<ogc:PropertyName xmlns:topp="http://www.openplans.org/topp">topp:the_geom</ogc:PropertyName>
<gml:Polygon srsName="EPSG:25832">
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates cs="," decimal="." ts=" ">409350.0,5709890.0 409350.0,5709910.0 409370.0,5709910.0 409370.0,5709890.0 409350.0,5709890.0</gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</ogc:Intersects>
</ogc:Filter>
Response
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <wfs:FeatureCollection xmlns:ms="http://mapserver.gis.umn.edu/mapserver" xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mapserver.gis.umn.edu/mapserver http://192.168.2.117/cgi-bin/mapserv?map=/mapserver/mapfiles/u218768/ku_testwfs.map&SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TYPENAME=folie001&OUTPUTFORMAT=text/xml; subtype=gml/3.1.1 http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd" numberOfFeatures="4">
- <gml:boundedBy>
- <gml:Envelope srsName="EPSG:25832">
<gml:lowerCorner>-1.000000 -1.000000</gml:lowerCorner>
<gml:upperCorner>-1.000000 -1.000000</gml:upperCorner>
</gml:Envelope>
</gml:boundedBy>
</wfs:FeatureCollection>
The only difference I could detect is the coordinates within the Envelope.
With PostGIS datasource it is:
<gml:lowerCorner>-1.000000 -1.000000</gml:lowerCorner>
<gml:upperCorner>-1.000000 -1.000000</gml:upperCorner>
With MapInfo it is:
<gml:lowerCorner>-1.000000 -1.000000</gml:lowerCorner>
<gml:upperCorner>409388.231116 5709944.987211</gml:upperCorner>
Even if the upperCorner is set, it is not the upper Corner of the featureCollection (4 features), that should be selected by the filter condition. And in both cases I did not change the EXTENT of the MAP und LAYER sections (EXTENT 389965 5693582 420177 5732815, "wfs_extent" "389965 5693582 420177 5732815").
So please let me know, if you have another idea to solve this problem
Tanks again!
Best regards
Andreas
Mit freundlichen Grüßen
Im Auftrag
Andreas Fischer
Kreis Unna - Der Landrat
Zentrale Datenverarbeitung
Friedrich-Ebert-Straße 17
59425 Unna
Fon 02 3 03 27-44 16
Fax 0 23 03 27-28 96
andreas.fischer at kreis-unna.de
www.kreis-unna.de
Von: Rahkonen Jukka [mailto:Jukka.Rahkonen at mmmtike.fi]
Gesendet: Dienstag, 23. November 2010 15:01
An: Yewondwossen Assefa; Fischer, Andreas
Cc: mapserver-users at lists.osgeo.org
Betreff: Re: [mapserver-users] Spatial Filter with WFS
Hi,
Andreas, you may be without a wsf:Query element. Here is a WFS 1.0.0 request that works with Geoserver.
<?xml version="1.0" encoding="ISO-8859-1"?>
<wfs:GetFeature xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" service="WFS" version="1.0.0" maxFeatures="1000" outputFormat="GML2">
<wfs:Query xmlns:topp="http://www.openplans.org/topp" typeName="topp:states">
<ogc:Filter>
<ogc:Intersects xmlns:gml='http://www.opengis.net/gml' >
<ogc:PropertyName xmlns:topp="http://www.openplans.org/topp">
topp:the_geom</ogc:PropertyName>
<gml:Polygon srsName="EPSG:4326">
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates cs="," decimal="." ts=" ">
409350.0,5709890.0 409350.0,5709910.0 409370.0,5709910.0 409370.0,5709890.0 409350.0,5709890.0</gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</ogc:Intersects>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeature>
Y.A, a question for you: I have thought that also the filters should be presented as gml3 with WFS 1.1.0 and thus posList should be used instead of coordinates. Am I wrong with this belief? By the way, this is how Geoserver 2.1 beta 1 writes out on multipolygon as gml3
<topp:the_geom>
<gml:MultiSurface srsDimension="2" srsName="urn:x-ogc:def:crs:EPSG:4326">
<gml:surfaceMember>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<gml:posList>
37.51099000000001 -88.071564 37.476273000000006 -88.087883 37.442852 -88.311707 37.40930899999999 -88.359177
-Jukka Rahkonen-
________________________________________
Lähettäjä: mapserver-users-bounces at lists.osgeo.org [mailto:mapserver-users-bounces at lists.osgeo.org] Puolesta Yewondwossen Assefa
Lähetetty: 23. marraskuuta 2010 15:43
Vastaanottaja: Rahkonen Jukka; Fischer, Andreas
Kopio: mapserver-users at lists.osgeo.org
Aihe: Re: [mapserver-users] Spatial Filter with WFS
Hi all,
As noted MapServer does not support gml:Surface. The original request with gml:Polygon seems to be correct.
Andreas, is it possible to package it and send it to me off list. I can quickly check what the issue is.
regards,
as noted Mapserver does not support gml:Surface.
On 23/11/2010 8:26 AM, Rahkonen Jukka wrote:
Hi,
This one may not be the only problem, but I would start by creating a valid WFS 1.1.0 request by giving a filter as gml3 or alternatively go on with using gml2 filter but changing version to WFS 1.0.0. Here below is a WFS 1.1.0 request that works against deegree. It does not necessarily work against Mapserver because it can well be that Mapserver does not support gml:Surface, even if the surface is a plain polygon as in this case. However, you see that gml3 does not use <gml:coordinates, it is using <gml:posList and it would be a miracle or Mapserver bug or both if your request works.
<?xml version="1.0" encoding="ISO-8859-1"?>
<wfs:GetFeature xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" service="WFS" version="1.1.0" maxFeatures="1000" outputFormat="text/xml; subtype=gml/3.1.1">
<wfs:Query xmlns:app="http://www.deegree.org/app" srsName="EPSG:26912" typeName="app:Counties">
<ogc:Filter>
<ogc:Intersects xmlns:gml='http://www.opengis.net/gml' >
<ogc:PropertyName xmlns:app="http://www.deegree.org/app">
app:position</ogc:PropertyName>
<gml:Surface srsName='EPSG:26912' >
<gml:patches>
<gml:PolygonPatch>
<gml:exterior>
<gml:LinearRing>
<gml:posList srsDimension='2' count='6'>
87.0 198.0 149.0 239.0 261.0 202.0 263.0 89.0 161.0 80.0 87.0 198.0</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:PolygonPatch>
</gml:patches>
</gml:Surface>
</ogc:Intersects>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeature>
-Jukka Rahkonen-
--------------------------------------------------------------------------------
Lähettäjä: mapserver-users-bounces at lists.osgeo.org [mailto:mapserver-users-bounces at lists.osgeo.org] Puolesta Fischer, Andreas
Lähetetty: 22. marraskuuta 2010 19:36
Vastaanottaja: mapserver-users at lists.osgeo.org
Aihe: [mapserver-users] Spatial Filter with WFS
Dear MapServer-User,
I configured MapServer version 5.6.5 as WMS- and WFS-Server to offer information about land and properties. I use PostgreSQL/PostGIS (8.4.4/1.5.1) as datastore in this case. The spatial reference system is EPSG:25832 und the type of the geometry is MULTIPOLYGON. OS is Suse Linux Enterprise Server 11, Servicepack1.
WMS and WFS work fine until I use a spatial filter within the getFeature-Request of the WFS. In this case the response doesn't deliver any features. Nevertheless the number of features (e.g. numberOf Features='4') is correct. I tried this out with a couple of different boundingboxes and the known number of features that intersect these boundigboxes. In all cases I do not get any features back, but always the right number. So it seems that at least the intersection of the boundingbox and my data works correctly.
Please take a look at the following request and response that illustrate that problem:
Request:
http://myserver/cgi-bin/mapserv?map=/mapserver/mapfiles/u218768/ku_testwfs.map&REQUEST=getFeature&typename=folie001&SERVICE=WFS&VERSION=1.1.0&
Filter=<ogc:Filter>
<Intersects>
<ogc:PropertyName>msGeometry</ogc:PropertyName>
<gml:Polygon srsName='EPSG:25832'>
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates>409350,5709890 409350,5709910 409370,5709910 409370,5709890 409350,5709890</gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</Intersects>
</ogc:Filter>
Response
<?xml version="1.0" encoding="ISO-8859-1" ?>
<wfs:FeatureCollection xmlns:ms="http://mapserver.gis.umn.edu/mapserver" xmlns:gml="http://www.opengis.net/gml" xmlns:wfs=http://www.opengis.net/wfs xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mapserver.gis.umn.edu/mapserver http://myserver/cgi-bin/mapserv?map=/mapserver/mapfiles/u218768/ku_testwfs.map&SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TYPENAME=folie001&OUTPUTFORMAT=text/xml; subtype=gml/3.1.1 http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd" numberOfFeatures="4">
<gml:boundedBy>
<gml:Envelope srsName="EPSG:25832">
<gml:lowerCorner>-1.000000 -1.000000</gml:lowerCorner>
<gml:upperCorner>-1.000000 -1.000000</gml:upperCorner>
</gml:Envelope>
</gml:boundedBy>
</wfs:FeatureCollection>
Indeed of this behavior the WFS returns features when I do not use a spatial filter. Therefore in my opinion the WFS should be configured right in general. To me the spatial filter seems to be the problem. Unfortunately I do not have any ideas what is going wrong.
For more information you can take a look at my MapFile and a part of the capabilities document returned from the WFS below:
MAP
NAME "ku_testwfs"
STATUS ON
SIZE 400 520
EXTENT 389965 5693582 420177 5732815
UNITS METERS
PROJECTION
"init=epsg:25832"
END
SYMBOLSET "/mapserver/symbols/symbols_alk.sym"
FONTSET "/mapserver/fonts/fonts.fnt"
IMAGECOLOR 255 255 255
WEB
IMAGEPATH "/mapbender/mb262/http/tmp/"
IMAGEURL "http://myserver/mapbender/tmp/"
METADATA
"ows_onlineresource" "http://myserver/cgi-bin/mapserv?map=/mapserver/mapfiles/u218768/ku_testwfs.map"
"ows_title" "Liegenschaftskarte, Kreis Unna"
"ows_accessconstraints" "Nutzung nur für den Dienstgebrauch."
"ows_abstract" "Flurstücksfolie der Liegenschaftskarte."
"ows_contactperson" "Andreas Fischer"
"ows_contactorganization" "Kreis Unna"
"ows_contactposition" "Zentrale Datenverarbeitung, Geodatenmanagement"
"wms_srs" "EPSG:25832 EPSG:31462 EPSG:31463 EPSG:31466 EPSG:31467 EPSG:4326"
"wms_feature_info_mime_type" "text/html"
"wfs_srs" "EPSG:25832"
END #METADATA
END #WEB
LAYER
NAME "folie001"
STATUS ON
TYPE POLYGON
DUMP TRUE
CONNECTIONTYPE postgis
CONNECTION "user=dbuser password=dbpassword dbname=dbname host=dbhost port=dbport"
DATA "the_geom from ku_view_folie001 USING UNIQUE objnr USING SRID=25832"
METADATA
"ows_title" "Flurstücke"
"wms_srs" "EPSG:25832 EPSG:31462 EPSG:31463 EPSG:31466 EPSG:31467 EPSG:4326"
"wms_feature_info_mime_type" "text/html"
"wfs_srs" "EPSG:25832"
"wfs_extent" "389965 5693582 420177 5732815"
"gml_include_items" "all"
"gml_featureid" "objnr"
END #METADATA
CLASS
NAME "Flurstücke"
STYLE
OUTLINECOLOR 0 0 0
WIDTH 1
END # STYLE
END # CLASS
END #LAYER
END #MAPFILE
[...]
- < FeatureTypeList>
- < Operations>
<Query />
</Operations>
- <FeatureType>
<Name>folie001</Name>
<Title>Flurstücke</Title>
<SRS>EPSG:25832</SRS>
<LatLongBoundingBox minx="389965" miny="5.69358e+06" maxx="420177" maxy="5.73282e+06" />
</FeatureType>
</FeatureTypeList>
- <ogc:Filter_Capabilities>
- <ogc:Spatial_Capabilities>
- <ogc:Spatial_Operators>
<ogc:Equals />
<ogc:Disjoint />
<ogc:Touches />
<ogc:Within />
<ogc:Overlaps />
<ogc:Crosses />
<ogc:Intersect />
<ogc:Contains />
<ogc:DWithin />
<ogc:BBOX />
</ogc:Spatial_Operators>
</ogc:Spatial_Capabilities>
- <ogc:Scalar_Capabilities>
<ogc:Logical_Operators />
- <ogc:Comparison_Operators>
<ogc:Simple_Comparisons />
<ogc:Like />
<ogc:Between />
</ogc:Comparison_Operators>
</ogc:Scalar_Capabilities>
</ogc:Filter_Capabilities>
</WFS_Capabilities>
(The LatLongBoundingBox in this case is obviously not in units of LatLon but represent the boundingbox in the offered SRS 25832. This seems to be strange since thes doesn' t occur in the WMS-capabilities document. In this document the LatLongBoundingBox und the BoundingBox in the source SRS are both all right.)
I even tried different versions of MapServer and I discovered a slight difference with other versions. If I change my datasource from PostGIS to OGR/MapInfo Tab former versions of MapServer (5.4.2/5.2.3) provide features as well. But just in case of OGR/MapInfo Tab - not with PostGIS in use! As I have to use PostGIS I'm interested in any hints to solve this problem.
Therefore I would be glad to hear from you!
Thanks so far and best regards!
Andreas
Mit freundlichen Grüßen
Im Auftrag
Andreas Fischer
Kreis Unna - Der Landrat
Zentrale Datenverarbeitung
Friedrich-Ebert-Straße 17
59425 Unna
Fon 02 3 03 27-44 16
Fax 0 23 03 27-28 96
andreas.fischer at kreis-unna.de
www.kreis-unna.de
Diese E-Mail wurde beim Ausgang auf Viren geprueft. Wegen der potentiellen Gefahr auf den Uebertragungswegen wird zu einer Vireneingangskontrolle geraten. Eine Haftung für Virenfreiheitwird ausgeschlossen.
_______________________________________________
mapserver-users mailing list
mapserver-users at lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapserver-users
--
----------------------------------------------------------------
Assefa Yewondwossen
Software Analyst
Email: yassefa at dmsolutions.ca
http://www.dmsolutions.ca/
Phone: (613) 565-5056 (ext 14)
Fax: (613) 565-0925
----------------------------------------------------------------
Diese E-Mail wurde beim Ausgang auf Viren geprueft. Wegen der
potentiellen Gefahr auf den Uebertragungswegen wird zu einer
Vireneingangskontrolle geraten. Eine Haftung für Virenfreiheit
wird ausgeschlossen.
More information about the MapServer-users
mailing list