[mapserver-users] Setting up a JSONP service

Even Rouault even.rouault at spatialys.com
Mon Dec 29 16:36:18 PST 2014


Le mardi 30 décembre 2014 00:55:59, Jeff McKenna a écrit :
> On 2014-12-29 6:34 AM, Lars Fricke wrote:
> > Dear List,
> > 
> > I have a WFS service running under MapServer that I would like to
> > operate as JSONP service. I managed to set GEOJSON as output format but
> > I get "Cross-Origin-Request Blocked" if I try to call it with a
> > Javascript client (using Leaflet L.layerJSON.
> > The question is: Is it possible to set up a JSONP service from Mapserver
> > and if yes, how? My current mapfile looks like this (relevant parts):
> > 
> > "
> > # in WEB - METADATA
> > "wfs_getfeature_formatlist" "geojson,csv,ogrgml"
> > 
> > OUTPUTFORMAT
> > 
> >     NAME "geojson"
> >     DRIVER "OGR/GEOJSON"
> >     MIMETYPE "application/json; subtype=geojson; charset=utf-8"
> >     FORMATOPTION "STORAGE=stream"
> >     FORMATOPTION "FORM=SIMPLE"
> >     FORMATOPTION "LCO:COORDINATE_PRECISION=5"
> >    
> >    END
> > 
> > "
> > If this would already be a correct JSONP service, I have to look on the
> > Leaflet side for the error...
> > Thanks for your help.
> > 
> > Cheers
> > 
> > Lars
> 
> Since you're using the OGR driver, you might want to review the GDAL/OGR
> drive page thoroughly (http://www.gdal.org/drv_geojson.html), or ask
> about JSONP on the GDAL-dev mailing list (I see several discussions
> about JSONP, when I search the mailing list archives
> http://osgeo-org.1560.x6.nabble.com/GDAL-Dev-f3742093.html)

Lars,

AFAICS, this would needs a modest enhancement in the OGR GeoJSON driver to 
have for example a FORMAT=JSONP creation option, and probably another one like 
JSONP_CALLBACK=the_name_you_wish to define the name of the callback function.

Then you could define:

OUTPUTFORMAT
     NAME "jsonp"
     DRIVER "OGR/GEOJSON"
     MIMETYPE "text/javascript"
     FORMATOPTION "STORAGE=stream"
     FORMATOPTION "FORM=SIMPLE"
     FORMATOPTION "LCO:FORMAT=JSONP"
     FORMATOPTION "LCO:JSONP_CALLBACK=the_name_you_wish"
     FORMATOPTION "LCO:COORDINATE_PRECISION=5"
END

I see that GeoServer has a way to specify the callback name from a user-
specified "format_options=" vendor specific parameters. We could probably do 
something similar with substitution in output format formatoption like

OUTPUTFORMAT
     NAME "jsonp"
     DRIVER "OGR/GEOJSON"
     MIMETYPE "text/javascript"
     FORMATOPTION "STORAGE=stream"
     FORMATOPTION "FORM=SIMPLE"
     FORMATOPTION "LCO:FORMAT=JSONP"
     FORMATOPTION "LCO:JSONP_CALLBACK=%jsonp_callback%"
     FORMATOPTION "LCO:COORDINATE_PRECISION=5"
END

But AFAIK, this is only currently implemented for the FILENAME format option, 
so this would require a small enhancement in MapServer too.

Even

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


More information about the mapserver-users mailing list