MS RFC 63: Built-in OpenLayers map viewer¶
- Date:
- 2010-09-25 
- Author:
- Daniel Morissette (dmorissette at mapgears.com) 
- Author:
- Alan Boudreault (aboudreault at mapgears.com) 
- Last Edited:
- 2010-10-26 
- Status:
- Adopted on 2010-10-29. Implementation complete. 
- Version:
- MapServer 6.0 
Overview¶
Users often request for a simple way to test mapfiles. This RFC proposes a simple way to preview, test and navigate a mapfile with MapServer using a built-in OpenLayers based map viewer that will be triggered via the cgi. This is for testing/development purposes only and not for production or deploying full-featured sites. This will use the a built-in openlayers template. It will return a simple html viewer based on OpenLayers.
Note that GeoServer already provides a similar functionality and this is what this RFC was inspired from.
Implementation Details¶
In order to implement this enhancement, the following changes should be made in the MapServer codebase:
- Add a built-in openlayers template. 
- Some new template tags will be needed. These tags will be used to construct the mapserver cgi url. - [mapserv_onlineresource] - or 
- [protocol] 
- [host] 
- [program] 
 - See ticket 3552 for more detail. 
The template will be triggered using one of the following ways:
- Using mode=browse&template=openlayers: The viewer will be initialized based on the mapfile defaults, and some of the traditional mapserv CGI params may also work (such as map size, layer selection, etc.) 
- Using FORMAT=application/openlayers in a WMS GetMap request: The rest of the GetMap parameters would be used to configure the map to view (BBOX, WIDTH, HEIGHT, LAYERS, etc.) 
Both cases would call the same functions internally to produce a simple OpenLayers viewer with one singletile layer for the whole map with the selected layers.
Here’s the simple viewer html code that could be used:
<html>
<head>
  <title>MapServer Simple Viewer</title>
    <script src="http://www.mapserver.org/lib/OpenLayers-ms60.js"></script>
    </head>
    <body>
      <div style="width:[mapwidth]; height:[mapheight]" id="map"></div>
      <script defer="defer" type="text/javascript">
        var map = new OpenLayers.Map('map',
                                     {maxExtent: new OpenLayers.Bounds([minx],[miny],[maxx],[maxy]),
                                      maxResolution: [cellsize]} );
        var mslayer = new OpenLayers.Layer.MapServer( "MapServer Layer",
            "[mapserv_onlineresource]",
             {layers: '[layers]'},
             {singleTile: "true", ratio:1} );
        map.addLayer(mslayer);
        map.zoomToMaxExtent();
      </script>
</body>
</html>
OpenLayers Dependency¶
Obviously, this functionality needs the OpenLayers javascript library. A minimal build will be used and hosted on the MapServer website at http://www.mapserver.org/lib/OpenLayers-ms60.js. The “ms60” suffix in the OpenLayers-ms60.js filename is so that we can increase the version number in the future if/when needed to match the requirements of future releases of MapServer.
Users will also be able to use their own OpenLayers library in one of two ways:
- Using a environment variable: by setting the environment variable MS_OPENLAYERS_JS_URL, MapServer will use that url rather than the default one. 
- Using a CONFIG setting in the mapfile: by adding the config variable MS_OPENLAYERS_JS_URL in a mapfile, MapServer will use that url rather than the default one. 
Files affected¶
To determine…
Further Considerations¶
In the future, we may provide a mechanism to support multiple frameworks and ship generic templates with MapServer.
Bug ID¶
The ticket for RFC-63 (containing the implementation) can be found here.
Ticket 3549
Ticket 3552
Voting history¶
Adopted on 2010-10-29 with +1 from SteveL, DanielM, JeffK, AssefaY, TomK, TamasS, SteveW and PerryN.














