4

Google マップ v3 で WMS レイヤーを正常にオーバーレイしましたが、タイルの情報は透明で黒であるため、暗い背景 (衛星地図など) ではよく見えません。たとえば、いくつかのタイルを参照してください。

http://geoportal2.uhul.cz/wms_oprl/?SERVICE=WMS&REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.1&LAYERS=HMLCR&FORMAT=image/png;%20mode=24bit&FGCOLOR=0xFF0000&TRANSPARENT=TRUE&SRS=EPSG:4326&BBOX=16.58935546875,49.37522008143603,16.600341796875, 49.38237278700955&幅=256&高さ=256&スタイル=

(これはそのタイルを取得するための WMS リンクでした)

質問: 上記の WMS リクエストを変更して、前景色 (現在は黒) をカスタム カラー (赤など) に変更するにはどうすればよいですか? つまり、レイヤーのスタイルを設定する方法は? 色を選択できるWebマップアプリケーション(IEでのみ機能)を介して実行できるため、サーバーはこのレイヤーに対して明らかにそれを実行できます。たとえば、次のマップ イメージを参照してください。

ここに画像の説明を入力

(次のリンクを使用して画像を取得しました。スケールとロゴが含まれているため、適切なタイルではないことに注意してください。)

残念ながら、この Web アプリケーションは WMS を使用してこのスタイル設定されたマップを取得しないため、スタイル パラメータを WMS リクエストにコピーすることはできません。WMS リクエストを介してスタイリングを行う必要があります(この他のリクエスト形式は独自のものであり、タイル用に設計されていないマップ全体を取得し、WGS 座標をサポートしていないようです) -どうすればよいですか?

私がしようとしました:

  1. WMS のドキュメント、特にバージョン 1.1.1を参照してください。
  2. SLDを見てください。しかし、把握するのはかなり複雑なようです...
  3. WMS サーバーのGetCapabilites コマンド出力を確認します。
  4. また、目的のレイヤー (HLMCR) のDescribeLayerおよびGetStylesコマンドの出力を見ても、このレイヤーが WMS でのスタイリングをサポートするかどうかさえわかりません...

迷子になりました。正しい方向を教えていただければ幸いです。または、WMS (このレイヤーの場合) で解決できる場合は情報を教えてください。

「無理です」も有効な回答です!

前もって感謝します。

4

3 に答える 3

2

一見すると、これはMapserver 5.xの実装のように見えます。getCapabilitiesは、UserDefinedSymbolization SupportSLD = "1"がマップレベルで有効になっていることを示しています。これは、IIRCがすべてのレイヤーがそれを継承する必要があることを意味します。

したがって、理論的には、GETリクエストまたはどこかのファイルでSLDを提供し、SLDのURLをGETリクエストに提供して、すべて設定できるはずです。

SLDを作成するのは面倒ですが、機能するはずなのに機能しないSLDがあると思われる場合は、ここに貼り付けてください。

于 2012-01-04T02:07:55.120 に答える
0

WMS から画像を読み取り、色を変更するラッパー スクリプトを使用します。

ラッパー

以下は PHP で書かれた例です。

<?php
$url = $_GET['url'];
$im = imagecreatefrompng($url);

if($im && imagefilter($im, IMG_FILTER_COLORIZE, 255, 0, 0, 0)){
    // this line is only needed if original image has transparency (32bit/pixel)
    // and you want to preserve that transparency
    imagesavealpha($im, true);

    header('Content-type: image/png');
    imagepng($im);
}else{
    echo 'Conversion failed.';
}

imagedestroy($im);
exit;
?>

次に、WMS リンクを呼び出す代わりに、ラッパーを呼び出して、WMS リンクをパラメーターとして渡します (recolor_png.php?url=...)。ラッパーは元の画像を読み取り、カラー化されたバージョンの新しい PNG を返します。パラメータとして渡すリンクは、正しく機能するように URL コード化する必要があることを忘れないでください (すべての特殊文字は %XX 16 進表記に置き換えられます)。JavaScript では、encodeURIComponent() メソッドを使用してこれを行うことができます。

私のサーバーでリンクと上記のラッパーを使用した実際の例を次に示します。

