[mapserver-users] Setting up a JSONP service

Lars Fricke fricke at gisberater.com
Tue Jan 13 07:38:47 PST 2015


Hi Andreas,

I guess I'm still doing something wrong. If I use
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

I'm getting the exact same output as before. What are you getting? Can 
you post an example of your servers response?

Thank you so much.

Best

Lars

Am 13.01.2015 um 15:57 schrieb Eichner, Andreas - SID:
> 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