[mapserver-users] Setting up a JSONP service

Eichner, Andreas - SID Andreas.Eichner at sid.sachsen.de
Tue Jan 13 06:57:53 PST 2015


Arg.. outputformat=geojson also works, only had a typo...

> -----Ursprüngliche Nachricht-----
> Von: mapserver-users-bounces at lists.osgeo.org [mailto:mapserver-users-
> bounces at lists.osgeo.org] Im Auftrag von Eichner, Andreas - SID
> Gesendet: Dienstag, 13. Januar 2015 15:18
> An: 'lars.fricke at skendata.de'; mapserver-users at lists.osgeo.org
> Betreff: Re: [mapserver-users] Setting up a JSONP service
> 
> You need to append the "callback" parameter to the query string:
> 
> http://localhost:8082/wfs?SERVICE=WFS&VERSION=1.1.0&request=GetFeature&TYP
> ENAME=HU&outputformat=geojson&SRS=EPSG:3857&bbox=793732,6570204,793765,657
> 0228&callback=foobar
> 
> You can test on the command line, too:
> MS_MAPFILE=/path/to/mapfile ./mapserv
> QUERY_STRING='service=WFS&version=1.1.0&request=GetFeature&typename=HU&
> SRS=EPSG:3857&bbox=793732,6570204,793765,6570228&outputformat=application/
> json; subtype=geojson; charset=utf-8&callback=foobar'
> 
> Please note that IMHO "geojson" alone isn't enough. The full mimetype
> string should be used as reported by GetCapabilities.
> 
> HTH
> 
> > -----Ursprüngliche Nachricht-----
> > Von: Lars Fricke [mailto:fricke at gisberater.com]
> > Gesendet: Dienstag, 13. Januar 2015 14:22
> > An: Eichner, Andreas - SID; mapserver-users at lists.osgeo.org
> > Betreff: Re: [mapserver-users] Setting up a JSONP service
> >
> > Hi,
> >
> > I compiled MapServer after applying the patch (at least I think it was
> > applied). Unfortunately the output is not JSONP format. Maybe I'm
> > getting something wrong. So here is what I did:
> > Applied
> > patch -p1 < jsonp.diff
> >
> > I got an updated mapogroutput.c.
> >
> > I then compiled with the following options:
> > cmake -DCMAKE_INSTALL_PREFIX=/opt \
> >          -DCMAKE_PREFIX_PATH="/usr/local;/opt" \
> >          -DWITH_CLIENT_WFS=ON \
> >          -DWITH_CLIENT_WMS=ON \
> >          -DWITH_CURL=ON \
> >          -DWITH_SOS=ON \
> >          -DWITH_PHP=0 \
> >          -DWITH_PYTHON=ON \
> >          -DWITH_SVGCAIRO=OFF \
> >          -DWITH_ORACLESPATIAL=0 \
> >          -DWITH_MSSQL2008=OFF \
> >          -DWITH_THREAD_SAFETY=ON \
> >          -DWITH_LIBXML2=ON \
> >          -DWITH_MYSQL=ON\
> >          -DWITH_SDE=0  .. >../configure.out.txt
> >
> > Which goes through without any warning.
> >
> > I do make next, getting a few warnings about the Python bindings but
> > nothing about mapogroutput (ecept that it was compiled). Then sudo make
> > install. No warnings.
> > I then set a symlink to the new mapserv file inside cgi-bin and start my
> > apache.
> >
> > I changed my mapfile as you indicated:
> > WEB
> >      FOOTER "test"
> >      IMAGEPATH "/var/www/html/tmp/"
> >      TEMPPATH "/var/www/html/tmp/"
> >      IMAGEURL "/html/tmp/"
> >      METADATA
> >        "wfs_title"          "Test"
> >        "ows_onlineresource"    "http://localhost:8082/wfs?"
> >        "ows_enable_request"    "*"
> >        "ows_srs"    "EPSG:3857"
> >        "wfs_srs"    "EPSG:3857"
> >        "wfs_getfeature_formatlist" "geojson,csv,ogrgml"
> >        "wfs_encoding" "UTF-8"
> >      END # METADATA
> >      VALIDATION
> >          callback ".*"
> >      END
> >    END # WEB
> >
> > 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"
> >     FORMATOPTION "JSONP=%callback%"
> >    END
> >
> > Unfortunately calling:
> >
> http://localhost:8082/wfs?SERVICE=WFS&VERSION=1.1.0&request=GetFeature&TYP
> >
> ENAME=HU&outputformat=geojson&SRS=EPSG:3857&bbox=793732,6570204,793765,657
> > 0228
> >
> > gives me a result as before without your changes:
> > {
> > "type": "FeatureCollection",
> > "crs": { "type": "name", "properties": { "name":
> > "urn:ogc:def:crs:EPSG::3857" } },
> > "features": [
> > { "type": "Feature", "properties": { "gml_id": "", "UMRING_ID":
> > "36245586"}, "geometry": { "type": "Polygon", "coordinates": [ [ [
> > 793757.73417, 6570202.31642 ], [ 793762.85989, 6570195.63821 ], [
> > 793770.20682, 6570201.30901 ], [ 793765.08276, 6570207.98411 ], [
> > 793757.73417, 6570202.31642 ] ] ] } },
> > { "type": "Feature", "properties": { "gml_id": "", "UMRING_ID":
> > "36245583"}, "geometry": { "type": "Polygon", "coordinates": [ [ [
> > 793752.31968, 6570224.89917 ], [ 793747.96097, 6570230.48534 ], [
> > 793732.07033, 6570218.01607 ], [ 793740.12777, 6570207.69188 ], [
> > 793742.99908, 6570209.94649 ], [ 793747.5696, 6570204.08902 ], [
> > 793761.16105, 6570214.75134 ], [ 793752.94726, 6570225.27397 ], [
> > 793752.31968, 6570224.89917 ] ] ] } },
> > { "type": "Feature", "properties": { "gml_id": "", "UMRING_ID":
> > "36245550"}, "geometry": { "type": "Polygon", "coordinates": [ [ [
> > 793735.55884, 6570231.00753 ], [ 793738.78194, 6570226.81082 ], [
> > 793746.26949, 6570232.5959 ], [ 793743.04798, 6570236.79266 ], [
> > 793735.55884, 6570231.00753 ] ] ] } }
> > ]
> > }
> >
> > I also tried this with an AJAX call from Javascript, giving me the
> > exactly same result.
> >
> > I get an error message trying to use the result in Leaflet telling me a
> > ";" is missing. I assume it should look like this:
> >
> > var testlayer = [{
> > "type": "FeatureCollection",
> > "crs": { "type": "name", "properties": { "name":
> > "urn:ogc:def:crs:EPSG::3857" } },
> > "features": [
> > { "type": "Feature", "properties": { "gml_id": "", "UMRING_ID":
> > "36245586"}, "geometry": { "type": "Polygon", "coordinates": [ [ [
> > 793757.73417, 6570202.31642 ], [ 793762.85989, 6570195.63821 ], [
> > 793770.20682, 6570201.30901 ], [ 793765.08276, 6570207.98411 ], [
> > 793757.73417, 6570202.31642 ] ] ] } },
> > { "type": "Feature", "properties": { "gml_id": "", "UMRING_ID":
> > "36245583"}, "geometry": { "type": "Polygon", "coordinates": [ [ [
> > 793752.31968, 6570224.89917 ], [ 793747.96097, 6570230.48534 ], [
> > 793732.07033, 6570218.01607 ], [ 793740.12777, 6570207.69188 ], [
> > 793742.99908, 6570209.94649 ], [ 793747.5696, 6570204.08902 ], [
> > 793761.16105, 6570214.75134 ], [ 793752.94726, 6570225.27397 ], [
> > 793752.31968, 6570224.89917 ] ] ] } },
> > { "type": "Feature", "properties": { "gml_id": "", "UMRING_ID":
> > "36245550"}, "geometry": { "type": "Polygon", "coordinates": [ [ [
> > 793735.55884, 6570231.00753 ], [ 793738.78194, 6570226.81082 ], [
> > 793746.26949, 6570232.5959 ], [ 793743.04798, 6570236.79266 ], [
> > 793735.55884, 6570231.00753 ] ] ] } }
> > ]
> > }];
> >
> > I'm not sure what is going on. Am I not applying the changes correctly
> > or is my call wrong?
> >
> > Thanks for you great support.
> >
> > Best
> >
> > Lars
> >
> >
> > Am 09.01.2015 um 15:30 schrieb Eichner, Andreas - SID:
> > > Hi,
> > >
> > > I've attached a quick'n dirty solution (against master). When applied
> to
> > > mapogroutput.c you can set a JSONP formatoption to the callback name:
> > >
> > > 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'
> > >      FORMATOPTION 'JSONP=%callback%'
> > > END
> > >
> > > This needs of course a WEB.VALIDATION:
> > > WEB
> > >    ...
> > >    VALIDATION
> > >      callback '.*'
> > >    END
> > > END
> > >
> > > Would be great if you can test if this works (looks good to me). The
> > Devs might have a look if this could be integrated into master until OGR
> > has an appropriate layer creation option (solution described by Even).
> > >
> > > Greetings
> > >
> > >> -----Ursprüngliche Nachricht-----
> > >> Von: mapserver-users-bounces at lists.osgeo.org [mailto:mapserver-users-
> > >> bounces at lists.osgeo.org] Im Auftrag von Lars Fricke
> > >> Gesendet: Freitag, 9. Januar 2015 11:24
> > >> An: mapserver-users at lists.osgeo.org
> > >> Betreff: Re: [mapserver-users] Setting up a JSONP service
> > >>
> > >> Hello,
> > >>
> > >> first of all: Thank you for your support!
> > >> Sorry for the late reply but I unfortunately was ill.
> > >>
> > >> @ Steve:
> > >> I read about templating but also read that it is slower?
> > >> I do not have a lot of experience in writing templates. Would you
> mind
> > >> sharing a JSONP template?
> > >>
> > >> @ Even: Thank you for your thoughts. Who would implement that change
> > >> though? I'm afraid I can't.
> > >>
> > >> @ Jeff: I followed those links but I only found threads referring to
> > >> GeoServer or that were not related to my question. The GDAL page I
> did
> > >> study and that's how I managed to set up the GeoJSON service but
> thats
> > >> not the same unfortunately as it conflicts with the same origin
> policy.
> > >>
> > >> Best
> > >>
> > >> Lars
> > >>
> > >> Am 30.12.2014 um 16:24 schrieb Lime, Steve D (MNIT):
> > >>> You can also use MapServer templates to accomplish this. It's a
> little
> > >> more work since you have to write the template but it's quite
> flexible
> > >> then. Usually I write the template to produce JSON and then use a
> > simple
> > >> wrapper template to produce JSONP. For example, jsonp.js looks like
> > >> (callback is passed in):
> > >>> // MapServer Template
> > >>> [callback](
> > >>>     [include src="templates/json.js"]
> > >>> )
> > >>>
> > >>> Output formats look like:
> > >>>
> > >>>     OUTPUTFORMAT
> > >>>       NAME 'JSON'
> > >>>       DRIVER 'TEMPLATE'
> > >>>       MIMETYPE 'application/json;'
> > >>>       FORMATOPTION 'FILE=templates/json.js'
> > >>>       FORMATOPTION 'ATTACHMENT=service.json'
> > >>>     END
> > >>>
> > >>>     OUTPUTFORMAT
> > >>>       NAME 'JSONP'
> > >>>       DRIVER 'TEMPLATE'
> > >>>       MIMETYPE 'application/json;'
> > >>>       FORMATOPTION 'FILE=templates/jsonp.js'
> > >>>       FORMATOPTION 'ATTACHMENT=service.json'
> > >>>     END
> > >>>
> > >>> Steve
> > >>>
> > >>> -----Original Message-----
> > >>> From:mapserver-users-bounces at lists.osgeo.org  [mailto:mapserver-
> users-
> > >> bounces at lists.osgeo.org] On Behalf Of Lars Fricke
> > >>> Sent: Monday, December 29, 2014 5:34 AM
> > >>> To:mapserver-users at lists.osgeo.org
> > >>> Subject: [mapserver-users] Setting up a JSONP service
> > >>>
> > >>> 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
> > >>> _______________________________________________
> > >>> mapserver-users mailing list
> > >>> mapserver-users at lists.osgeo.org
> > >>> http://lists.osgeo.org/mailman/listinfo/mapserver-users
> > >>> _______________________________________________
> > >>> mapserver-users mailing list
> > >>> mapserver-users at lists.osgeo.org
> > >>> http://lists.osgeo.org/mailman/listinfo/mapserver-users
> > >>>
> > >> _______________________________________________
> > >> mapserver-users mailing list
> > >> mapserver-users at lists.osgeo.org
> > >> http://lists.osgeo.org/mailman/listinfo/mapserver-users
> 
> _______________________________________________
> mapserver-users mailing list
> mapserver-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-users


More information about the mapserver-users mailing list