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

公共測量の数値地形図(DM)を WebGISで忠実かつ綺麗に描画する

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for MunetsuguKamimura MunetsuguKamimura
September 15, 2026
67

公共測量の数値地形図(DM)を WebGISで忠実かつ綺麗に描画する

Avatar for MunetsuguKamimura

MunetsuguKamimura

September 15, 2026

Transcript

  1. DM ってどんな見た目? 線に沿って記号が生えている。図式に「補助記号は自動発生して表示」と書いてある記号たち 人工斜面 長いケバと短いケバ。低い方を右 岩がけ 線そのものが山型になる 鉄柵 ×を 4

    mm 間隔 生垣 波と点の交互 被覆 半円を 2 mm 間隔(+点) 都府県界 破線 5 mm + 隙間に矢羽根 ⇒ 飾りは作図ソフトが描く前提。その役を WebGIS にやらせたい WebGIS で DM をきれいに表現する 4 / 20
  2. WebGIS でDMを見せたいときはどうする? A. サーバーで画像にして ラスタータイルで配る 安定。ただ、配信データは大きめ。 データが更新されたらラスタタイ ルを作り直し B. ベクターで配信して

    スタイリングで頑張る 鮮明・軽い・クリックできる。ただし 記号の表現はWebGISライブラリ の仕様の範囲内 ⇒綺麗で速そうなBの方式で頑張ってみたい! WebGIS で DM をきれいに表現する 5 / 20
  3. MapLibre GL JSでDMをがんばる Mapbox GL JS v1 から fork した

    OSS(2020 年 末、BSD ライセンス) ベクタタイルをブラウザ側で描く Web 地図ライブラリ 見た目は Style JSON で定義。1 レイヤ = 1 つの型( type は 10 種類) ⇒ 今回、MapLibreでDMを表現してみたい https://maplibre.org/projects/gl-js/ WebGIS で DM をきれいに表現する 6 / 20
  4. line-pattern で描いてみた ケバの画像を作って、線に沿って繰り返す なんか、違う。。。 • 角でケバが重なったり消えたりする • タイルの境目で間隔がズレる • mm

    の間隔を書く場所がない:周期は画像 px × 線幅比。線幅や小数ズームで勝手に伸縮する ⇒ 画像を作り直しても、間隔をいじって も直らない。図式の「X mm」を書く場所 もない WebGIS で DM をきれいに表現する 8 / 20
  5. さっきの 2 つは、こう書いていた 本家の機能で寄せられる限り寄せた設定。 8 枚目: line-pattern 線に柄を貼る 9 枚目:

    symbol-placement: line 線に柄を並べる // ケバ画像: 幅=間隔 24px、高さ=ケバ長×2+2px、下半分だけに線 // (本家は画像の上端を進行左側に貼る → 右側に出すには下半分に描く) // pixelRatio 2 の高解像度画像でボケを抑える(できる範囲の対策) map.addImage("tick", img48x60, { pixelRatio: 2 }); // ケバ 1 本ぶんの画像(幅 6px・高さ 14px、pixelRatio 2) map.addImage("tick", img12x28, { pixelRatio: 2 }); { "type": "symbol", "source": "lines", "layout": { "symbol-placement": "line", "symbol-spacing": 24, // px。タイル生成ズームで確定 "symbol-avoid-edges": false, "icon-image": "tick", "icon-anchor": "top", // 上端を線に置き右側へ垂らす "icon-rotation-alignment": "map", // 線の向きに合わせて板を回す "icon-pitch-alignment": "map", "icon-keep-upright": false, "icon-allow-overlap": true, // 衝突判定で消さない "icon-ignore-placement": true, "icon-padding": 0 } } { "type": "line", "source": "lines", "layout": { "line-join": "miter", "line-cap": "butt" }, "paint": { "line-width": 30, // 画像の高さ=線幅(ケバ長 14 + 余白) "line-pattern": "tick" // 線に沿って隙間なく繰り返す } } WebGIS で DM をきれいに表現する 10 / 20
  6. 標準のスタイル定義だけだと実現はむずかしい v_linesofar(図の s):線の始点から線に沿って足した距離(タイル座標単位)。角でも途切れず伸び続 ける タイル境界:次のタイルでは距離を 0 から数え直す → 柄が飛ぶ。lineMetrics で繋

    ぐと周期が線長依存になり、今度は間隔が崩れる s=1200 s=0 に戻る pattern_pos = mod(v_linesofar, period) s=0 s=240 s=480 直線:距離どおりに柄が並ぶ。問題なし ⇒ 線の頭からpxで数えた距離を頼りに柄を貼っている。 ・間隔はmm指定、ケバなどを表現する長さもmm指定 ・タイルが切れても当然間隔は維持しないといけない WebGIS で DM をきれいに表現する 11 / 20
  7. 足したのが cartographic-line 線に沿って印を打ち、そこに記号の形を作る 線に沿って X mm ごとに印を打つ(メジャーを線に当 てていく感じ。距離は印の位置を決めるだけに使う) Worker 内のイメージ

    印の場所に、記号の形そのものを頂点データで作る。 帯に柄を貼るのではなく、印ごとに「置く」 基線は既存の line に任せる。飾りだけこの型で重ね る • が印の場所 WebGIS で DM をきれいに表現する 13 / 20
  8. スタイルはこう書く 図式表の mm をそのまま書く { "type": "cartographic-line", "filter": ["==", ["get",

    "分類コード"], 6141], "layout": { "cl-shape": "tick", // ケバ "cl-side": "right", // 敷地側 "cl-interval": 4.0, // 4.0 mm 間隔 "cl-length": 0.5, // 0.5 mm "cl-stroke-width": 0.15, // 線の太さ 0.15 mm "cl-base-scale": 500 // 縮尺分母 }, "paint": { "cl-color": "#111" } } 図式表に「4 mm 間隔、長さ 0.5 mm」と 書いてあれば、そのまま書く cl-base-scale は縮尺分母。「これは 1/500 の紙の 上の mm ですよ」という宣言 各プロパティの意味(図式: 堅ろう塀 6141 = 4 mm 間隔・長さ 0.5 mm) cl-interval 4.0 mm 印の間隔 基線(line) cl-length 0.5 mm ケバの長さ(線に垂直) cl-stroke-width 0.15 mm ケバ線そのものの太さ ※ どれも「cl-base-scale の縮尺の紙の上の mm」。0.5 mm × 500 = 地上 0.25 m WebGIS で DM をきれいに表現する 14 / 20