http://www.digilog.de/pub/stackoverflow/recolor_png2.php?url=http%3A%2F%2Fgeoportal2.uhul.cz%2Fwms_oprl%2F%3FSERVICE%3DWMS%26REQUEST%3DGetMap%26SERVICE%3DWMS%26VERSION% 3D1.1.1%26LAYERS%3DHMLCR%26FORMAT%3Dimage%2Fpng%3B%2520mode%3D24bit%26FGCOLOR%3D0xFF0000%26TRANSPARENT%3DTRUE%26SRS%3DEPSG%3A4326%26BBOX%3D16.58935546875%2C49.37522008143603%2C16.600341796875%2C49. 38237278700955%26WIDTH%3D256%26HEIGHT%3D256%26STYLES%3D

これは結果の画像です (半透明バージョン):

recolor_png2.png
(出典:digilog.de

半透明出力のない同じラッパー (コードから imagesavealpha を削除):

http://www.digilog.de/pub/stackoverflow/recolor_png.php?url=http%3A%2F%2Fgeoportal2.uhul.cz%2Fwms_oprl%2F%3FSERVICE%3DWMS%26REQUEST%3DGetMap%26SERVICE%3DWMS%26VERSION% 3D1.1.1%26LAYERS%3DHMLCR%26FORMAT%3Dimage%2Fpng%3B%2520mode%3D24bit%26FGCOLOR%3D0xFF0000%26TRANSPARENT%3DTRUE%26SRS%3DEPSG%3A4326%26BBOX%3D16.58935546875%2C49.37522008143603%2C16.600341796875%2C49. 38237278700955%26WIDTH%3D256%26HEIGHT%3D256%26STYLES%3D

結果の非透明画像:

recolor_png.png
(出典:digilog.de

あなたがテストできるように、そのラッパーを数日間オンラインのままにします。

キャッシング

この変換はプロセッサを集中的に使用するため、キャッシュ コードをラッパーに追加することをお勧めします。

  • 与えられた URL からハッシュ コードを作成します。例: $hash=md5($url)
  • $hash.png という名前の画像が storage サブフォルダーに存在するかどうかを確認します
  • その場合: ファイルから画像を読み取り、それを返します
  • それ以外の場合: 画像を作成し、サブフォルダーに $hash.png として保存し、すぐに返します

WMS コンテンツが時間の経過とともに変化することが予想される場合: キャッシュされた画像の作成日も確認し、それらが古すぎる場合 (1 か月程度など) は削除します。そのため、WMS マップへの変更は、最大で 1 か月後にシステムに反映されます。

于 2011-11-30T23:57:16.430 に答える
-1

WMS リンクには、要求したことを正確に行うことができるいくつかのカスタム パラメータが既に含まれています。リンクは次のとおりです。

  http://geoportal2.uhul.cz/mapserv/php/mapserv3.php?project=oprl_2011&mode=map&mapsize=256%20256&layers=HMLCR%20&x=1322616184548&map_SMO_class_0_color=0%200%200&map_HMLCR_class_0_color=255%200%200&mapext=-679915.1258015268%20-1062651.2224427482%20-679660.3694656485%20-1062461.062442748

調べてみると、URL エンコードされたすべてのパラメーターの間に、興味深いことに map_HMLCR_class_0_colorという名前のパラメーターがあることがわかります。

その値をたとえば緑 (RGB コードは 0,255,0) に変更すると、レイヤーは緑でレンダリングされます。色はRGBコードで表現されます。別のパラメーターmap_SMO_class_0_colorもありますが、それが何をするのかわかりません。おそらく、そのリクエストに表示されない機能のスタイルを設定しますか?

緑色の例:

 http://geoportal2.uhul.cz/mapserv/php/mapserv3.php?project=oprl_2011&mode=map&mapsize=256%20256&layers=HMLCR%20&x=1322616184548&map_SMO_class_0_color=0%20100%20200&map_HMLCR_class_0_color=0%20255%200&mapext=-679915.1258015268%20-1062651.2224427482%20-679660.3694656485%20-1062461.062442748

これにより、次が生成されます。

グリーンスタイルのリクエスト

Mapserver での RGB カラー表現に関する注意事項

リクエストでは、RGB トリプレットを次のように記述する必要があります。

R G B

(空白が必要であることに注意してください)。その URl エンコードされた表現は次のとおりです。

R%20G%20B

%20は URL でのスペースのエンコード方法であるためです。

于 2011-12-03T10:37:11.153 に答える