2016-11-01 75 views
2

我在OpenLayers中为Geoserver提供了一个wms图层,并试图在点击地图时从该图层中的对象提取特定属性。openlayers从wms获取属性

我定义我的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); 

该层显示在地图上确定。我正在使用代理服务器,并且没有跨域问题,因为我可以选择并显示弹出窗口中的所有属性。 “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] is undefined".

所有我想要的是能够点击地图,从wms图层中提取一个属性的值,将其分配给一个JavaScript变量,并对其进行处理。任何帮助将不胜感激。

+0

你可以在'selectid(e)'函数中测试'e'的值吗?可以使用浏览器调试程序拦截对您的地理服务器和响应的getfeatureinfo请求吗?如果这些不是确凿的,地理服务器日志可以提供一些见解。 –

回答

0

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

更好的解决方案是将info_format参数设置为application/json,这样您就可以获得易于解析的类似this的JSON响应。

+0

感谢您对此问题的回复。看来问题确实是由于返回对象的格式造成的。我改变了格式:oaPicker.infoFormat ='application/vnd.ogc.gml'。这个伎俩。 – Mark