GeoServerでカスタムスタイルを設定できますか


8

カスタムスタイリングにGeoServer WMSサーバーを使用したい。シェープファイル内にエリアをポリゴンとして持っているとしましょう。しかし、このエリアの温度を属性として持っていません。Webサービスから、そのエリア内の温度ポイントを収集します。次に、GeoServerがこれらの動的温度ポイントに従ってこの領域に色を付けるようにします。

次に例を示します。

温度マップ

可能であれば、これらの境界線を画像に配置し、色についての説明を右側に配置したいです。これらの温度ポイントをGeoServer WMSに送信するにはどうすればよいですか。また、これらの動的パラメーターに応じてカスタムカラーリングを実行できますか?

これらのポイントデータをエリアカラーに変換する方法がわかりません。

次の質問も似ていますが、ポイントがありません。シェープファイルにない動的な属性でポリゴンをカラー化できますか。

これらのポリゴンを製品タイプに応じて色分けしたい例を次に示しますが、前の質問のように、これらの製品タイプは動的に収集されます。

ここに画像の説明を入力してください

これらが可能であることを願っています。


2番目のオプションは、ポリゴンを正しく属性付けすると機能します。これはデータベースで行う必要があります。この例のようなSLD(Styled Layer Descriptor)の使用-blog.geoserver.org/2010/04/09/sld-cookbook
Mapperz

問題は、dbへの書き込みアクセス権がないことです。そのため、商品タイプの新しい属性をテーブルに追加できません。実際、動的に収集する属性はたくさんありますが、元のテーブルにはありません。したがって、それらのそれぞれに新しい列を作成することは、私が選択するオプションではありません。ダイナミックな方法はありますか?またはこれが不可能な場合、この操作に外部ライブラリを使用する必要がありますか?シャープマップなど?
bahadir 2012

読み取り/書き込みアクセス権があるステージングテーブルがある。独自のデータベース(postgis / postgresを推奨)を作成しない場合は、自分で制御できます。
Mapperz

回答:


4

あなたの上の2番目の質問

SLDは動的に作成できます。つまり、動的データを使用してマップのスタイルを設定できます。これが機能するには、スタイルを設定しようとしているポリゴンのIDを知っている必要があり、Webサービスを変更/拡張する必要もあります。

Webサービスに、単にデータを返すのではなく、オンザフライでSLDを生成させます。これは、.NET、Java、PHPなどを使用して十分に簡単です。生成するSLDには、表示するカラーバンドごとにルールがあります。各ルールは、色が適用されるポリゴンをIDで識別します。各ルールのフィルターブロックにはが含まれますPropertyIsEqualTo 1 OR PropertyIsEqualTo 2 OR ...。各ルールは、値を表すために選択した色でポリゴンのスタイルを設定します。次に、動的SLDを使用するようにGeoServerに指示するための2つのオプションがあります。

  1. GeoServerがWebサービスへのHTTPアクセスを持っている場合は、(JS)などのエンコードされたURLを渡すことができます'http://geoserver/wms?request=GetMap...&sld=' + encodeURIComponent('http://web-service/generateSLD?and=any-parameters-that-influence-sld-generation')。GeoServerがWMSリクエストを受信すると、パラメーターをデコードし、このURLにSLDを照会します。GeoServerの観点から見ると、これはファイルサーバーに保持されている静的SLDのクエリと同じです。
  2. GeoServerがWebサービスにアクセスできない場合、クライアントはまずWebサービスに動的SLDを要求してから、WMSリクエストのsld_bodyパラメーターでSLDをGeoServerに渡す必要があります。クライアント(ブラウザなど)またはWebサーバーによって課されるURLの長さの制限に注意してください

どちらのアプローチも、テスト用に作成した静的SLDを使用してテストできるため、Webサービスに取り組む前に、これがどれだけ成功するかを理解できます。両方のアプローチを使用して、GeoServerに凡例グラフィックを要求し、同じルールを表すことができます(ただし、オプション1を使用する場合、SLDの生成に使用されるデータがマップの生成後に変更された可能性があります)。

