如何从Geoserver WMS获得Leaflet交互性?


12

我有geoserver将Shapefile作为WMS提供给Leaflet。

我想添加交互性,当用户将鼠标悬停或单击WMS功能时,它会在Leaflet映射中显示带有WMS属性的弹出窗口。

我已经看到了蜡/小叶的交互性,但是使用WMS和Leaflet可以吗?

Answers:


14

您应该尝试使用WMS GetFeatureInfo。这是Leaflet提供Bryan McBride 的示例。用于触发GetFeatureInfo请求的事件为onclick。


现在,我正在使用Geoserver Freemarker模板格式化GetFeatureInfo数据。关于传单悬停/鼠标悬停交互有什么想法?
zarbo 2011年

如示例中所示,您应该尝试更改传递给onMapClick函数的事件:第41行»map.addEventListener('click',onMapClick); 我认为您应该看一下文档页面: leaflet.cloudmade.com/reference.html。关于Geoserver freemarker模板,我从没有使用过,但是对我来说,发出WFS GetFeature请求更有意义,该请求要求将响应格式设置为GeoJson而不是WMS GetFeatureInfo。有了客户端的GeoJson对象,构建一个简单的HTML标记来显示要素数据要容易得多。
Pedro Mendes

抱歉。无法使用Leaflet制作GetFeature。:/即使您可以使用GeoJSON层达到相同的效果(该功能的属性已经可以在客户端访问)。但这就是我喜欢OpenLayers =)。
Pedro Mendes

嗨Zabro,您设法成功了吗?我想实现相同。您介意分享一些代码片段吗?
Pragnesh Patel 2014年

4
@PedroMendes不幸的是,该示例的链接已断开。你能更新一下吗?
ustroetz

4

我可以通过两种方式获得Leaflet交互性,具体取决于数据集的大小。我建议不要使用WMS getFeatureInfo,因为样式都是在服务器端设置的,这对配置很麻烦。所以,这是我的两种方式:

  1. 如果数据集很小,则将整个内容作为矢量加载(如果启用了CORS,则以JSONP或JSON的形式进行请求)。例如:https : //maps.gcc.tas.gov.au/dogexerciseareas.html和代码:https : //github.com/gccgisteam/maps-website/blob/master/dogexerciseareas.html
  2. 如果数据集很大,请执行onClick请求并返回附近要素的向量(使用JSON或JSONP)。示例:https//maps.gcc.tas.gov.au/stormwater.html和代码:https : //github.com/gccgisteam/maps-website/blob/master/stormwater.html

(该雨水示例比实际需要的要复杂一些,因为我更改了打开和关闭图层时图层是否是交互式的...)


请注意,WMS GetFeatureInfo现在可以返回JSON。
Alex Leith

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.