19
9

More than 3 years have passed since last update.

ブラウザだけでジオリファレンス

Last updated at Posted at 2019-12-12

これは FOSS4G Advent Calendar 2019 の13日目の記事です。

はじめに

ブラウザの地図上で直接画像を変形させてジオリファレンス~地図タイル生成ができるツールを GitHub 上に公開しました。HTML と Javascript ですべてをやってしまうので、特別なサーバは不要です。

Aplication https://frogcat.github.io/petaviron/
GitHub https://github.com/frogcat/petaviron

image.png

使い方

1. 準備

とりあえず地図の上にのせてみたい画像ファイルをどこかから持ってきて保存しておきましょう。以下の例では 二子玉川小学校付近空撮2.jpg をダウンロードして使っています。

2. 画像のオーバーレイ

まずブラウザで
https://frogcat.github.io/petaviron/ を開きましょう。地図が表示されていますね。

画面中心に「Click me to overlay your image」というボタンがあるので押します。

image.png

ファイルダイアログが表示されるので、ダウンロードしておいた 二子玉川小学校付近空撮2.jpg を選択して 開く ボタンを押しましょう。

image.png

画像が地図上に表示されましたね?

image.png

TIPS

画像をアップロードする前に作業したいエリアが表示されるように、地図をズーム&パンしておきましょう。

3. ジオリファレンス

画像の四隅にはマーカーがあるので、言われるがままにドラッグしてみましょう。マーカーに合わせて画像が変形していきます。

image.png

いいかんじに画像が重なるようにマーカーを動かしていきます。

image.png

地図を拡大縮小したり

image.png

Opacity スライダーで画像の透明度を変更したりしながら作業していきます。

image.png

TIPS

画像をクリックするとマーカーが追加できます。自分で追加したマーカーは削除も可能です。

イラストやデフォルメされた地図などの場合は、こんな風に四隅をだいたい合わせてから

image.png

動かしたい部分をクリックしてマーカーを追加、ピッタリあうように動かしていきましょう。

image.png

4. タイルの生成

満足がいったら save ボタンを押しましょう。

image.png

petaviron000000000000.zip のようなファイルがダウンロードされます。

image.png

展開してみましょう。タイルを収録したフォルダが見えますね。

image.png

これを適当な Web サーバにアップすると、みんなが使える地図タイルとして公開できます。ためしに GitHub に公開して GitHub Pages で見たものがこちら。作業結果がタイルに反映されていますね。

image.png

TIPS

ダウンロードされるファイルの中にはタイル画像以外にプレビュー用の index.htmltilejson spec 2.2.0 に従った tilejson.json ファイルが含まれています。

index.html の上部には https://frogcat.github.io/petaviron-example/{z}/{x}/{y}.png のような、いわゆるタイルURLが表示されるようになっています。別の GIS ソフトやウェブサービスにタイルを載せるときには、だいたいこのタイルURLが必要になるので覚えておきましょう。

5. 地理院地図にのせてみる

https://frogcat.github.io/petaviron-example/{z}/{x}/{y}.png をクリップボードにコピーしておきましょう。

https://maps.gsi.go.jp/ を開いて 機能 > ツール > 外部タイル読込 を選択します。

image.png

するとこのように外部タイル読込のダイアログが表示されます。

image.png

レイヤー名 欄に適当なレイヤー名を、URL 欄に先ほどコピーしたタイルURLをぺースト、 上記の内容で読み込み開始 ボタンを押します。

image.png

自力でタイルが表示されているであろう東京都世田谷区の二子玉川あたりにズームパンしてみましょう。

image.png

かさなってますね。

技術情報

画像の変形

https://github.com/mapbox/delaunator で TIN 分割した結果を WebGL 上に Triangle としてあたえて、そこに Texture を載せているというものです。https://github.com/frogcat/canvas-morph という拡張としてカプセル化しています。くわしくはソースをどうぞ。

タイルの生成

Canvas の表示内容は (WebGL であっても) HTMLCanvasElement.toBlob メソッドで png などに変換することができます。
これで必要なタイル blob を生成して JSZip で zip にして FileSaver.js を使ってダウンロードさせる、という仕組みです。こちらもくわしくはソースをどうぞ。

まとめ

手軽にジオリファレンスしたい方、どうぞ使ってみてください。

19
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
9