banner
陈不易

陈不易

没有技术想聊生活
twitter
medium
tg_channel

GeoServer 多波長画像は同じスタイルを使用します。

引子#

要求は、海洋要素のデータがあり、データには 12 のチャンネルがあります。12 のチャンネルは、12 の月のデータに対応しています。レイヤーを公開した後、スタイルを使用して特定のチャンネルを選択し、特定の月のデータを表示できます。単純な方法は、12 個のスタイルをコピーすることですが、将来のメンテナンスのために(おそらく自分でメンテナンスする必要があるため)、外部からパラメータを取得し、同じスタイルを使用して異なるチャンネルを選択するための「ダイナミックスタイル」のような方法を探しています。

ここで、自分自身が思い込んでいた小さな落とし穴にはまりました:本番環境では、使用している GeoServer のバージョンが比較的古いです(2.11.x)。自分は最新のドキュメントを見ていたのですが、テストがうまくいかなかったので、2.11 のドキュメントも見ました。ドキュメントには似たような使用法が記載されていましたが、チャンネルの選択時には使用できませんでした。

したがって、この方法は比較的新しいバージョンにのみ適用されます。

レイヤーの公開#

レイヤーの公開は、複数のチャンネルを持つ画像に対して一般的に行われます。

スタイルの設定#

通常、チャンネルの選択は次の形式で行われます1

<ChannelSelection>
  <RedChannel>
    <SourceChannelName>1</SourceChannelName>
  </RedChannel>
  <GreenChannel>
    <SourceChannelName>2</SourceChannelName>
  </GreenChannel>
  <BlueChannel>
    <SourceChannelName>3</SourceChannelName>
  </BlueChannel>
</ChannelSelection>

スタイルの中で、1、2、3 のチャンネルは、(R、G、B)に対応しています。

単一のチャンネルを選択して表示する場合は、環境変数を取得するためにFunctionを使用し、デフォルト値を置換します。

<RasterSymbolizer>
  <Opacity>1.0</se:Opacity>
  <ChannelSelection>
    <GrayChannel>
      <SourceChannelName>
            <Function name="env">
             <ogc:Literal>m</ogc:Literal>
             <ogc:Literal>1</ogc:Literal>
          </ogc:Function>
      </SourceChannelName>
    </GrayChannel>
  </ChannelSelection>
</RasterSymbolizer>

ここでは、channel名は Function オブジェクトで囲まれており、それはenv内のmの値が空の場合にデフォルト値として1を提供し、m が空でない場合は m の値をchannel名として使用します。

wmsリクエストに&env=m:2を追加すると、番号 2 のチャンネルが表示されます。

http://localhost:8083/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=geosolutions:usa&styles=&bbox=-130.85168,20.7052,-62.0054,54.1141&width=768&height=372&srs=EPSG:4326&format=application/openlayers&env=m:2

以下は完全なスタイルの例です。

<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sld
http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd" version="1.0.0">
  <NamedLayer>
    <Name>saltsld</Name>
    <UserStyle>
      <Title>A raster style</Title>
      <FeatureTypeStyle>
        <Rule>
          <RasterSymbolizer>
            <Opacity>1.0</Opacity>
            <ChannelSelection>
                <GrayChannel>
                        <SourceChannelName><ogc:Function name="env">
                    <ogc:Literal>m</ogc:Literal>
                    <ogc:Literal>1</ogc:Literal>
            </ogc:Function></SourceChannelName>
                </GrayChannel>
        </ChannelSelection>
            <ColorMap>
           <ColorMapEntry color="#0000ff" quantity="28.0"/>
           <ColorMapEntry color="#009933" quantity="30.0"/>
           <ColorMapEntry color="#ff9900" quantity="32.0" />
           <ColorMapEntry color="#ff0000" quantity="34.0"/>
 </ColorMap>
          </RasterSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>


9 月

3 月

後話#

最終的に、本番環境のバージョンを更新するのは難しいため、自分で 12 * 2 個のスタイルをコピーしました。

Footnotes#

  1. GeoServer : RasterSymbolizer

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。