[mapserver-users] WFS bbox/intersect etc query from custom projection to EPSG:4326
Seth G
sethg at geographika.co.uk
Wed Nov 24 07:32:16 PST 2021
Hi Sander,
Does adding a PROJECTION block to your LAYER have an effect?
Even if the layer projection is the same as the MAP I think I've run into a few combinations where setting explicitly on the layer helped.
Seth
--
web:http://geographika.co.uk
twitter: @geographika
On Wed, Nov 24, 2021, at 2:01 PM, Sander Pukk wrote:
> Hi there!
>
> We have been running into an issue with WFS, EPSG:4326 and a filter (namely bbox) query.
> We have been using MapServer for years and the current version we have is 7.6.4.
> WMS and WFS are both enabled and WFS is configured for gml and geojson.
>
> Our MapServer's main output is in EPSG:3301 projection and most of our clients use it like that.
> The bbox OGC WFS filters work in that projection and another more "robust" approach by limiting bbox into a 20x20 pixel square in the request.
>
> Our MapServer can also function in the regular 4326 and 3857 in WMS and WFS.
> But one of our clients is doing their things in 4326 and we noticed an issue when querying WFS with a bbox/intersect filter in that projection.
>
> *Main problem:
*Trying to reverse geocode from WFS service (capable of 3301, 4326 and 3857) where underlying data is in EPSG:3301 and request comes in 4326.
> The response should be in 4326, but the transformation does not work. (Obvious from the database SQL).
> Everything works in EPSG:3301.
>
> I have obscured some URL and Layer names.
> Our map file with a sample layer looks like this:
> MAP
>
> LEGEND
> LABEL
> TYPE truetype
> FONT "Arial"
> SIZE 10
> POSITION AUTO
> END
> END
>
> NAME "<%NAME%>_keskkond"
> STATUS ON
> EXTENT <%= node['mapserver']['extent'] %>
> FONTSET "<%= URL %>/fonts/current/fonts.list"
> IMAGETYPE "png"
> DEFRESOLUTION 96
> RESOLUTION 96
> CONFIG "MS_ERRORFILE" "infolayer.log"
> DEBUG 0
> MAXSIZE 10000
> OUTPUTFORMAT
> NAME "png"
> DRIVER AGG/PNG
> MIMETYPE "image/png"
> IMAGEMODE RGB
> EXTENSION "png"
> FORMATOPTION "QUANTIZE_FORCE=on"
> END
>
> OUTPUTFORMAT
> NAME "geojson"
> DRIVER "OGR/GEOJSON"
> MIMETYPE "application/json; subtype=geojson; charset=utf-8"
> FORMATOPTION "STORAGE=filesystem"
> FORMATOPTION "FORM=SIMPLE"
> END
>
> WEB
> METADATA
> "wfs_title" "infolayer"
> "wfs_enable_request" "*"
> "wfs_encoding" "UTF-8"
> "wms_title" "infolayer"
> "wms_encoding" "UTF-8"
> "wms_onlineresource" "/mapserv?map=/app/gis/infokihid/infolayer.map&"
> "wfs_onlineresource" "/mapserv?map=/app/gis/infokihid/infolayer.map&"
> "ows_srs" "EPSG:3301 EPSG:3857 EPSG:4326"
> "ows_enable_request" "*"
> "wfs_getfeature_formatlist" "gml,geojson"
> "wms_feature_info_mime_type" "application/json,application/json; subtype=geojson,application/vnd.ogc.gml,text/plain"
> END
> END
>
> PROJECTION
> "init=epsg:3301"
> END
>
> LAYER
> TEMPLATE "dummy"
> NAME "omavalitsus"
> STATUS off
> TYPE polygon
> CONNECTIONTYPE POSTGIS
> INCLUDE "postgis.inc"
> DATA "geom from omavalitsus using unique gid using srid=3301"
> LABELITEM "nimetus"
> TYPE polygon
> MAXSCALEDENOM 2000000
>
> METADATA
> "gml_msGeometry_type" "polygon"
> "wfs_title" "omavalitsus"
> "wms_title" "omavalitsus"
> "wfs_srs" "EPSG:3301"
> "wms_srs" "EPSG:3301"
> "wms_extent" "355000 6360000 754000 6660000"
> "gml_include_items" "all"
> "ows_include_items" "all"
> "wfs_srs" "EPSG:3301"
> "gml_featureid" "id"
> "ows_featureid" "id"
> END
>
> CLASS
> NAME omavalitsus
> STYLE
> COLOR 234 123 43
> OPACITY 15
> END
> STYLE
> WIDTH 2
> OUTLINECOLOR 80 80 80
> OPACITY 15
> END
> END
> END
>
>
> If we do a query without a bbox and want all the features, it works.
>
> Example:
> https://URL/mapserv?map=/app/gis/infokihid/infolayers_other.map&service=WFS&request=GetFeature&version=1.1.0&typename={{LAYER}}&outputformat=gml3&srsName=EPSG:4326 <https://url/mapserv?map=/app/gis/infokihid/infolayers_other.map&service=WFS&request=GetFeature&version=1.1.0&typename={{LAYER}}&outputformat=gml3&srsName=EPSG:4326>
>
> WFS version 1.3.0 and 2.0.0
> But if we add a bbox in OGC filter format or bbox, then it does not work anymore:
>
> Example:
>
> https://URL/mapserv?map=/app/gis/infokihid/infolayers_other.map&service=WFS&request=GetFeature&version=1.1.0&typename={{LAYER}}&outputformat=gml3&srsName=EPSG:4326&bbox=24.753586,59.29725,24.773586,59.31725,urn:x-ogc:def:crs:EPSG:4326 <https://url/mapserv?map=/app/gis/infokihid/infolayers_other.map&service=WFS&request=GetFeature&version=1.1.0&typename={{LAYER}}&outputformat=gml3&srsName=EPSG:4326&bbox=24.753586,59.29725,24.773586,59.31725,urn:x-ogc:def:crs:EPSG:4326>
>
> OR OGC
>
> https://URL/mapserv?map=/app/gis/infokihid/infolayers_other.map&SERVICE=WFS&Version=2.0.0&REQUEST=GetFeature&typeNames={{LAYER}}&Filter= <https://url/mapserv?map=/app/gis/infokihid/infolayers_other.map&SERVICE=WFS&Version=2.0.0&REQUEST=GetFeature&typeNames={{LAYER}}&Filter=><Filter><contains><PropertyName>Geometry</PropertyName><gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:coordinates>25.035308,59.32675</gml:coordinates></gml:Point></contains></Filter>
>
>
> Some documentation hints that OGC filter needs to be in the same SRID as the underlying data so I guess that shouldn't be working.
>
> SQL form the database where you can see the geom query part where transformation of geom contains/intersect etc happens, is is wrong:
>
> select <<FIELDS>>,ST_AsBinary(("geom"),'NDR') as geom,"gid"::text from (select * from LAYER where kehtiv_alates < now() and (kehtiv_kuni > now() OR kehtiv_kuni is null)) as subquery where ("geom" && ST_GeomFromText('POLYGON((296500 6249000,296500 6761000,808500 6761000,808500 6249000,296500 6249000))',3301)) AND ST_Distance("geom", ST_GeomFromText('POLYGON((296500 6249000,296500 6761000,808500 6761000,808500 6249000,296500 6249000))',3301)) = 0 and (st_contains(geom,ST_GeomFromText('POINT (25.0353080000000006 59.3267499999999970)',3301)) = TRUE)
>
> The contains should be:
>
> (st_contains(geom,ST_TRANSFORM(ST_GeomFromText('POINT (25.0353080000000006 59.3267499999999970)',4326),3301))
>
> One way to get a result is using WFS 1.0.0. It returns the result in EPSG:3301 but is correct.
>
> https://URL/mapserv?map=/app/gis/infokihid/infolayers_other.map&service=WFS&request=GetFeature&version=1.0.0&typename={{LAYER}}&outputformat=gml3&srsName=EPSG:4326&bbox=24.753586,59.29725,24.773586,59.31725,urn:x-ogc:def:crs:EPSG:4326 <https://url/mapserv?map=/app/gis/infokihid/infolayers_other.map&service=WFS&request=GetFeature&version=1.0.0&typename={{LAYER}}&outputformat=gml3&srsName=EPSG:4326&bbox=24.753586,59.29725,24.773586,59.31725,urn:x-ogc:def:crs:EPSG:4326>
>
> I have tried different OGC filters, but they all act the same when trying to do stuff in EPSG:4326.
> Tried different WFS versions, coordinate order in OGC filter/manual bbox etc.
> Even with the OGC filter being in EPSG:3301, but request in srs 4326.
> Have not yet managed to get it.
>
> So my questions are:
> 1. Is there something wrong in our MAP/LAYER files? Do we need to change or add something?
> 2. Could/Should it be possible to do what we are trying to do, when the main projection is something different then all the request parameters?
>
> Cheers,
> Sander
> _______________________________________________
> MapServer-users mailing list
> MapServer-users at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/mapserver-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/mapserver-users/attachments/20211124/370524f8/attachment.htm>
More information about the MapServer-users
mailing list