http://www./blog/post/454.html
目标:在浏览器中点击一个地图要素(绝大多数情况下仅限于多边形)立刻得到该要素的属性信息。在Web端获得要素的信息通常情况下有两种方法可以使用,一是WMS的GetFeatureInfo,另一个是WFS的GetFeature。 事实上WMS不仅仅可以用GetMap请求获得地图,还可以用GetFeatureInfo请求来直接获取Feature的属性。尽管在OGC WMS1.3.0的标准规范中,GetFeatureInfo是一个Optional的功能,不过GeoServer还是实现了这项功能。下面是GeoServer例子中用OpenLayers获得属性信息的方法: imap.events.register('click',imap,function(e){ var url = imap.layers[0].getFullRequestString({ REQUEST: "GetFeatureInfo", EXCEPTIONS: "application/vnd.ogc.se_xml", BBOX: imap.getExtent().toBBOX(), X: e.xy.x, Y: e.xy.y, INFO_FORMAT: 'text/plain', QUERY_LAYERS: imap.layers[0].params.LAYERS, FEATURE_COUNT: 50, layers: 'winter:constructions', styles: '', srs: 'EPSG:4326', WIDTH: imap.size.w, HEIGHT: imap.size.h}, iwmsurl //my wms url ); OpenLayers.loadURL(url, '', this, showFeatureInfo, showFeatureInfo); }); 其中imap是OpenLayers的Map对象实例。向服务器发送一个GetFeatureInfo请求,只需传入当前Web地图中的象素坐标x,y就可以让GeoServer找到点击的空间对象,这是WMS GetFeatureInfo的最大特点。GeoServer支持多种格式的结果输出,这里选择纯文本后可以用正则表达式进行匹配,取出我们真正想要的那些属性信息。 WFS的GetFeature比较容易理解,在我的印象中WFS就是用来做这类事情的。不过我比较担心的是它的效率问题。用WFS进行属性的查询:首先我们要构建一个Filter,这个Filter中需要创建一个点击点的GML对象,在通过空间位置关系运算符查找到我们点击的多边形,用GML返回多边形的属性值。获得点击点的空间坐标已经可以有OpenLayers的getLonLatFromPixel方法实现。 现在还不知道WMS的要素查找是怎样实现的,所以不好判断两个方法究竟谁的效率高。 |
|
来自: primivite_ > 《geoserver》