Sent from my iPad

On Sep 11, 2011, at 9:36 AM, Mr. Puneet Kishor <[email protected]> wrote:

> 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.
> 

Correct, .json is not a valid extension.

> 
> 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
> 

The docs/example is wrong or doesn't match the source anyway. The set of legal 
extensions is defined in mapserver.h and .json is not included. A ticket would 
help make sure we get that fixed.

> 
> 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"
> 

Does the file exist? There's nothing cryptic about the error message. 

> ".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.
> 

I'd need to see the whole mapfile. It sounds like you might be mixing new and 
old-style template definitions which I would discourage. 

> 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?
> 

Note there are no predefined template drivers, so if you give it a qformat 
value that doesn't reference anything valid you should get an error but exactly 
what that is depends on the way you have errors configured in the web object.

Steve_______________________________________________
mapserver-users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapserver-users

Reply via email to