2016-11-01 77 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