Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DEMのRGBエンコード手法をおさらいする / MapLibre Meetup Japan #05

Avatar for Kanahiro Iguchi Kanahiro Iguchi
July 15, 2025
280

DEMのRGBエンコード手法をおさらいする / MapLibre Meetup Japan #05

DEMのRGBエンコード手法をおさらいする / MapLibre Meetup Japan #05

Avatar for Kanahiro Iguchi

Kanahiro Iguchi

July 15, 2025
Tweet

Transcript

  1. Kanahiro Iguchi MapLibre User Group Japan AWS Community Builder -

    Serverless 『位置エン本』 『位置ベロ本』 『実践QGIS』著者 MapLibre Meetup Japan #05 2025/07/15 2
  2. RGBエンコードで共通する考え方 RGBの値を3桁の256進数(あるいは24桁の2進数)と見立てる [0,0,0], [0,0,1], ... [0,0,255], [0,1,0], ... [255,255,255] [R,G,B]=[0,0,0]の時の、実数値を定義する(下限)

    例:TerrainRGBでは [0,0,0] は-10000と定義されている RGB値が1単位増加する際、実数値の増分を定義する(分解能) 例:TerrainRGBではRGB値が1増加するごとに、実数値は0.1増加する = [0,0,0]=-10000m, [0,0,1]=-9999.9m, [0,0,2]=-9999.8m... MapLibre Meetup Japan #05 2025/07/15 15
  3. 代表的な3つの仕様とパラメータ 仕様名 分解能 下限 上限 TerrainRGB 0.1m -10000.0m 1667721.5m Terrarium

    0.0039m -32768.0000m 32768.0000m 地理院標高タイル 0.01m 0.00m※ 83886.0800m 左からTerrainRGB(産総研シームレス) Terrarium(Mapzen Global Terrain) 地理院標高タイル MapLibre Meetup Japan #05 2025/07/15 17
  4. 地理院標高タイルとそれ以外の仕様の違い height = (R * 256 * 256 + G

    * 256 + B) * 0.01 # ただし[R,G,B] = [128,0,0] を無効値とする # ただし[128,0,1] 以上の場合2^24 を引き去る 地理院標高タイルだけが単調増加でなく、[128,0,0]を境に負の値を表現するようになる (いわゆる2の補数表現) 。 これにより一般的なソフトウェアではそのまま利用できない。MUG-JPではGL JSで地 理院標高タイルを使うためのプラグインを公開している。 https://github.com/mug-jp/maplibre-gl-gsi-terrain MapLibre Meetup Japan #05 2025/07/15 19
  5. GL JSでは type=raster-dem のsourceで、 encoding=custom と定義することで、そのタ イルの下限と分解能を独自に定義することが出来る。例えば下記は地理院標高タイルを負数 の範囲を一旦考えないことにした場合の定義である(地理院標高タイルのエンコードのパラ メータは分解能が0.01m、下限が0.0mであることを思い出そう) 。

    dem: { type: 'raster-dem', tiles: ['https://path/to/yourdem/{z}/{x}/{y}.png'], encoding: 'custom', // ユーザー定義のエンコーディングであることを示す redFactor: 655.36, // R が1 単位増えると実数値がこの値だけ増える greenFactor: 2.56, // G が1 単位増えると実数値がこの値だけ増える blueFactor: 0.01, // B が1 単位増えると実数値がこの値だけ増える baseShift: 0.0, // 実数値の下限 } // ... MapLibre Meetup Japan #05 2025/07/15 22
  6. dem: { type: 'raster-dem', tiles: ['https://path/to/yourdem/{z}/{x}/{y}.png'], encoding: 'mapbox', } //

    ... 上記の定義はTerrainRGBエンコーディングを表すもの 下記はこれと等価の定義である dem: { type: 'raster-dem', tiles: ['https://path/to/yourdem/{z}/{x}/{y}.png'], encoding: 'custom', // ユーザー定義のエンコーディングであることを示す redFactor: 6553.6, // R が1 単位増えると実数値がこの値だけ増える greenFactor: 25.6, // G が1 単位増えると実数値がこの値だけ増える blueFactor: 0.1, // B が1 単位増えると実数値がこの値だけ増える baseShift: -10000.0, // 実数値の下限 } // ... MapLibre Meetup Japan #05 2025/07/15 23