これが質問2の最良の選択肢だと思います。

あなたの最初の質問について

温度ポイントは常に同じ場所を表していますか?はいの場合、それらの温度ポイントがどのポリゴンに含まれるかを事前に確認できますか?はいの場合、ポイントをポリゴンIDに変換するSLD生成スクリプトを使用して、上記で概説したアプローチを再利用できます。

編集私はこれが別の質問で参照されているのを見ました:http : //pypi.python.org/pypi/python-sld/


おかげで、最初の質問でジオサーバー用のアシッドマッププラグインを見つけました。そのプラグインについて何か経験はありますか?
bahadir

残念ながらありませんが、「WMSポイントレイヤーを使用してAMSマップを生成できます」と表示されています。これにより、GeoServerにプラグインをインストールする必要があるだけでなく、GeoServerもそれをレイヤーとして提供するためにポイントデータにアクセスする必要があると私に言います。あなたの質問から、GeoServerの設定を変更することはできないと思いました。
tomfumb

実際、私は基礎となるデータベースにアクセスできません。geoserver構成を変更できます。しかし、アシッドマップを使用しても、ポイントデータ用のテーブルをdbに追加する必要があると思います。動的な方法はまだありません
bahadir

別のオプションはありますが、簡単ではないかもしれません。GeoServerを構成できれば、WFSから読み取る新しいストアを作成できます。ここでも、GeoServerがWebサービスにHTTPアクセスできる必要がありますが、データポイントを表す独自のWFSを提供できます。転送する必要があるポイントの数によっては、これはかなり遅くなる可能性があります。また、あなたの側にマップサーバーがない場合、GML応答を手動でコーディングすることは望ましくない可能性があります。
tomfumb

また、データベースにアクセスできる場合、Webサービスからデータを収集し、データベースに挿入し、ジオサーバーにデータベースから新しく挿入されたデータを描画させる必要がありますか?
bahadir 2012年

1

短い答えは-はい、それは非常に可能です!この問題に対処する方法は実際にはさまざまです。ここに私が考えることができるそのような方法があります。

ここであなたの質問には2つの部分があります。

1)GeoServerの外部ソースからの静的および動的データを表します。

「Regional Map」というレイヤーグループを2つのレイヤーで作成します。レイヤー1(静的)は「地域マップ-読み取り専用データベースまたはシェープファイルから提供されます。レイヤー2(動的)は「天気」です-WMSカスケードを介して動的データを提供できます。WMSカスケードURLは実際にはループバックできますGeoServerに接続します。REST、SOAP、TCPなど、使用するプロトコルを使用してリモートサービスを呼び出すことにより、温度やその他の動的属性を提供できます。

この方法では、DBにデータを追加することなく、将来的に動的に属性をレイヤーに追加できます。

2)カスタムスタイルを実行する**ここでの最善策は、**スタイルレイヤー記述子(SLD)を使用することです。SLDを使用してスタイルを設定する方法に関するドキュメントはたくさんあります。その非常に強力です!色、ズームレベル、値のしきい値(> 40Cは赤、> 35はオレンジ)を使用してスタイルを制御し、複数の属性とラベルの値に基づくルールを設定できます。スタイリングはほとんどのジオメトリ(ポイント、ライン、エリアなど)で使用できます。Atlasなどのスタイルエディタ、またはOpenGeoに付属のエディタ-GeoExplorerを使用して、さまざまなデータ条件をテストできます。

このアプローチの優れた点は、レイヤー1とレイヤー2のスタイル設定を互いに独立して制御できることです。凡例は、GeoServer外のUI(JavaScript)で実行できます。GeoServerは、すべてのスタイリングルールをマージして、正しいオーバーレイを生成します。レイヤーとスタイリングから得られるパフォーマンスに応じて、GeoWebCacheのようなタイルキャッシングソリューションやVarnishのようなHTTPキャッシュの追加を検討することもできます。

乾杯、

ラメシュ


おかげで、ジオサーバーに新しいテーブルまたはレイヤーを作成する機会がありません。
バハディール2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.