Geoserver WMSからLeafletの対話機能を取得する方法は?


12

シェープファイルをWMSとしてLeafletに提供するジオサーバーがあります。

ユーザーがWMS機能にカーソルを合わせるかクリックすると、リーフレットマップにWMS属性を持つポップアップを表示する相互作用を追加したいと思います。

ワックス/リーフレットの対話性を見てきましたが、WMSとリーフレットでそれは可能ですか?

回答:


14

WMS GetFeatureInfoを使用してみてください。以下は、リーフレットがブライアンマクブライドを利用できるようにした例です。GetFeatureInfoリクエストのトリガーに使用されるイベントはonclickです。


現在、Geoserver Freemarkerテンプレートを使用してGetFeatureInfoデータをフォーマットしています。Leafletホバー/マウスオーバーの相互作用についての考えはありますか?
サルボ

例に示すように、onMapClick関数に渡されるイベントを変更する必要があります。行41»map.addEventListener( 'click'、onMapClick); ドキュメントページ:leaflet.cloudmade.com/reference.htmlをご覧ください 。Geoserverのfreemarkerテンプレートについては使用しませんでしたが、WMS GetFeatureInfoではなくGeoJsonでフォーマットされるように応答を要求するWFS GetFeatureリクエストを作成する方が理にかなっています。クライアント側のGeoJsonオブジェクトを使用すると、フィーチャデータを表示する単純なHTMLマークアップをはるかに簡単に構築できます。
ペドロメンデス

申し訳ありません。リーフレットでGetFeatureを作成する方法はありません。:/同じ効果のためにGeoJSONレイヤーを使用することもできます(機能の属性はクライアントで既にアクセス可能です)。しかし、それはOpenLayers =)が大好きです。
ペドロメンデス

こんにちはザブロ、あなたはこれを機能させることができましたか?同じものを実装したい。いくつかのコードスニペットを共有してもらえますか?
プラニュシュパテル

4
@PedroMendes例へのリンクは残念ながら壊れています。更新していただけますか?
ustroetz

4

Leafletの双方向性は、データセットの大きさに応じて2つの方法で得られます。WMS getFeatureInfoに対してはお勧めします。スタイリングはすべてサーバー側で設定されるため、構成が面倒です。だから、ここに私の2つの方法があります:

  1. データセットが小さい場合は、すべてをベクトルとしてロードします(CORSが有効になっている場合はJSONPまたはJSONとしてリクエストを実行します)。例:https : //maps.gcc.tas.gov.au/dogexerciseareas.htmlおよびコード:https : //github.com/gccgisteam/maps-website/blob/master/dogexerciseareas.html
  2. データセットが大きい場合は、onClickリクエストを実行し、ニアフィーチャのベクトルを返します(JSONまたはJSONPを使用)。例:https : //maps.gcc.tas.gov.au/stormwater.htmlおよびコード:https : //github.com/gccgisteam/maps-website/blob/master/stormwater.html

(この雨水の例は、実際に必要なものよりも少し複雑です。なぜなら、レイヤーのオンとオフを切り替えるときにレイヤーがインタラクティブかどうかを変更するからです...)


WMS GetFeatureInfoがJSONを返すことができることに注意してください。
アレックスリース

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.