2016-11-01 5 views
2

Я обслуживаю слой wms от Geoserver в OpenLayers и пытаюсь извлечь конкретный атрибут из объекта в этом слое, когда я нажимаю на карту.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, и он отображает ok с другими атрибутами во всплывающем окне.

Но когда я пытаюсь извлечь этот атрибут из выбранного объекта, используя этот код:

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

Можете ли вы проверить значение 'e' в функции' selectid (e) '? Можно ли использовать отладчики браузера для перехвата запроса 'getfeatureinfo' на ваш геосервер и ответ? Журналы геосервисов также могли бы дать некоторое представление, если они не являются окончательными. –

ответ

0

По умолчанию GeoServer возвращает обычный текст для запроса GetFeaureinfo, но разбор может быть немного лотереей (особенно, если какая-либо из функций может быть нулевой или содержать специальные символы).

Лучшим решением является установка параметра info_format на application/json, так что вы получите ответ JSON, такой как this, который легко разобрать.

+0

Благодарим вас за ответы на этот вопрос. Кажется, что проблема действительно была связана с форматом возвращаемого объекта. Я изменил формат, используя строку: oaPicker.infoFormat = 'application/vnd.ogc.gml'. Это сделал трюк. – Mark

Смежные вопросы