`
Classicning
  • 浏览: 253648 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

在JXMapKit上实现GetFeatureInfo

    博客分类:
  • Tech
阅读更多
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有响应的封装,可以参考。
4
1
分享到:
评论
3 楼 houfeng0923 2011-05-24  

楼主,问个问题。除了geoserver这样完整的开源gis服务器,有没有开源的项目,只单独实现wms服务?(相对轻量级的,我只需要一个类似WMS中GetFeatureInfo功能的产品)。
2 楼 yjheeq 2009-12-07  
当然有了:
    public static DirectPosition2D worldToScreen(JMapPane mapPane, double x,
            double y) {
        AffineTransform tr = mapPane.getWorldToScreenTransform();
        DirectPosition2D mapPos = new DirectPosition2D(x, y);
        tr.transform(mapPos, mapPos);
        return mapPos;
    }

    public static DirectPosition2D screenToWorld(JMapPane mapPane, double x,
            double y) {
        AffineTransform tr = mapPane.getScreenToWorldTransform();
        DirectPosition2D mapPos = new DirectPosition2D(x, y);
        tr.transform(mapPos, mapPos);
        return mapPos;
    }
1 楼 xianglei 2009-05-03  
geotools有没有相关的方法把屏幕坐标转化为地图坐标的方法呢?谢谢

相关推荐

    wmts_getfeatureinfo_by_leaflet:WMTS GetFeatureInfo by Leaflet

    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_...

    30.(leaflet篇)leaflet实现wms服务面要素可点击.zip

    在本教程中,我们将深入探讨如何使用Leaflet库与Web Map Service (WMS) 集成,以实现地图上的WMS服务面要素的可点击功能。Leaflet是一款轻量级且强大的JavaScript库,用于创建交互式地图。WMS则是一种开放标准,允许...

    32.(leaflet篇)leaflet实现wms服务点要素可点击.zip

    在本教程中,我们将深入探讨如何使用Leaflet库在Web地图上实现WMS(Web Map Service)服务的点要素,并让这些要素具有可点击的功能。Leaflet是一个轻量级的JavaScript库,专为创建交互式的二维地图而设计,而WMS则是...

    VCmapx实现地图放大缩小等功能

    例如,`ZoomIn()`函数会使得地图上的每个单位面积在屏幕上占据更小的空间,从而实现放大效果;相反,`ZoomOut()`函数则会减小每个单位面积的显示大小,实现缩小效果。 其次,地图的移动(平移)功能是通过改变地图...

    WMS叠加并属性查询.rar_lastqol_wms叠加属性查询

    在WMS服务中,属性查询通常通过GetFeatureInfo请求来实现。这个请求会向服务器发送一个坐标点或一个矩形区域,服务器返回该点或区域内所有图层中符合查询条件的对象的属性信息。 在“WMS叠加并属性查询.html”这个...

    基于J2ME_MobileSVG的校园地图设计与实现

    MobileSVG作为一种开放的、基于XML的矢量图形格式,非常适合在无线网络上进行传输和显示。目前,MobileSVG已经应用于多个领域,例如在手机中显示交互式的SVG图片、动画等,以及用于基于位置的服务中,比如以手机作为...

    从WMS服务器获取信息1

    2. **GetFeatureInfo请求**:在WMS服务中,GetFeatureInfo请求是一种特殊类型的服务调用,它允许客户端获取地图上特定位置的特征信息。当用户点击地图上的某一点时,此请求会返回该点下方图层中的地理特征的相关属性...

    多源分布式CSW和WMS地理信息服务集成与互操作.pdf

    随着传感器技术的进步和多种对地观测网络、系统的建设,大量地理信息数据每天都在被获取,这些数据由不同的部门或机构管理,并存放在不同的服务器上,数据格式各异。为了实现地理信息资源的共享和广泛应用,需要对...

    使用OPENLAYERS3实现点选的方法

    在OpenLayers 3中,我们可以通过多种方式实现点击查询,包括Select 控制器、map 的 click 事件、WMS 图层的 GetFeatureInfo 等。 Select 控制器 Ol3 中的官网 demo 提供了一个 Select 控件,实现鼠标的选择查询。...

    World Wind Java配置WMS服务器

    jogl-1.1.1a-windows-i586.zip是Java OpenGL绑定,用于在Java应用程序中实现高性能的3D图形渲染。World Wind Java依赖于JOGL来显示其3D视图,因此确保正确安装并配置JOGL是至关重要的。 配置WMS服务器的步骤通常...

    Mapgis OGC接口

    GetCapabilities用于获取服务的能力描述,GetMap则返回地图图像,而GetFeatureInfo可以获取地图上特定位置的要素信息。在1.1.1版本的SLD WMS服务中,还包括了DescribeLayers、GetLegendGraphic、GetStyles和...

    WMS教程

    在实现层面,WMS服务器通常基于GIS软件或开发框架构建,如GeoServer、MapServer等,这些平台提供了丰富的工具和API,便于开发者快速搭建和管理WMS服务。同时,WMS也支持多种地图投影和坐标系统,如WGS84、Mercator等...

    GD_Geoserver.txt

    - 为了获取特定位置上的地理特征信息,可以通过发送OGC的GetFeatureInfo请求实现。 - 配置好请求参数,包括请求版本、请求类型、查询的图层名称、坐标系等信息。 - 使用Ajax发送HTTP GET请求至GeoServer WMS服务...

    javascript WMS客户端

    JavaScript WMS客户端是一种基于Web的地图服务技术,它允许开发者通过JavaScript在网页上显示地理空间数据。WMS(Web Map Service)是一种开放标准,由OGC(开放地理空间联盟)制定,用于提供网络上的地图图像。它使...

    OGC WMS(Web Map Service)网络地图服务 (吐血整理)

    GetFeatureInfo(可选)返回显示在地图上的某些特殊要素的信息。 WMS 请求方式支持标准 HTTP 中标准的 GET 请求和 POST 请求方式,但基本都是基于 GET 方式的服务请求。OGC 网络服务明确支持的唯一的分布式计算平台...

    Open Source WebGIS.ppt

    3. **基本地图功能**:在客户端或浏览器上实现地图的基本操作,如浏览、缩放、平移等。 4. **在线编辑与查询**:支持地图数据的在线编辑和查询功能,提高工作效率。 5. **拓扑信息处理**:能够存储和操作拓扑信息,...

    geoserver-2.16.2-vectortiles-plugin.zip

    - **效率提升**: 由于只传输必要的几何和属性数据,而不是预渲染的图像,客户端可以快速加载和展示地图,特别是在移动设备上。 - **可定制性增强**: 客户端可以根据需要决定如何渲染地图,包括颜色、样式、缩放...

    MAPGIS二次开发讲义

    二次开发是指在已有的GIS平台基础上,通过编程技术添加新的功能、优化界面或改进工作流程,以满足特定业务需求。MAPGIS的二次开发主要涉及地图显示控制、数据处理、空间分析等功能的定制。 1.2 VB与MAPGIS结合 VB是...

    OGC标准介绍.docx

    OGC 标准基本上就是 OGC 所有的成果,而所谓的标准就是一些接口或编码的技术文档。不同的厂商、各种 GIS 产品都可以对照这些文档来定义开放服务的接口、空间数据存储的编码、空间操作的方法等。 在 OGC 标准中,SFS...

Global site tag (gtag.js) - Google Analytics