[mapserver-users] Re: interesting thread on JSON-ish output from MapServer

Mr. Puneet Kishor punk.kish at gmail.com
Sun Sep 11 10:36:56 EDT 2011


Partial solution (phew, for now), but other problems persist --

(cc-ing to Steve Lime and Rich Greenwood)

On Sep 10, 2011, at 11:42 PM, Mr. Puneet Kishor wrote:

> [http://osgeo-org.1803224.n2.nabble.com/GeoJSON-output-from-MapServer-td3188987.html]
> 
> If I call my template "template.html" I get the output, but I get mime type warning and a syntax error in parsing the output.

The above is now partially solved. I still get the mime type incorrectly set, but the syntax error was my mistake. However, it is something worthy of being documented. I was making a JSONP (cross-domain) call. Hence, the response coming back should have been wrapped in the callback as an argument. Since I am stuck using CGI for now, I don't know if I can get MapServer to recognize the callback param that is randomly generated by jQuery, and use that in the template. So, I prescribed a custom callback, and used that in the template.

Before (doesn't work with JSONP)
---------------------------------
$.ajax({
	url		: url,
	type	: "GET",
	data	: "",
	dataType: "jsonp",
	error	: function() { alert("Error loading html document"); },
	success : function(r) { .. }
});

// mapserver template
{"gid":"[gid]","unit":"[unit_abbre]","rock type":"[rocktype]","lithology":"[lithology]","min age":"[min_age]","max age":"[max_age]","interval":"[interval_name]"}

After (works fine, note addition of "jsonpCallback" in the request)
-------------------------------------------------------------------
$.ajax({
	url		: url,
	type	: "GET",
	data	: "",
	dataType: "jsonp",
	jsonpCallback: "foo",
	error	: function() { alert("Error loading html document"); },
	success : function(r) { .. }
});

// mapserver template
foo({"gid":"[gid]","unit":"[unit_abbre]","rock type":"[rocktype]","lithology":"[lithology]","min age":"[min_age]","max age":"[max_age]","interval":"[interval_name]"})


One issue I have not solved -- if no result is found, MapServer sends back the following --

----
<HTML>

<HEAD><TITLE>MapServer Message</TITLE></HEAD>

<!-- MapServer version 6.0.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=ICONV SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=GEOS INPUT=POSTGIS INPUT=GDAL INPUT
=SHAPEFILE -->

<BODY BGCOLOR="#FFFFFF">

msQueryByPoint(): Search returned no results. No matching record(s) found.

</BODY></HTML>
----


Well, that gums up the works. I really want MapServer to just send an empty JSON structure, something like foo({}). Suggestions on how I can prevent this HTML message from MapServer, and force it to use the template instead?


> 
> If I rename the template "template.json" MapServer complains that the name is malformed.


This one is interesting. Per Steve Lime's email earlier today, "Issue 1: only certain extensions can be used for templates. I believe .js is legal but .json is not. We could change that in future releases. Could you file a ticket?" Yet, the docs at [http://mapserver.org/output/template_output.html] very clearly mention the use of ".json" as a file extension. I quote

> OUTPUTFORMAT
>   NAME "geojson"
>   DRIVER "TEMPLATE"
>   FORMATOPTION "FILE=myTemplate.json"
> END


Fwiw, I using `NAME "geojson"` as above in my `OUTPUTFORMAT` block, but I am returning just plain vanilla JSON. If I change the "NAME" to "json", I get back an unprocessed template.

> 
> If I rename the template "template.js" MapServer complains that it is "Unable to access file"

".js" being legal notwithstanding, the fact is, if I change my template.html to template.js, MapServer errors with the above complaint "Unable to access file," whatever that means. Exactly the same file, same file mode, everything identical, just the name change.


> If I add `qformat=geojson` to my query (as shown in the link above), the output contains the template with the place holders, no substitutions with the values.

This is even more bizarre -- per the email thread at [[http://osgeo-org.1803224.n2.nabble.com/GeoJSON-output-from-MapServer-td3188987.html], it seems from Steve's comment that `qformat=geojson` is a valid query param (although I don't see it documented anywhere). Yet, if I add that, I get an unprocessed template.


> 
> What gives?



More information about the mapserver-users mailing list