客户端两种获取要素属性的方法

http://www.classicning.com/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的要素查找是怎样实现的,所以不好判断两个方法究竟谁的效率高。

你可能感兴趣的:(Web,xml,正则表达式,浏览器,Blog)