[mapserver-dev] RFC: GMaps API for mapserv
Paul Ramsey
pramsey at cleverelephant.ca
Fri Apr 11 00:48:27 EDT 2008
All,
Attached find a revised RFC, per some of the feedback I have received.
I am a little loath to give up the simpler URL syntax from the
previous RFC (one new mode, one new parameter) so I would like to hear
back if you feel the gains in "futureness" outweigh the simplicity of
the first draft. YAGNI says I should just do the Google version and
let the future take care of itself.
Paul
-------------- 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 prototyped from the Worldwind tile service form::
http://host/cgi-bin/mapserv?map=/path/to/amp&mode=tile&interface=gmap&version=1&x={X}&y={Y}&level={Z}&layers=foo,bar
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=/path/to/amp&mode=tile&interface=gmap&version=1&x={X}&y={Y}&level={Z}&layers=foo,bar',
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.
* 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