[mapserver-users] WFS GeoJSON Output Missing numberMatched

Even Rouault even.rouault at spatialys.com
Wed Jun 5 15:06:44 PDT 2019


On mercredi 5 juin 2019 23:43:22 CEST Seth G wrote:
> Hi all,
> 
> I'm currently working on a front-end grid that requests features via WFS 2.0
> and loads them using OpenLayers. OpenLayers 4 doesn't support parsing of
> GML3 used by WFS 2.0, but I can return features as GeoJSON by setting the
> output format as follows:
> 
>     OUTPUTFORMAT
>         NAME "geojson"
>         DRIVER "OGR/GEOJSON"
>         MIMETYPE "application/json; subtype=geojson"
>         FORMATOPTION "FORM=SIMPLE"
>         FORMATOPTION "STORAGE=memory"
>     END
> 
> Then setting WEB > METADATA > "wfs_getfeature_formatlist"
> "gml,geojson,application/json"
> 
> WFS requests  are then made with URL parameters such as
> &service=WFS&version=2.0.0&request=GetFeature&typeName=MyLayer&outputFormat
> =application%2Fjson&startIndex=0&count=20
> 
> Everything works fine including paging, but in order to calculate how many
> "pages" of data I need to get the numberMatched property. This can be
> turned on for GML3 using WEB > METADATA > "wfs_compute_number_matched"
> "true" (as noted at
> https://mapserver.org/fr/ogc/wfs_server.html#web-object-metadata).
> 
> If I then request GML with outputFormat=gml3 the GML response includes
> numberMatched="6607" (the number of features in the layer).
> 
> As GML3 features can't be rendered in OpenLayers I'd like to get this
> property added to the GeoJSON output. This appears to be implemented in
> GeoServer. I was wondering if this is something that can be configured
> somewhere in the Mapfile perhaps as an option for the OGR/GEOJSON driver
> (https://gdal.org/drivers/vector/geojson.html). The timeStamp,
> numberReturned are also missing from the GeoJSON output.
> 
> Any ideas or hints appreciated,

If your need is just to compute the number of patches, to get the 
numberMatched, you could issue a GetFeature request with resultType=hits and 
the default GML3 outputFormat. But I guess that's not an option given your 
architecture.

If you absolutely need that in the GeoJSON output itself, you'll need to add 
that specific behaviour in MapServer.
If you provide the NATIVE_MEDIA_TYPE=application/vnd.geo+json and
NATIVE_DATA={"numberMatched":XXXX} layer creation options to 
OGR_DS_CreateLayer(), the OGR GeoJSON driver should include them in the output 
(with a recent enough GDAL version)


$ ogr2ogr -f geojson /vsistdout/ poly.shp \
   -lco NATIVE_MEDIA_TYPE=application/vnd.geo+json \
   -lco 'NATIVE_DATA={"numberMatched":1234}'
{
"type": "FeatureCollection",
"numberMatched": 1234,
"name": "poly",
"features": [
[snip]


Even

-- 
Spatialys - Geospatial professional services
http://www.spatialys.com


More information about the mapserver-users mailing list