2016-11-01 18 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); 

層は、地図上の[OK]を表示しています。私はプロキシサーバーを使用しており、ポップアップ内のすべての属性を選択して表示できるため、ドメイン間の問題はありません。 "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; 
} 

は、私が言ってFirefoxのデバッガでエラーが出ますマップをクリックし、wmsレイヤーから属性の値を抽出し、それをjavascript変数に割り当てて、何かを実行します。どんな助けでも大歓迎です。

+0

あなたの 'selectid(e)'関数で 'e'の値をテストできますか?あなたのgeoserverとレスポンスに対する 'getfeatureinfo'リクエストをインターセプトするためにブラウザのデバッガを使うことができますか? Geoserversのログは、決定的なものではない場合にも、いくつかの洞察を提供することができます。 –

答えて

0

デフォルトでは、GeoServerはGetFeaureinfoリクエストに対してプレーンテキストを返しますが、これは少しの宝くじである可能性があります(特に、いずれかの機能がnullまたは特殊文字を含む場合)。

パラメータをapplication/jsonに設定すると、解析が容易なthisのようなJSON応答を得ることができます。

+0

この質問への回答ありがとうございます。この問題は実際に返されるオブジェクトの形式によるものです。 oaPicker.infoFormat = 'application/vnd.ogc.gml'という行を使って書式を変更しました。これはトリックでした。 – Mark

関連する問題