首页 文章

openlayers从wms获取属性

提问于
浏览
2

我在OpenLayers中从Geoserver提供wms图层,并且当我点击 Map 时,我正试图从该图层中的对象中提取特定属性 .

我正在定义我的wms层,如下所示:

oas = new OpenLayers.Layer.WMS(
"oas",
"http://www.bwgeoserver.com/geoserver/UK_Admin/wms",
    {
      "LAYERS": 'wealthmap_bdy',
      transparent: 'true',
      extractAttributes: 'true'
    },
    {
      buffer: 0,
      opacity: 1,
      displayOutsideMaxExtent: true,
      isBaseLayer: false
    }
    );
map.addLayer(oas);

图层在 Map 上显示OK . 我正在使用代理服务器,并且没有跨域问题,因为我可以选择并显示弹出窗口中的所有属性 . “OA11Code”肯定是wms图层上的一个字段,它在弹出窗口中显示其他属性 .

但是当我尝试使用以下代码从所选对象中提取此属性时:

oaPicker = new OpenLayers.Control.WMSGetFeatureInfo({
             url: 'http://www.bwgeoserver.com/geoserver/UK_Admin/wms',
             title: 'identify features on click',
             layers: [oas],
             queryVisible: true
         });

oaPicker.events.register('getfeatureinfo', this, selectid);
map.addControl(oaPicker);
oaPicker.activate();

function selectid(e) {
    var val = e.features[0].attributes.OA11Code;
}

我在Firefox调试器中遇到错误说:

“TypeError:e.features [0]未定义” .

我想要的就是能够点击 Map ,从wms图层中提取属性的值,将其分配给javascript变量并对其执行某些操作 . 任何帮助将不胜感激 .

1 回答

  • 0

    默认情况下,GeoServer将返回GetFeaureinfo请求的纯文本,但解析可能有点抽奖(特别是如果任何功能可能为null或包含特殊字符) .

    更好的解决方案是将 info_format 参数设置为 application/json ,以便获得易于解析的_2766336之类的JSON响应 .

相关问题