在JXMapKit上实现GetFeatureInfo
WMS的GetFeatureInfo用于通过屏幕坐标获取相应位置的要素信息,其效果就如同MapInfo或ArcView里的Info按钮,而通常WMS的GetFeatureInfo则是通过发送异步的请求完成的,通过GetFeatureInfo,我们在WMS上也可以获得要素的属性信息,这是非常有帮助的。 GetFe...
- 作者:javaeye来源:javaeye|2010年10月03日
WMS的GetFeatureInfo用于通过屏幕坐标获取相应位置的要素信息,其效果就如同MapInfo或ArcView里的Info按钮,而通常WMS的GetFeatureInfo则是通过发送异步的请求完成的,通过GetFeatureInfo,我们在WMS上也可以获得要素的属性信息,这是非常有帮助的。
GetFeatureInfo需要如下几个参数:
在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方法)传入即可。
代码如下
用这些参数构造一个异步请求,发送即可。关于异步请求,swingx-ws有响应的封装,可以参考。
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());
- //....
- }
@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有响应的封装,可以参考。
上一篇:OpenLayers项目分析
下一篇:没有了!