2016-11-01 6 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 계층의 필드이며 팝업의 다른 속성과 함께 ok를 표시합니다.

그러나 나는이 코드를 사용하여 선택한 개체에서이 특성을 추출하려고하면

"TypeError: e.features[0] is undefined".

내가 원하는 건이 될 것입니다 : 내 말은 파이어 폭스 디버거에서 오류가 발생

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; 
} 

을 지도를 클릭하고, wms 계층에서 속성의 값을 추출하고, 자바 스크립트 변수에 할당하고, 무언가를 수행합니다. 어떤 도움이라도 대단히 감사하겠습니다.

+0

당신의'selectid (e)'함수에서'e'의 값을 테스트 할 수 있습니까? 브라우저 디버거를 사용하여 geoserver와 응답에 대한'getfeatureinfo' 요청을 가로 챌 수 있습니까? Geoservers 로그는 결정적이지 않은 경우 통찰력을 제공 할 수 있습니다. –

답변

0

기본적으로 GeoServer는 GetFeaureinfo 요청에 대해 일반 텍스트를 반환하지만 구문 분석은 약간의 추첨이 될 수 있습니다 (특히 기능 중 하나가 null이거나 특수 문자가 포함될 수있는 경우).

info_format 매개 변수를 application/json으로 설정하면 구문 분석하기 쉬운 this과 같은 JSON 응답을 얻을 수 있습니다.

+0

이 질문에 대한 답변을 보내 주셔서 감사합니다. 문제는 실제로 반환되는 개체의 형식 때문에 발생했습니다. oaPicker.infoFormat = 'application/vnd.ogc.gml'줄을 사용하여 형식을 변경했습니다. 이것은 트릭을했다. – Mark

관련 문제