dBox with mode=itemquery or itemnquery
Richard Greenwood
richard.greenwood at GMAIL.COM
Tue Aug 29 19:10:45 PDT 2006
Trond,
Nice stuff. Thanks for sharing it. I was just looking at JSON a couple
dyas ago so it is quite timely.
Rich
> I know this is a bit of an old message, but I thought I'd just say
> that I've just started using JSON in my templates, and I'm very
> satisfied with how it works.
>
> In this case, the template would look something like this:
>
> {
> img: '[img]',
> shp: [ [shpminx], [shpminy], [shpmaxx], [shpmaxy] ],
> queryfile: '[queryfile]'
> }
>
> And my function to parse the template looks like this:
>
> AJAX_getMapObject = function (content) {
> var mapobj;
> try {
> var code = "(// " + content + ")";
> mapobj = eval(code);
> } catch (e) {
> alert("eval failed: " + e.message);
> }
> if (typeof mapobj == "undefined") {
> alert("Could not create mapobject:\n" + req.responseText);
> }
> return mapobj;
> };
>
> You invoke it with the responseText from the XMLHttpRequest-object, like this:
>
> var result = AJAX_getMapObject(req.responseText);
>
> and the variables are now available as properties on result:
>
> var img = result.img;
> var shpminx = result.shp[0];
>
> etc.
>
>
> I also use this on the main requests (i.e. when the user zooms or pans
> the map), and that template looks like this:
>
> // start template
> {
> mapserver: {
> version: '[version]',
> id: '[id]',
> host: '[host]',
> port: '[port]',
> errmsg: decodeURIComponent('[errmsg_esc]')
> },
> image: {
> center: '[center]',
> center_x: '[center_x]',
> center_y: '[center_y]',
> mapsize: '[mapsize]',
> mapwidth: '[mapwidth]',
> scale: '[scale]',
> cellsize: '[cellsize]'
> },
> file: {
> img: '[img]',
> ref: '[ref]',
> legend: '[legend]',
> scalebar: '[scalebar]',
> queryfile: '[queryfile]',
> map: '[map]'
> },
> map: {
> mapx: '[mapx]',
> mapy: '[mapy]',
> maplon: '[maplon]',
> maplat: '[maplat]',
> dx: '[dx]',
> dy: '[dy]',
> mapext: [ [minx], [miny], [maxx], [maxy] ],
> rawext: [ [rawminx], [rawminy], [rawmaxx], [rawmaxy] ],
> mapext_latlon: [ [minlon], [minlat], [maxlon], [maxlat] ],
> refext: '[refext]'.split(' '),
>
> mapext_str: '[mapext]',
> rawext_str: '[rawext]',
> mapext_latlon_str: '[mapext_latlon]',
> refext_str: '[refext]'
> },
> layer: {
> layers: decodeURIComponent('[layers_esc]').split(' '),
> toogle_layers: decodeURIComponent('[toggle_layers_esc]').split(' ')
> },
> }
> // end template
>
> With this template, I get an object that contains all the variables
> that are available from mapserver (except the dynamic ones, of course,
> but as far as I can tell, those are only necessary in a completely
> javascript-free application.
>
> I'm using decodeURIComponent() combined with the _esc-variant of the
> variables that could contain ', to prevent syntax errors during eval().
>
> --
> Trond Michelsen
>
--
Richard Greenwood
richard.greenwood at gmail.com
www.greenwoodmap.com
More information about the MapServer-users
mailing list