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