MS RFC 123:支持mapserver中的mapml输出¶
- 作者
丹尼尔·莫里塞特
- 联系
- 状态
通过(2020-03-31)
- 最后更新
2020-03-31
- 版本
MapServer 8.0版
1。概述¶
在2019年部署Web映射站点的一种常见方法是使用Openlayers或传单作为导航界面在网页中嵌入JavaScript代码。如果通过javascript代码提供了正确的配置,那么这些javascript库可以与ogc wms和tile服务(以及其他ogc服务类型)交互。换句话说,映射内容、层列表、SRS、缩放级别、范围等被指定为javascript语句,然后由javascript库以Web浏览器本身无法“理解”的“自定义”方式呈现。
w3cmapsforhtml社区组正在努力定义一个(新的)“map”HTML元素,该元素将用于定义web页面中的地图内容,并由web浏览器以标准化的方式直接支持和呈现。所有这些都是通过建立现有的标准,如WMS、WFS和Tile服务来实现的。除了在web浏览器中对地图元素的编码和访问进行标准化之外,这种编码还旨在使地图内容更容易被web上的搜索机器人发现和索引。
规范草案可通过工作组获得,本RFC的目标是提供一个参考实现,以在实际的用例中测试规范草案,并促进其更广泛的使用。GeoServer也提供了类似的参考实现,我们将尽可能使这个实现与GeoServer实现保持一致。
该项目由加拿大自然资源局资助。
2。建议的解决方案¶
本RFC建议在MapServer中实现MapML输出,它包括两个部分:
为映射文件中的给定层生成<mapml>文档。这将作为特定于供应商的REQUEST=GetMapML扩展实现。
启用text/mapml作为WMS GetFeatureInfo请求的新INFO_格式,以及WFS GetFeature请求的新功能编码格式。
2.1构建/启用MAPML选项¶
如果启用了WMS支持,则默认情况下将启用MapML支持。可以在编译时使用以下CMake选项禁用它:
cmake。。-DWITH_MAPML=0
基本MapML支持不需要其他依赖项。
如果(可选)OGR MapML驱动程序可用,那么它将用于WMS GetFeatureInfo和WFS GetFeature响应中的增强文本/MapML输出(见下文第4.3节)。
2.2映射文件配置参数¶
由于MapML主要是一种引用OGC服务(WMS、WFS和tile服务)的机制,MapML实现自动利用现有的WMS和wfsmapfile配置参数来处理所服务的映射和层。
特别是,以下mapfile配置参数将影响MapML输出和行为:
ows_enable_requests :使用“*”或将“GetMapML”添加到请求列表中,以启用特定层的<mapml>输出(或在所有层的映射级别)
wms_getfeatureinfo_formatlist :将“text/mapml”添加到列表中,以对特定层启用文本/mapml格式的WMS GetFeatureInfo(或在映射级别为所有层启用)
wfs_getfeature_formatlist :将“text/mapml”添加到列表中,为特定层启用文本/mapml格式的WFS GetFeature(或在映射级别为所有层启用)
- ows_srs :在ows_SRS(或wms_SRS/wfs_SRS)元数据中指定的SRS代码列表控制将为<MapML>输出启用的MapML投影代码
EPSG:3857启用MapML投影OSMTILE
EPSG:3978启用MapML投影图块
EPSG:5936启用MapML投影窗
EPSG:4326和CRS:84启用MapML投影WGS84
还将支持其他特定于mapml的metada条目:
mapml_wms_link_rel :其中一个是“平铺”或“图像”。控制WMS是将URL模板输出为<link rel=“image”…>还是<link rel=“tile”…>。默认为“图像”。
mapml_wms_image_format :可用于指定用于给定WMS层的首选图像格式(例如image/png、image/jpeg)
TBD:在最终实现过程中,可以根据需要添加其他元数据条目。
2.4特定于供应商的GetMapML请求¶
已将MapWFS/Server类型的“map/A/service”组合添加到MapWFS/Server的“新请求”中。需要有效的WMS映射文件,并且请求支持以下URL参数:
名字 |
R/O公司 |
价值 |
---|---|---|
MAP |
R |
/path/to/mapfile.map |
SERVICE |
R |
注意:对其他服务类型(如MapCache xyz/tms/wmts引用)的支持可以在以后添加 |
REQUEST |
R |
获取映射ML |
LAYER |
R |
图层名 |
STYLE |
O |
WMS样式名称(默认情况下将使用空值) |
PROJECTION |
O |
OSMTILE、CBMTILE、APSTILE或WGS84之一,如果未指定,则默认为OSMTILE(根据规范) |
R/O:R=必需或O=可选
例子:
返回的MapML文档将包含请求的服务类型和层的URL模板以及所有必需的MapML<input>参数定义,以允许客户端查看器实现缩放/平移映射所需的逻辑,并在客户端自动生成新的GetMap(对于WMS)或GetFeature(对于WFS)。
备注
MapML规范没有定义GetMapML请求,因此这是一个特定于供应商的扩展,值得注意的是,在这个RFC中为GetMapML请求建议的行为与OGC Testbed 13中讨论的方法略有不同(https://docs.ogc.org/per/17-019.html)它需要客户端查看器为每个缩放/平移操作返回服务器以计算新的扩展数据块,并为每个操作返回一组静态图像或平铺URL。对于服务器来说,URL模板方法更容易实现,并将在查看器中产生更好的用户体验。
2.5 GetCapabilities更新¶
- 如果在映射文件中启用了MapML,则:
WMS GetCapabilities将包含对特定于供应商的GetMapML请求的引用,如果启用,text/mapml将作为GetFeatureInfo格式列出。
wfsgetcapabilities将包含对特定于供应商的GetMapML请求的引用,text/mapml将作为GetFeature格式列出。
2.6 MapML使用示例¶
在一个典型的用例中,web开发人员在一个web页面中包括一个<mm map>HTML元素,如下所示(本例使用了sleal polyfill查看器):
<html>
<head>
<title>MapServer MapML Demo</title>
<meta charset='utf-8'>
<script src="/mapml/viewer/bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
<link rel="import" href="/mapml/viewer/bower_components/web-map/web-map.html">
<style>
* {margin: 0;padding: 0;}
map { display: flexbox; height: 100vh;}
</style>
</head>
<body>
<mm-map is="web-map" projection="OSMTILE" zoom="5" lat="45" lon="-80" controls>
<layer- label="MapServer Demo WMS" src="http://localhost/cgi-bin/mapserv?map=/path/to/test.map&service=WMS&request=GetMapML&layer=layer1&style=&projection=OSMTILE" checked></layer->
</mm-map>
</body>
</html>
上面<mm map>元素中<layer->的src属性链接到一个<mapml>文档,该文档定义了映射内容(层、投影、查询url等)以及浏览器应该如何与它们交互。
在WMS的情况下,MapServer响应SERVICE=WMS&REQUEST=GetMapML返回的<mapml>文档如下所示:
<mapml>
<head>
<title>Demo WMS</title>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/mapml;projection=OSMTILE" />
</head>
<body>
<extent units="OSMTILE">
<input name="w" type="width" />
<input name="h" type="height" />
<input name="xmin" type="location" units="pcrs" position="top-left" axis="easting" min="-9.50126e+06" max="-7.57178e+06" />
<input name="ymin" type="location" units="pcrs" position="bottom-left" axis="northing" min="5.00048e+06" max="6.17829e+06" />
<input name="xmax" type="location" units="pcrs" position="top-right" axis="easting" min="-9.50126e+06" max="-7.57178e+06" />
<input name="ymax" type="location" units="pcrs" position="top-left" axis="northing" min="5.00048e+06" max="6.17829e+06" />
<link rel="image" tref="http://localhost/cgi-bin/mapserv?map=/path/to/test.map&SERVICE=WMS&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.3.0&LAYERS=layer1&STYLES=&WIDTH={w}&HEIGHT={h}&CRS=EPSG:3857&BBOX={xmin},{ymin},{xmax},{ymax}&m4h=t"/>
<input name="i" type="location" axis="i" units="map" min="0.0" max="0.0" />
<input name="j" type="location" axis="j" units="map" min="0.0" max="0.0" />
<link rel="query" tref="http://localhost/cgi-bin/mapserv?map=/path/to/test.map&SERVICE=WMS&REQUEST=GetFeatureInfo&INFO_FORMAT=text/mapml&FEATURE_COUNT=1&TRANSPARENT=TRUE&VERSION=1.3.0&LAYERS=layer1&STYLES=&QUERY_LAYERS=layer1&WIDTH={w}&HEIGHT={h}&CRS=EPSG:3857&BBOX={xmin},{ymin},{xmax},{ymax}&x={i}&y={j}&m4h=t"/>
</extent>
</body>
</mapml>
不要担心<mapml>文档的复杂性。它由MapServer自动生成并由查看器使用。它不是有意由人类产生的。
最后,当用户查询地图时,生成的WMS GetFeatureInfo或WFS GetFeature请求可以返回一个“text/mapml”功能集合响应,如下所示:
<mapml>
<head>
<title>GetFeatureInfo Results</title>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/mapml" />
</head>
<body>
<extent />
<feature id="pop_place.1696" class="pop_place">
<properties>
<table>
<thead>
<tr>
<th role="columnheader" scope="col">Property Name</th>
<th role="columnheader" scope="col">Property Value</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">pname_en</th>
<td itemprop="pname_en">Ottawa</td>
</tr>
</tbody>
</table>
</properties>
</feature>
</body>
</mapml>
三。实施细节¶
大多数MapML支持代码都在MapML.c中,钩子从mapwms.c和mapwfs.c调用它。
将添加一组msautotests来测试新特性。
4限制/注意事项¶
4.1 MapML查看器Polyfill¶
由于目前web浏览器中没有对MapML的直接支持,所以在web页面中使用MapML polyfill(基于说明书)是必需的。更多详细信息将在文档中提供。
4.2实验规范¶
这个参考实现应该被认为是实验性的,因为MapML规范本身仍然是w3cmapsforhtml社区组正在进行的工作。规范很可能会随着时间的推移而改变,直到正式版本被采用,在部署服务时应该记住这一点。
我们也鼓励您参与进来,并通过加入位于的Maps for HTML社区组来提供反馈社区www.tms4hl//
大多数实现都在一个mapml.c源文件中,因此如果这个扩展名不再使用或不受支持,那么在将来的版本中可以相对容易地将其从源代码库中删除。
4.3 WMS GetFeatureInfo和WFS GetFeature输出¶
在最初的实现中,WMS GetFeatureInfo查询将只生成一个基本的属性表响应,而不包含几何体,例如适合在地图上的弹出窗口中使用。
在第二个工作阶段,将实现OGR<mapml>驱动程序,一旦可用,MapServer将升级为使用此OGR驱动程序,以响应WMS GetFeatureinfo和WFS GetFeature请求,以将此OGR驱动程序用于文本/mapml要素集输出格式。这将引入对这个OGR驱动程序的依赖,以获得完整的特性集合支持,但是如果没有驱动程序,MapML代码的其余部分仍然可以工作。
5.向后兼容性问题¶
因为这是一个新特性,所以没有人预料到。
6。安全隐患¶
目前没有人预料到。
7。性能影响¶
预计不会对核心性能产生影响。
8。文档需求¶
将添加一个新的文档页面,概述各种MapML输出配置场景和参数(例如ogcwms服务器页面的样式)。
本课程还将提供一个循序渐进的例子,包括如何在服务器上部署传单查看器polyfill以及如何在网页中使用它。
9。票据ID和参考¶
HTML社区组的W3C地图:https://www.w3.org/community/maps4html/
超文本标记语言社区组资源的地图页面:https://maps4html.github.io/
Html<map>元素规范:https://maps4html.org/HTML-Map-Element/spec/
地图标记语言(MAPML)规范:https://maps4html.org/MapML/spec/
mapml规范github存储库:https://github.com/maps4html/mapml
GeoServer MapML支持文档:https://docs.geoserver.org/latest/en/user/community/mapml/index.html
OGC试验台-13映射器:https://docs.ogc.org/per/17-019.html
10。投票历史¶
PSC成员EvenR、SethG、JeromeB、Michaels、JukkaR、TomK、JeffM、SteveL、DanielM以+1通过。