banner
陈不易

陈不易

没有技术想聊生活
twitter
medium
tg_channel

GeoServer マルチバンド画像は同じスタイルを使用します

引子#

要求は海洋要素のデータがあり、そのデータには 12 のchannelがあり、12 のchannelは 12 ヶ月のデータに対応しています。レイヤーを公開した後、スタイルを使用して対応するchannelを選択し、特定の月のデータを表示できます。簡単な方法は 12 のstyleをコピーすることですが、将来的なメンテナンスを考慮して(ほとんど自分でメンテナンスする必要があるため)、外部からパラメータを取得し、同一のstyleを使用して異なるchannelを選択できる「動的スタイル」のような方法を探しました。

ここで自分の思い込みに少しハマってしまいました:本番環境で使用しているGeoServerのバージョンがかなり古く、2.11.xです。ドキュメントを見ているときは最新のドキュメントを見ていたため、テストがうまくいかなかった後、2.11のドキュメントを再度確認しました。ドキュメントには似たような使い方がありましたが、channelの選択時には使用できませんでした。

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

レイヤー公開#

レイヤーの公開は、多channelの画像理論的には可能です。

スタイル設定#

一般的なバンド融合のchannel選択はこの形式です1

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

styleの中で 1、2、3 のchannel(R,G,B)に対応しています。

単一のchannelを表示するためには、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 オブジェクトが包まれており、envmの値が空のときにデフォルト値として1を提供します。もしmが空でなければ、mの値をchannel名として使用します。

wmsリクエストに & env=m:2 を追加することで、番号 2 のchannelを表示できます。

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>ラスタースタイル</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

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