Skip to content

Concepts.ja

Kohei Otsuka edited this page Jul 24, 2026 · 1 revision

概念解説(日本語)

MaplatTin の背景と理論: TIN 変換・同相写像・strict/loose モード・ Maplat エコシステムとの関係。

目次


MaplatTin が提供するもの

MaplatTin は Maplat ビューアの 中核である座標変換を実装したスタンドアロン JavaScript ライブラリです。 制御点(GCP)と境界を受け取り、Triangulated Irregular Network(TIN)を構築し、 2つの平面座標系間の双方向変換を生成します。

MaplatTin は OpenLayers に依存しません。そのため純粋な Node.js での オフライン前処理(例: MaplatTransform パイプラインの一部)にも、ブラウザでも動作します。

TIN ベースの同相変換

MaplatTin の定義的特性は、変換が以下を満たすことです:

  • 非線形 — 各三角形が独自のアフィン写像を持ち、全体として滑らかに 曲げられる変換となります。
  • 同相 — 変換は連続かつ連続な逆写像を持ち、元の画像の位相が保存 されます。折り返しや引き裂きは発生しません。
  • 双方向・全単射(strict モード時)— ソース平面上の各点はターゲット平面上の 唯一の点へ、その逆も同様に写像されます。

これが Maplat が古地図を正確な現代地図へ元の画像を歪めずに重ね合わせる 中核特性です。

TIN の構築方法

  1. 制御点(GCP)を Delaunay アルゴリズムで三角分割します (delaunator 参照)。
  2. 各三角形について、3つの GCP ペアから局所アフィン写像を計算します。
  3. 点を変換する際、その点を含む三角形を(検索インデックス経由で)特定し、 そのアフィン写像を適用します。
  4. 逆変換も同じ三角分割を用い、アフィン写像を反転させます。

strict と loose モード

三角分割が双方向全単射を保存できない場合(位相崩壊 — 通常は制御点が 折り返し三角形を作る場合)、MaplatTin は strictMode で3つの挙動を 切り替えます:

strictMode updateTin() 後の strict_status 挙動
"strict" STATUS_STRICT または例外 厳密な位相を要求。不可能なら updateTin() が例外を投げます
"auto"(デフォルト) STATUS_STRICT または STATUS_LOOSE まず strict を試み、失敗したら loose へフォールバック
"loose" STATUS_LOOSE 全単射が保証されなくても常に許可

STATUS_LOOSE では順方向変換は機能しますが、逆変換の結果が一意でない 可能性があります。往復保証が重要な場合(例: ユーザー向け地図重ね合わせ) は STATUS_STRICT を使用してください。順方向のみで十分な前処理 パイプラインでは STATUS_LOOSE を使用できます。

エッジ制約

制御点に加え、setEdges(edges)制約付きエッジを受け付けます。 これらのエッジは三角分割へ強制的に挿入されます。2つの制御点が接続された ままであるべき場合(例: 道路・川・境界に沿う)で、デフォルトの Delaunay 三角分割がそのエッジをスキップする場合に有用です。

内部の EdgeBound 制約エンジンが幾何学的な再三角分割を処理します。 詳細は tests/edgebound/ スイートを参照してください。

頂点モード(plain / birdeye)

vertexMode は境界頂点の扱いを制御します:

  • "plain" — ソース平面の境界をそのまま使用します。
  • "birdeye" — 鳥瞰図調整を適用します。ソース画像が透視歪みを持ち、 三角分割前に部分補正すべき場合に有用です。

多くの地図は "plain" を使用します。"birdeye" は透視感のある絵地図向けの 特殊モードです。

Y 軸モード

画像座標は通常 Y が下向きに増加し、地図座標は Y が上向きに増加します。 MaplatTin は yaxisMode でこれを処理します:

  • Tin.YAXIS_FOLLOW — ソース Y 軸がターゲットと同方向。
  • Tin.YAXIS_INVERT(デフォルト)— ソース Y 軸がターゲットに対して反転。

橋渡しする座標系に応じて選択してください。ピクセル → Web メルカトル変換 (Maplat のユースケース)では通常デフォルトの YAXIS_INVERT が正解です。

MaplatCore / MaplatTransform との関係

  • MaplatCore@maplat/core) は MaplatTin をライブビューア変換の内部で使用します。OpenLayers 描画と Maplat アプリデータプロトコルを MaplatTin の周囲に wrap します。
  • MaplatTransform@maplat/transform)は MaplatTin を用いてオフラインバッチパイプライン 向けのコンパイル済み変換データを事前計算する前処理ツール群です。

MaplatTin 自体は最も低レベルな構成要素: 純粋な座標計算のみで描画も I/O も 持ちません。


英語版はこちら / Read this page in English

関連項目

MaplatTin

Language / 言語

Pages / ページ

English

日本語

External / 外部

Clone this wiki locally