Hi Steve,

I really appreciate that you took this effort! In the meantime (after I wrote my question to you), Andreas has come up with a more direct solution and since we will have quite some traffic on the server I expect we will need every bit of performance. So I guess we will not use templates after all. Anyway, it's great how people on this list respond with different good solutions and suggestions! Thank you!

Best

Lars

Am 14.01.2015 um 00:41 schrieb Lime, Steve D (MNIT):
Hi Lars: Most of what you need was in my last reply. Those are snippets from a 
working configuration. Here's a simple JSON template for a raster query that 
creates an array of xyz objects:

// MapServer Template
{'result':{
   'points':[
[resultset layer="elev_dem30ra3"]
   [feature trimlast=","]{x:[x], y:[y], z:[value_0]},[/feature]
[/resultset]
   ]
}}

You could turn this into JSONP and not use the include strategy (I wanted both JSON and 
JSONP) simply by wrapping the object in callback (callback is a value passed through 
MapServer, e.g. &mode=query&callback=foo):

// MapServer Template (jsonp.js)
[callback]({'result':{
   'points':[
[resultset layer="elev_dem30ra3"]
   [feature trimlast=","]{x:[x], y:[y], z:[value_0]},[/feature]
[/resultset]
   ]
}})

and here's the corresponding OUTPUTFORMAT block:

OUTPUTFORMAT
   NAME 'JSONP'
   DRIVER 'TEMPLATE'
   MIMETYPE 'application/json;'
   FORMATOPTION 'FILE=templates/jsonp.js'
   FORMATOPTION 'ATTACHMENT=service.json'
END

Regarding speed, templates are going to be a bit slower since there are 
generally two passes through the data, once to identify the candidate records 
and a second for presentation. Also the template assembly is done in memory so 
there are limits on how large of datasets you can practically work with. How 
big a deal this is depends on your situation. It's not perfect but in general 
I've had great luck with this approach.

Steve

-----Original Message-----
From: mapserver-users-boun...@lists.osgeo.org 
[mailto:mapserver-users-boun...@lists.osgeo.org] On Behalf Of Lars Fricke
Sent: Friday, January 09, 2015 4:24 AM
To: mapserver-users@lists.osgeo.org
Subject: 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-boun...@lists.osgeo.org
[mailto:mapserver-users-boun...@lists.osgeo.org] On Behalf Of Lars
Fricke
Sent: Monday, December 29, 2014 5:34 AM
To:mapserver-users@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@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapserver-users
_______________________________________________
mapserver-users mailing list
mapserver-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapserver-users

_______________________________________________
mapserver-users mailing list
mapserver-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapserver-users
_______________________________________________
mapserver-users mailing list
mapserver-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapserver-users


_______________________________________________
mapserver-users mailing list
mapserver-users@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapserver-users

Reply via email to