MS RFC 63:内置Openlayers地图查看器¶
- 日期
2010-09-25
- 作者
丹尼尔·莫里塞特(dmorissette at mapgears.com)
- 作者
Alan Boudreault(aboudreault,位于mapgears.com)
- 最后编辑
2010-10-26
- 状态
2010-10-29通过。完成实施。
- 版本
MAPServer 6
概述¶
用户通常要求使用一种简单的方法来测试 Mapfile 。此RFC建议 simple 使用内置的基于Openlayers的地图查看器(将通过CGI触发)预览、测试和导航 Mapfile 的方法。这仅用于测试/开发目的,不用于生产或部署全功能站点。这将使用内置的 openlayers 模板。它将返回一个基于Openlayers的简单HTML查看器。
注意,geoserver已经提供了类似的功能,这就是这个RFC的灵感来源。
实施细节¶
为了实现此增强,应在MapServer代码库中进行以下更改:
添加内置 openlayers 模板。
需要一些新的模板标记。这些标记将用于构造MapServer CGI URL。
[mapserv_onlineresource]
or
[议定书]
[主持人]
[程序]
见 ticket 3552 更多细节。
将使用以下方法之一触发模板:
使用 模式=浏览&模板=开放层: 查看器将基于mapfile默认值进行初始化,一些传统的mapserv cgi参数也可以工作(如地图大小、图层选择等)。
使用 FORMAT=application/openlayers 在wms getmap请求中:其余getmap参数将用于配置要查看的地图(bbox、宽度、高度、图层等)。
这两种情况都会在内部调用相同的函数,以生成一个简单的Openlayers查看器,其中为带有选定层的整个地图生成一个单平铺层。
下面是可以使用的简单查看器HTML代码:
<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依赖项¶
显然,这个功能需要Openlayers JavaScript库。将使用最小的构建并托管在MapServer网站http://www.mapserver.org/lib/openlayers-ms60.js上。openlayers-ms60.js文件名中的“ms60”后缀使我们可以在将来需要时增加版本号,以满足未来版本的mapserver的要求。
用户还可以通过以下两种方式之一使用自己的Openlayers库:
使用环境变量:通过设置环境变量ms_openlayers_js_url,mapserver将使用该URL而不是默认的URL。
使用mapfile中的配置设置:通过在mapfile中添加配置变量ms_openlayers_js_url,mapserver将使用该URL而不是默认的URL。
受影响的文件¶
确定…
进一步考虑¶
在将来,我们可能会提供一种机制来支持多个框架,并将通用模板与MapServer一起发送。
投票历史¶
2010年10月29日,史蒂文、丹尼尔、杰夫克、阿塞法伊、汤克、塔玛斯、史蒂文和佩林通过+1。