Maplat – Historical Maps Viewer, guarantees nonlinear bijective projection 大塚恒平 (Kohei Otsuka) 1
Mar 17, 2018
• 大塚恒平 (Kohei Otsuka)
• エンターテイメント分野で位置情報業界14年
• Mapion社 - 位置情報ゲーム「ケータイ国盗り合戦」立ち上げに参加
企画開発双方のディレクション、シナリオ作成、プログラム実装
• ATR-Promotions (現Stroly社) - 古地図アプリ「ちずぶらり」シリーズ立ち上げに参加
企画開発双方のディレクション、プログラム実装、特許開発
• 現在は本業はHERE Technologies社で地図コンテンツ/プラットフォーム双方
の技術サポート業務
• Code for NARA横浜支部所属の元、Maplatを始めとしてCode4XMap、地蔵プ
ロジェクトなどを私的に運営
4
• 古地図を歪めず、美しさを損ねずに現代地図と切り替え/リアルタイム重ね合わせ(世界初)• 中心位置だけでなく、方角/縮尺もピッタリ変換(Web版
では世界初)• データ側エラーがなければ、あらゆる古地図間で座標系
全域1対1座標変換(全単射変換)を保証(世界初/特許申請予定)• 全てオープンソース• 座標変換ロジック(turf.js)、エラー検出ロジック
(mapshaper)、表示API(OpenLayers4)まで、FOSS4Gで構成• 既存のTMS/WMTS古地図とも共存可能
• 高機能データエディタ12
GPS 表示On/Off
ホーム位置に戻る
Maplatプロジェクト
ページへ(外部リンク)
背景地図切替スライダ
重ね合わせ地図(古地図/絵地図)切替スライダ
重ね合わせ地図透明度調整
アトリビューション表示
方角表示&
回転リセット表示
14現行ビューア(CodeName: Otter-bay)
地図切替
重ね合わせ地図切替スライダの切替&クリック
で古地図切替
背景地図切替スライダの切替&クリックで
背景地図切替 それぞれのスライダクリックで背景地図/古地図切替
15
© OpenStreetMap
©国土地理院
対応点入力
対応点入力タブ
与えられた対応点から変換用三角形網を自動計算
古地図/対応地図とも、マッピングしやすいよう自由に回転可能
地図4隅の対応
点は独自ロジックで自動計算
22
© OpenStreetMap
トポロジーエラー検出
トポロジーエラー発生時は自動検知
エラー発生点表示
エラー発生点にジャンプ
エラー解消困難な際はエラー許容モードに変更も可能(全単射変換は保証されない)
24
© OpenStreetMap
全単射変換とは
• どんな地図の間でも、同じ点を連続変換すれば必ず同じ場所に戻る
• 地図の内部だけではなく、地図外の座標領域含め一意に相互変換
• ただし、データのトポロジーエラーが解決されている事が必要(エラーの有無はMaplatEditorで判定可能)
27
類似技術との比較 (連続変換)
Maplat Stroly
変換点は、Maplat側で
トポロジーエラー解決のため数点加えた以外は同じデータを使用
トポロジーの維持が保証される技術なので、エンタメ用途だけでなく、公的な用途(地籍図への適用など)が考えられる
38
© Stroly
全域でのラウンドトリップ変換 39
Maplatによる変換
Strolyによる変換
ラウンドトリップ後の平均変換誤差(ピクセル)Maplat: 1.79e-10Stroly: 10.65
変換速度(2601回変換)Maplat: 85msStroly: 232ms
https://jsfiddle.net/kochizufan/vs3o6erj/
類似技術での擬似全単射対応
• Strolyでは全単射変換はできないが、「少しでも」全単射「っぽく」見
せる手法で特許取得• Strolyで全単射変換できないことと、全単射機能自体が重要な機能であるこ
との証明になる => それをネイティブにできるMaplatの新規性
• 特許5810411号
• 請求項2• 前記第1地図および前記第2地図のうちの一方の地図から、他方の地図への表示の切り替えを実行し
た後、前記他方の地図の表示中に、前記他方の地図について、表示される領域が変更されるような操作を行うことなく、再び、前記一方を表示するような切替操作が前記受付手段を介してなされたと、前記表示情報に基づき判断した場合、前記第1および第2の注視点について、前記非線形変換を
行うことなく、前記他方から前記一方を表示するための表示の切り替え処理を行う
• 請求項9• (前略)…表示切替の指示が複数回繰り返された際に、前記非線形
変換による変形誤差に応じた前記対応する位置の前記表示画面上の表示位置の誤差が所定値以下となるように、前記表示制御手段による表示を調整する調整手段を含み…(後略)
元の場所に戻らない場合は、数度双方向変換を繰り返し、収束したならその値を使う
地図を切り換え、切換先の地図で視点を動かさずに元の地図に戻る場合は、座標変換
処理せずに元の場所に戻す
40
距離を考慮した加重変換
A
A
B
B
C
C
古地図側 対応地図側古地図特有の距離の歪んだ表現を、そのまま変換すると端部分で急に変換
比率が変化する
比率変化をマイルドにするため、周辺対応点との距離平均を指標として
加重変換
49
全単射保証前のロジック
正変換と逆変換で異なる三角網を使用、変換先でのトポロジーエラーは無視される(単射でない)
トポロジーエラー
※現行ロジックでもトポロジーエラー存在時はこのモードで動かすことも可能
52
トポロジーエラー ケース2
エラー)
解消)
A
A
B
BC
C
D D
A
A
B
B
C
C
D Dトポロジーエラー解消用対応点を追加し、エラー解消
EE
手順は確立しているが自動化まではできていない => 手動で修正
57
• 1番のお勧めは会津若松版 (先述)• 英語環境からアクセスすれば国際版も稼働中
• その他のサンプル• 一部、データが古く全単射変換未対応のもの
もあります• 上田市版 (https://bit.ly/uedamap)• 盛岡市版 (https://bit.ly/moriokamap)• 鯖江市版 (https://bit.ly/sabaemap)• 奈良市版 (https://bit.ly/naramap)
• その他のプロジェクトとのコラボレーション• 地蔵プロジェクト
(https://github.com/code4nara/JizoProject/wiki)とのコラボレーションhttps://bit.ly/narajizomap 59
直近の展開
• スタンプラリー機能と組み合わせた商用観光ソリューションに採用予定• Geoアクティビティコンテストで協業者が発表します
• 他ソースの自動コンパイル機能• Stroly, David Ramsey Collection, MapWarperなどの他ソースから自動変換
• JavaScript以外への展開• 個人的にはXamarin展開を優先したい
61
独自ノウハウの拡充
• 点と点だけでなく、線を線に変換する技術検討中
• 地図の定義と変換テーブル、タイル画像をセットとしてまとめて配信できるデータフォーマット検討中• WebからはHTTP Byte Rangeリクエストでランダムアクセス
• サーバレスでの関連諸技術検討中 => 懇親会ライトニングトークで• 古地図タイル化をサーバレスで実施• 分散型古地図共有リポジトリ• 古地図データの登録を受け付ける登録API• 古地図の存在はUTFGridで検知 => ベクトルタイルで検知
両者を点ではなく線として変換する
62
© OpenStreetMap
副産物の活用
• 生成した対応点を元にシンプレートスプライン変換画像のTMSタ
イル等も提供• 時代を橋渡ししての位置特定用途等に寄与
(明治期の地図の海岸線を使って、江戸期の海岸線の位置特定など)
• 三角網での、実距離との比較を元に古地図/絵地図の歪み要素の比較指標を定義• 古地図内での注視点ごとの歪み度合いを時代比較して主題の変化を確認
• 古地図ごとに 適な変換(Maplatを使うか、TMSタイルに変換するか)を評価す
る指標にもなりうる
63
将来の展開
• 3D Maplatの実現• 国土地理院の標高タイル形式でMaplat古地図タイル向けの標高タイルを定義す
ることは可能(というか既にテスト作成済み)
• Cesiumで読み込ませて古地図タイルと表示する事で、古地図の3D表示が実現可能
• 高さの値の正規化要否は検討要
• 鳥瞰図、写真Maplatの実現• 比較対象投影地図側に高さ情報を含んだ投影を想定
• 鳥瞰図上で現在地表示、写真を3D地図に重ね合わせ
• 古写真、浮世絵と現代写真、3D地図の重ね合わせ
64