Been dealing with other somewhat related issues (WFS/Query) but haven't forgotten about it. Can you create a quick ticket and assign to me?
https://github.com/mapserver/mapserver/issues/ Will target for 7.0. Steve -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Gertjan van Oosten Sent: Tuesday, August 19, 2014 8:06 AM To: [email protected] Subject: Re: [mapserver-users] WFS GetFeature sometimes returns 'missing' even when there are matching features Hi all, It's been a month since I posted this, but so far I have not seen any activity towards fixing it. I know it's summer holidays and all, but is there something I could or should to to get this fixed? We're currently running a locally patched version of Mapserver, but we'd prefer not to. Kind regards, Gertjan As quoted from Gertjan van Oosten <[email protected]>: > Hi, > > A WFS GetFeature request like this one: > > <wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs" service="WFS" > version="1.1.0" 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="feature:Results_wfs"> > <wfs:PropertyName>FEATURE_ID</wfs:PropertyName> > </wfs:Query> > </wfs:GetFeature> > > sometimes returns 'missing' like so: > > <?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://localhost/mapserv?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TYPENAME=feature:Results_wfs&OUTPUTFORMAT=text/xml;%20subtype=gml/3.1.1 > http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"> > <gml:boundedBy> > <gml:Null>missing</gml:Null> > </gml:boundedBy> > </wfs:FeatureCollection> > > even when there is a matching feature. This happens with Mapserver > 6.4.1 and Oracle 11.2. I've traced it down to the searchrect in > msQueryByRect() inside mapquery.c being "empty": > > {minx=-1, maxx=-1, miny=-1, maxy=-1} > > This is caused by the way the extent is computed: > > msOracleSpatialLayerGetExtent. Using this Sql to retrieve the extent: > SELECT SDO_GEOM.SDO_CONVEXHULL(link_geo, 0.001000) AS GEOM from > (...) > > The convex hull is NULL for some features. As the documentation says: > > > http://docs.oracle.com/cd/E11882_01/appdev.112/e11830/sdo_objgeom.htm#SPATL1114 > "The function returns a null value if geom1 is of point type, has > fewer than three points or vertices, or consists of multiple points > all in a straight line." > > I indeed have features like that, so in this case no features are > returned at all. That is obviously not right. If I add these three > lines it works correctly and my features are returned: > > > --- mapserver-6.4.1/mapquery.c.distrib 2014-01-02 13:41:49.000000000 > +0100 > +++ mapserver-6.4.1/mapquery.c 2014-07-17 13:58:36.000000000 +0200 > @@ -1055,30 +1055,33 @@ > > searchrect = map->query.rect; > if(lp->tolerance > 0) { > layer_tolerance = lp->tolerance; > > if(lp->toleranceunits == MS_PIXELS) > tolerance = layer_tolerance * msAdjustExtent(&(map->extent), > map->width, map->height); > else > tolerance = layer_tolerance * > (msInchesPerUnit(lp->toleranceunits,0)/msInchesPerUnit(map->units,0)); > > searchrect.minx -= tolerance; > searchrect.maxx += tolerance; > searchrect.miny -= tolerance; > searchrect.maxy += tolerance; > } > + if (searchrect.minx == -1 && searchrect.maxx == -1 && searchrect.miny == > -1 && searchrect.maxy == -1) { > + searchrect = map->extent; > + } > > msRectToPolygon(searchrect, &searchshape); > > /* Raster layers are handled specially. */ > if( lp->type == MS_LAYER_RASTER ) { > if( msRasterQueryByRect( map, lp, searchrect ) == MS_FAILURE) > return MS_FAILURE; > > continue; > } > > /* Paging could have been disabled before */ > paging = msLayerGetPaging(lp); > msLayerClose(lp); /* reset */ > status = msLayerOpen(lp); > > > I.e if the query rectangle can't be computed for some reason, fall > back to the map extent. I don't know if this is the best fix, but it > is the simplest that I could find. Is this the right way to do it? -- -- Gertjan van Oosten, Principal Consultant, West Consulting B.V. -- [email protected] +31 15 2191 600 www.west.nl _______________________________________________ mapserver-users mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/mapserver-users _______________________________________________ mapserver-users mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/mapserver-users
