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

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的要素查找是怎样实现的,所以不好判断两个方法究竟谁的效率高。
转载自:https://blog.csdn.net/nlslzf/article/details/83291667

You may also like...