MS RFC 43:谷歌地图和虚拟地球API的直接瓷砖生成

日期

2008年4月8日

作者

保罗·拉姆齐

联系

加利福尼亚州克利夫雷普潘的普拉姆西

最后编辑

2008/05/02

状态

2008/04/29通过-完成

版本

地图服务器5.2

概述

在mapserv cgi中提供一个简单的访问API可以使使用mapserver和Google地图以及虚拟地球用户界面对新用户来说更加容易。

技术解决方案

gmaps api定义了一个gtilelayer,可以用作覆盖图或基础图。gtilelayer支持gtilelayer选项tileurltemplate,它允许使用简单的URL模式访问tilelayer,该模式将Google的x/y/z坐标替换为请求:

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

请参阅https://developers.google.com/maps/documentation/javascript/overview

对于MapServer,简单的URL模式为:

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

更改将在LoadForm函数中为模式、接口、版本、x、y和z参数添加新的处理。与WMS接口一样,GMAPSAPI将要求指定proj,并且要访问的所有层都定义了投影的存在。谷歌X/Y/Z坐标将转换为“球面墨卡托”坐标,并输入范围。

结果将使一个带有MapServer地图的谷歌变得像:

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

带有MapServer地图的虚拟地球如下所示:

var url = "http://host/cgi-bin/mapserv?";
    url += "map=/the.map&";
    url += "layers=parcels&";
    url += "mode=tile&";
    url += "tilemode=ve&";
    url += "tile=%4";
map = new VEMap("map");
map.LoadMap();
var tileSourceSpec = new VETileSourceSpecification( "myLayer", url );
tileSourceSpec.Opacity = 0.3;
map.AddTileLayer(tileSourceSpec, true);

TileMode为“gmap”的请求意味着:

  • “tile”参数的格式为:x y zoom

  • 输出CRS将设置为“球形墨卡托”(EPSG:900913)

  • 服务范围是全局的。顶部“缩放”级别(0)将有1个平铺。

  • “缩放”级别将从0向上运行

  • 瓷砖坐标的“Y”轴将从上到下运行

  • 瓷砖坐标的“X”轴将从左到右运行。

  • 输出瓷砖尺寸为256x256

  • 每个缩放级别将以两个幂与父级和子级相关

tilemode为“ve”的请求包含以下内容:

  • “tile”参数将使用ve tile编号方案,例如“0312”。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/bb545006.aspx。

  • 输出CRS将设置为“球形墨卡托”(EPSG:900913)

  • 服务范围是全局的。顶层将有4个瓷砖(0、1、2、3)。

  • 输出瓷砖尺寸为256x256

  • 每个缩放级别将以两个幂与父级和子级相关

MapServer平铺模式API将 not 明确尝试解决元贴或交叉贴标签的问题。但是,将采取以下步骤尽量减少这些问题:

  • 以后的阶段将渲染为比平铺稍大的目标,然后剪掉多余的边框像素。

MapScript含义

一个也没有。这只影响CGI接口和 MAPSERV公司 CGI。

受影响的文件

mapserv.c
maptile.c <new>
maptile.h <new>
  • 将更新文档以反映新功能

    • MAPServer CGI参考

    • mapserver tile howto<new>

  • 测试套件将被更新以使用新功能

    • Frank Warmerdam自愿这么做

向后兼容性问题

一个也没有。此功能是全新的,不需要更改现有行为。

臭虫识别码

投票历史

2008/04/29通过,史蒂文、丹尼尔姆、杰夫姆、史蒂文、汤克、佩里克森和阿塞法于+1。

工具书类