[mapserver-dev] Canvas support for MapServer

Brent Fraser bfraser at geoanalytic.com
Tue Jan 27 10:07:32 EST 2009


Jan,

  So your thought is to have MapServer generate something like (hacked from the example on https://developer.mozilla.org/en/Canvas_tutorial/Basic_usage):

<!-- --- Mapserver Header Template Generated: --- -->
<html>
 <head>
  <script type="application/x-javascript">
    function draw() {
      var canvas = document.getElementById("canvas");
      if (canvas.getContext) {
        var ctx = canvas.getContext("2d");

        // ------ Mapserver Generated on map request: ------
        ctx.fillStyle = "rgb(200,0,0)";
        ctx.fillRect (10, 10, 55, 50);
        ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
        ctx.fillRect (30, 30, 55, 50);

        // ------ Mapserver Footer Template Generated: --- -->
      }
    }
  </script>
 </head>
 <body onload="draw();">
   <canvas id="canvas" width="150" height="150"></canvas>
 </body>
</html>

Sure, it could be done.  One way is to write another output driver for Mapserver.  Another is to use some server-side scripting to ingest Mapserver's SVG and change into JavaScript-canvas code like that above. A performance hit, but at least it would be on the server side, and it might be a good way to prototype the Mapserver driver.

Brent

Jan Hartmann wrote:
> Hi Brent,
> 
> First let me say that Canvas support is just an idea; I think it can be 
> done but whether it is advisable to do so is up to you to decide. I 
> liked the idea because the Canvas element is supported nowadays by most 
> browsers, unlike SVG which needs a plugin. It is also much simpler, so 
> it's easier to use for simple maps, and especially for simple 
> interactive operations like digitizing, or combining server-side with 
> client-side graphics. That's why I would prefer Canvas above SVG, let 
> alone the fact that I much prefer to program in native Javascript above 
> parsing XML. Most of my maps are simple (I would guess that goes for 
> many people here), so SVG is decidedly overkill. The Canvas HTML element 
> also fits nicely in the page layout and can be processed easily by 
> web-editors.
> 
> Your suggestion that Canvas could be implemented at the client side by 
> catching SVG output and transforming it into Canvas directives is 
> certainly viable. That is also Paul Spencer's view in his reply to my 
> email.  Yet I would prefer a server-side approach: it's more efficient 
> (no second parsing of SVG code that had to be generated in the first 
> place), and I think the server-side code can be easily adapted from the 
> SVG driver. Canvas is a very simple format, just a few graphic 
> primitives, more like GD than SVG actually.
> 
> Again, I don't know how difficult it would be to add a Canvas 
> outputformat, and whether it fits at all into the MapServer design 
> philosophy. However, when it could be done, it would give me an a far 
> more easier tool than SVG  to combine server-side and client-side mapping.
> 
> Jan
> 
> Brent Fraser wrote:
>> Jan,
>>
>>  My interest is in building a (or re-purposing an existing) tool for 
>> Cartographic Layout, for printing or rendering a graphics format for 
>> easy viewing (e.g. PDF).  Steve's comments were about using existing 
>> Web formats and syntax to describe the layout, and existing(?) web 
>> editors to do the placement/moving of the layout components.
>>
>>  My (very limited) understanding of the <canvas> HTML tag is that it's 
>> a "container" recognized by the browser, and vector (and raster) 
>> graphics are rendered into it using client-side JavaScript.  Sort of 
>> the JavaScript equivalent of the SVG format.
>>
>>  It would be possible to add another output format to Mapserver to 
>> generate JavaScript code of canvas rendering methods, but a more 
>> elegant approach might be to write a small(?) JavaScript module to 
>> ingest Mapserver's SVG and render the objects to the canvas.
>>
>>  Are there some specific features of the direct-canvas-output approach 
>> not available in SVG that you need?
>>
>> Brent Fraser
>>
>>
>> Jan Hartmann wrote:
>>> Hi folks,
>>>
>>> A few weeks ago I suggested in a thread about PDF support that 
>>> Mapserver could perhaps be made to support the new "Canvas" tag. 
>>> There were no reactions to this, so I don't know if this suggestion 
>>> is viable/advisable/practicable, or just downright stupid. Can anyone 
>>> comment? (from 
>>> http://lists.osgeo.org/pipermail/mapserver-dev/2009-January/008055.html)
>>>
>>>> I am wondering if MapServer support for the "Canvas" tag could do 
>>>> what Steve suggests in a more simple way. Originally, only Safari, 
>>>> Opera and Firefox supported this tag to allow (simple) 2D drawing, 
>>>> but recently a surprisingly simple Javascript interface for IE has 
>>>> become available, translating Canvas command to native IE VRML 
>>>> commands. It requires just one single script tag in the web page.
>>>>
>>>> See the tutorial at the Mozilla site at: 
>>>> https://developer.mozilla.org/en/Canvas_tutorial
>>>> and the IE interface (from the Google stables) at: 
>>>> http://excanvas.sourceforge.net/
>>>>
>>>> This is something I have long been looking for. The graphics are 
>>>> very simple, so the functionality is nothing like PDF or SVG, but I 
>>>> could imagine that a driver for MapServer could fulfill many needs. 
>>>> I can use it already by letting Mapserver generate raw coordinates 
>>>> and catching them with some sort of Ajax, but a separate driver 
>>>> would be very neat of course.
>>>>
>>>> How about it?
>>>>
>>>> Jan
>>>>
>>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> mapserver-dev mailing list
>>> mapserver-dev at lists.osgeo.org
>>> http://lists.osgeo.org/mailman/listinfo/mapserver-dev
>>
> 


More information about the mapserver-dev mailing list