[mapserver-dev] RFC: GMaps API for mapserv

Paul Ramsey pramsey at cleverelephant.ca
Fri Apr 11 19:32:18 EDT 2008


One last revision.  Note that there are now only two new parameters
(tilemode, tile) and one new mode (tile). There is one magic word
(tilemode=spheremerc) but another magic word (tilemode=longlat) could
be added easily enough.  Chris assures me that GMap/VE/Yahoo/OSM all
use the same spheremerc tiling scheme, so this one API should serve a
multitude of front-ends easily enough.

Thanks for your patience all.

P.
-------------- next part --------------
======================================================
MS RFC XX: Direct tile generation for Google Maps API
======================================================

:Date: 2008/04/08
:Author: Paul Ramsey
:Contact: pramsey at cleverelephant.ca
:Last Edited: 2008/04/09
:Status: Open

Overview
--------

Using Mapserver to render data for use within alternate mapping systems is a growing use case.  A new access API could allow Google Maps users to overlay Mapserver data very simply and accurately.  Like the WMS API, the GMaps API will allow users to have a simple install'n'run option for serving data to a de facto standard user interface.

Technical Solution
------------------

The GMaps API defines a GTileLayer which can be used as an overlay or base map.  The GTileLayer supports a GTileLayerOption, tileUrlTemplate, which allows the TileLayer to be accessed using a simple URL pattern that substitutes Google's x/y/z coordinates into the request::

 http://host/tile?x={X}&y={Y}&z={Z}.png

See http://code.google.com/apis/maps/documentation/reference.html#GTileLayer

For Mapserver, the simple URL pattern will be::

 http://host/cgi-bin/mapserv?map=/the.map&layers=foo,bar&mode=tile&tilemode=spheremerc&tile={X}+{Y}+{Z}

The change will add in new handling in the loadForm function for the mode, interface, version, x, y and z parameters.  Like the WMS interface, GMaps API will require PROJ to be specified, and the existence of PROJECTION defines for all layers being accessed.  Google X/Y/Z coordinates will be converted to "spherical mercator" coordinates and fed into the extent. 

The result will make a Google-with-Mapserver map as easy as::

 var myLayer = new GTileLayer(null,null,null,{ 
  tileUrlTemplate: ' http://host/cgi-bin/mapserv?map=/the.map&layers=foo,bar&mode=tile&tilemode=spheremerc&tile={X}+{Y}+{Z}', 
  isPng:true, 
  opacity:0.5 }); 
 var map = new GMap2(document.getElementById("map")); 
 map.addOverlay(new GTileLayerOverlay(myLayer)); 

A tile mode with interface of gmap implies the following:

* The output CRS will be set to "spherical mercator" (EPSG:900913)
* The service bounds be global in extent. The top level (0) will have 1 tile.
* The "levels" will run from 0 upwards
* The y axis of the tile coordinates will run from top to bottom
* The output tiles will be 256x256 in size
* Each zoom level will be related to parent and children by powers of two

The Mapserver tile mode API will *not* explicitly attempt to address issues of meta-tiling or cross-tile labeling. However, the following steps will be taken to try to minimize these issues:

* If PARTIALS is not set in labeling directives, it will be turned on automatically.
* PROCESSING LABEL_NO_CLIP will be turned on automatically.
* Future phases will render into a target slightly larger than the tile and then clip off the extra border pixels.

Mapscript Implications
----------------------

None. This affects only the CGI interface and mapserv CGI.

Files Affected
--------------

::

 mapserv.c
 maptile.c <new>

* Documentation will be updated to reflect the new feature
  * Mapserver CGI Reference
  * Mapserver Tile HOWTO <new>
* Test suite will be updated to exercise the new features
  * Frank Warmerdam has volunteered to do this

Backwards Compatibility Issues
------------------------------

None. This functionality is net new and requires no changes to existing behavior.

Bug ID
------

None yet.

Voting History
--------------

No vote yet.

References
----------

* http://code.google.com/apis/maps/documentation/reference.html#GTileLayer
* http://www.worldwindcentral.com/wiki/TileService


More information about the mapserver-dev mailing list