GeoServer WMS GetFeatureInfoリクエストによって返されたフィールドを選択する方法は?


9

PostGIS / GeoServer / OpenLayersスタックに基づくシンプルなローカルマッピングサービスを実行しています。

次のopengeo チュートリアルに従って、OpenLayersのクリックイベントをWMS GetFeatureInfo呼び出しに結び付けました。

    map.events.register('click', map, function (e) {
        var url = "http://localhost:1979/geoserver/wms" 
          + "?REQUEST=GetFeatureInfo"
          + "&EXCEPTIONS=application/vnd.ogc.se_xml"
          + "&BBOX=" + map.getExtent().toBBOX()
          + "&X=" + e.xy.x
          + "&Y=" + e.xy.y
          + "&INFO_FORMAT=text/html"
          + "&QUERY_LAYERS=MYDATA:MYLAYER"
          + "&LAYERS=MYDATA:MYLAYER"
          + "&FEATURE_COUNT=5"
          + "&SRS=EPSG:3857"
          + "&STYLES="
          + "&WIDTH=" + map.size.w
          + "&HEIGHT=" + map.size.h;
        window.open(url,
          "getfeatureinfo",
          "location=0,status=0,scrollbars=1,width=800,height=125"
        );
      });

GeoServerのFreeMarker テンプレートを使用して、応答を正しくフォーマットしました。私が抱えている問題は、取得した応答がレイヤーのすべてのフィールドを返すことです。

ユーザーに関連するものを選択する方法はありますか?

回答:


7

見栄えが良くない(ソース):

... GetFeatureInfo [...]はWMSリクエストとWFSです。[...]それらの動作の1つの違いは、Geoserverが常にすべての属性をGetFeatureInfoで送信することですが、WFSでは属性のリストをリクエストで指定できます。

ユーザーが見たい/すべきである属性のみを含むビューを作成して、Geoserverを通じて提供することができます。

別の方法は、GetFeatureInfoテンプレート調整することです


2
表示または非表示は1つのことですが、radekは一部のフィールド値のみを返します。転送されるデータとセキュリティの面で大きな違いがあります。
simo

2
そのため、私の最初の提案はビューを作成することでした。
アンダーダーク

VIEWの使用についての詳細は、こちら
radek

7

フリーマーカーテンプレートに不要なフィールドを含めないでください。http://docs.geoserver.org/trunk/en/user/tutorials/GetFeatureInfo/index.html#custom-templatesを参照してください


良いリンク、Geoserverサイトにいくつかの本当に良いドキュメントがあります-この例は、必要なフィールドだけを返すために(もちろん、少しいじりながら)便利であることがわかりました。
安藤


5

これは、GeoServer propertyName WMSリクエストパラメータを使用して行うことができます。

http://docs.geoserver.org/stable/en/user/services/wms/vendor.html#propertyname


私にとってこれが最善の解決策です!1.非常に簡単です。2.他のアプリケーションから完全なfeatureInfoを作成する可能性さえあります。テンプレートを使用すると、それは不可能になります。3.そして最後に、ネットワークトラフィックは完全な機能を要求するよりもはるかに小さくなります!タンク君!
marcel

0

freemarkerテンプレートに条件ステートメントを追加できます。

たとえば、content.ftlファイルで、「YOUR_FIELDNAME」のみをリストするようにこのようなものを追加できます。

<#if attribute.name == "YOUR_FIELDNAME">
     <li>${attribute.name}: ${attribute.value}</li>
</#if>

または、次のようにしてフィールドを除外できます。

<#if !attribute.name == "YOUR_FIELDNAME">
     <li>${attribute.name}: ${attribute.value}</li>
</#if>

-2

これはどうですか?

また、これが属性(およびレイヤー名とフィーチャIDだけでなく)を返すためには、WMSのメタデータセクションに "ows_include_items" "attribute1、attribute2、...、attributeN"または "ows_include_items" "all"を追加する必要がありますレイヤーのマップファイルエントリ。

差出人:http : //trac.osgeo.org/openlayers/wiki/GetFeatureInfo


ただし、RadekはUMN MapserverではなくGeoserverを使用するため、マップファイルはありません。
アンダーダーク

1
私はそれを見ました。geoserverを使用したことがないのですが、メタデータを設定する方法も1つあると思いますか?
simo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.