图像映射¶
HTML图像映射已经用了很长时间以一种轻松的方式创建交互式图像。不使用flash、svg或vml,您只需将不同的链接或工具提示关联到图像的不同区域。为什么我们不能使用这种技术在地理服务器地图上实现相同的结果呢?其想法是将栅格图(png、gif、jpeg等)与HTML图像映射覆盖相结合,以向映射添加链接、工具提示或鼠标事件行为。
向地图添加工具提示的ImageMap示例:
<img src="..." usemap="#mymap"/>
<map name="mymap">
<area shape="poly" coords="536,100 535,100 534,101 533,101 532,102" title="This is a tooltip"/>
<area shape="poly" coords="518,113 517,114 516,115 515,114" title="Another tooltip"/>
</map>
向地图添加链接的图像地图示例:
<img src="..." usemap="#mymap"/>
<map name="mymap">
<area shape="poly" coords="536,100 535,100 534,101 533,101 532,102" href="http://www.mylink.com"/>
<area shape="poly" coords="518,113 517,114 516,115 515,114" href="http://www.mylink2.com"/>
</map>
在鼠标事件上添加交互行为的更复杂示例:
<img src="..." usemap="#mymap"/>
<map name="mymap">
<area shape="poly" coords="536,100 535,100 534,101 533,101 532,102" onmouseover="onOver('<featureid>')" onmouseout="onOut('<featureid>')"/>
<area shape="poly" coords="518,113 517,114 516,115 515,114" onmouseover="onOver('<featureid>')" onmouseout="onOut('<featureid>')"/>
</map>
为了在geoserver中实现这一点,一些重要的社区贡献者开发了一个用于geoserver的htmlimagemap getmaproducer,能够响应wms getmap请求呈现htmlimagemap。
getmapProducer与text/html mime类型关联。对于每个请求的层,它生成一个包含层几何图形的<map>…<map>部分,作为distinct<area>标记。由于<area>标记支持的形状类型的限制,单个几何图形可以拆分为多个几何图形。这样,几乎任何复杂的几何图形都可以渲染为简单的几何图形。
为了添加交互属性,我们使用样式。特别是,包含带有标签定义的文本符号的SLD规则可用于为<area>标记属性定义动态值。规则名将用作属性名。
例如,要定义标题属性(将工具提示与层的几何图形关联),可以使用如下规则:
<Rule>
<Name>title</Name>
<TextSymbolizer>
<Label><PropertyName>MYPROPERTY</PropertyName></Label>
</TextSymbolizer>
</Rule>
要呈现多个属性,只需定义多个具有不同名称(href、onMouseOver等)的规则。
样式支持不限于文本符号,您当前可以使用其他符号来详细说明<area>rendering。例如,您可以:
使用具有大小属性的点符号来定义点大小。
使用线条符号和笔划宽度cssparameter创建粗线条。