WMS的GetFeatureInfo用于通过屏幕坐标获取相应位置的要素信息,其效果就如同MapInfo或ArcView里的Info按钮,而通常WMS的GetFeatureInfo则是通过发送异步的请求完成的,通过GetFeatureInfo,我们在WMS上也可以获得要素的属性信息,这是非常有帮助的。
GetFeatureInfo需要如下几个参数:
-
- bbox: 当前视图的Bound,以地理坐标表示
- styles:当前视图的样式表信息
- format:当前视图的图象格式
- info_format:返回要数信息的格式,GeoServer支持GML、PlainText和HTML的返回,此外还可以通过Freemarker自定义模版
- request:请求类型,在此是getFeatureInfo
- layers:当前视图的图层
- query_layers:要查询getFeatureInfo的图层
- width:视图的宽度,以屏幕坐标表示,在GeoServer中必需是整型
- height:视图的高度,以屏幕坐标表示,在GeoServer中必需是整型
- x:要查询的屏幕坐标,整型
- y:要查询的屏幕坐标,整型
-
在Web上,OpenLayers对GetFeatureInfo实施了有效的封装,那么在Swing的JXMapKit上要想获得相同的效果则需要手动取得参数了,需要的参数包括bbox,width,height,x和y,这些参数都需要在事件触发时获得,因为视图的大小、位置随时都可能改变。
首先要给JXMapKit添加响应点击的事件,要注意的是,这个事件应该添加在一个JXMapViewer上,而不是JXMapKit本身。一个JXMapKit包含两个JXMapViewer,一个称为MainMap,是主视图,另一个称为MiniMap,即我们常说的鹰眼图。要捕捉点击事件,需要给MainMap添加一个鼠标事件的监听器,对于JXMapViewer来说,awt的MouseListener似乎没有作用,而应当使用swing的MouseInputAdapter。
接下来就需要计算各个坐标了。
首先最容易获取的是点击的屏幕坐标,通过MouseEvent的getPoint可以取得。
获取视图的宽高,通过JXMapViewer的getViewportBounds可以取得一个矩形,这个矩形的宽高就是视图的宽高,坐标都是采用屏幕坐标系,直接可以使用。
对于bbox,需要获得左下角和右上角的地理坐标。这需要通过TileFactory的pixelToGeo方法取得,分别将视图框矩形的minx,maxy和maxx,miny,以及当前视图的缩放级别(JXMapKit实例的getZoom方法)传入即可。
代码如下
@Override
public void mouseClicked(MouseEvent e) {
Point p = e.getPoint();
Rectangle r = map.getViewportBounds();
GeoPosition b1 = map.getTileFactory().pixelToGeo(new Point2D.Double(
r.getMinX(), r.getMaxY()), map.getZoom());
GeoPosition b2 = map.getTileFactory().pixelToGeo(new Point2D.Double(
r.getMaxX(), r.getMinY()), map.getZoom());
//....
}
用这些参数构造一个异步请求,发送即可。关于异步请求,swingx-ws有响应的封装,可以参考。
分享到:
相关推荐
wmts_getfeatureinfo_by_leaflet WMTS GetFeatureInfo by Leaflet Demo : : 添加 WMTS // 4326 //900913 Chồng lớp, phải dùng srid:900913 WMTS 获取特征信息 # WMTS ...LAYER=thuadat:view_duynghia_...
包括WMS由GUGiK提供的图层:土地记录的全国集成(还处理GetFeatureInfo请求),地形装备的全国集成,地形对象数据库的全国集成, 包含由于GUGiK的WMTS服务而提供的图层:高分辨率正射影像,BDOT10k内容可视化, ...
提供了WMS的三个基础性操作协议(GetCapabilities, GetMap和GetFeatureInfo)的详细规范说明,这些协议共同构成了利用WMS创建和叠加显示不同来源的远程异构地图服务的基础。
前端开源库-leaflet.wmsSpealet.wms,一个用于处理Web地图服务的Spealet插件,提供:单个平铺/未平铺/未平铺层、共享的wms源和GetFeatureInfo-powered Identify
铯演示回购用于试验CesiumJS功能和学习一些...注释/问题/ Todo: 不知道如何在不将WebMapServiceImageryProvider#enablePickFeatures设置为false情况下禁用内置的WMS GetFeatureInfo弹出框。 目前只隐藏.cesium-infoBox
leaflet.wms.jsLeaflet的多功能WMS插件。 非常适合平铺地图,但对WMS的支持有限。...特征“单块”自动更新WMS覆盖将单个服务器合成的图像用于来自同一来源的图层通过GetFeatureInfo图层识别拉请求欢迎!
初始提交,待办事项:最小比例/最大比例/分辨率,范围bbox,自动url修复,getlegendgraphic,getfeatureinfo等。 安装 git clone https://github.com/this_repository cd this_repository cp netconfig.json.example...
Time for action – using the GetFeatureInfo freemarker template 99 Using WMS Reflector 101 Time for action – using WMS Reflector 102 Summary 103 Chapter 5: Adding Your Data 105 Configuring your data ...
1 Introduction 3 1.1 Overview . . . . . . . . ....1.2 History ....1.3 Getting involved ....1.4 License ....2.1 Windows installer ....2.2 Windows binary ....2.3 Mac OS X installer ....2.4 Mac OS X binary ....