maplat – historical maps viewer, guarantees nonlinear bijective projection

66
Maplat – Historical Maps Viewer, guarantees nonlinear bijective projection 大塚恒平 (Kohei Otsuka) 1

Upload: -

Post on 17-Mar-2018

978 views

Category:

Technology


0 download

TRANSCRIPT

Maplat – Historical Maps Viewer, guarantees nonlinear bijective projection大塚恒平 (Kohei Otsuka)

1

日本語発表です

2

Self-introduction

3

• 大塚恒平 (Kohei Otsuka)

• エンターテイメント分野で位置情報業界14年

• Mapion社 - 位置情報ゲーム「ケータイ国盗り合戦」立ち上げに参加

企画開発双方のディレクション、シナリオ作成、プログラム実装

• ATR-Promotions (現Stroly社) - 古地図アプリ「ちずぶらり」シリーズ立ち上げに参加

企画開発双方のディレクション、プログラム実装、特許開発

• 現在は本業はHERE Technologies社で地図コンテンツ/プラットフォーム双方

の技術サポート業務

• Code for NARA横浜支部所属の元、Maplatを始めとしてCode4XMap、地蔵プ

ロジェクトなどを私的に運営

4

What is Maplat?

5

古地図/絵地図で街歩きができるアプリ/基礎技術 6

© OpenStreetMap ©会津若松観光ビューロー

MIT ライセンス

7

https://github.com/code4nara/Maplat/wiki

でgithub公開中

8

動作サンプルも公開中https://bit.ly/aizumap (会津若松版サンプル)

データエディタは別プロジェクトhttps://github.com/code4nara/MaplatEditor/wiki 9

商用アプリへの採用実績 10

©上越市

©村山市

※過去バージョンMaplatのため、全単射

変換等にはまだ対応していません

特徴

11

• 古地図を歪めず、美しさを損ねずに現代地図と切り替え/リアルタイム重ね合わせ(世界初)• 中心位置だけでなく、方角/縮尺もピッタリ変換(Web版

では世界初)• データ側エラーがなければ、あらゆる古地図間で座標系

全域1対1座標変換(全単射変換)を保証(世界初/特許申請予定)• 全てオープンソース• 座標変換ロジック(turf.js)、エラー検出ロジック

(mapshaper)、表示API(OpenLayers4)まで、FOSS4Gで構成• 既存のTMS/WMTS古地図とも共存可能

• 高機能データエディタ12

古地図ビューア

13

GPS 表示On/Off

ホーム位置に戻る

Maplatプロジェクト

ページへ(外部リンク)

背景地図切替スライダ

重ね合わせ地図(古地図/絵地図)切替スライダ

重ね合わせ地図透明度調整

アトリビューション表示

方角表示&

回転リセット表示

14現行ビューア(CodeName: Otter-bay)

地図切替

重ね合わせ地図切替スライダの切替&クリック

で古地図切替

背景地図切替スライダの切替&クリックで

背景地図切替 それぞれのスライダクリックで背景地図/古地図切替

15

© OpenStreetMap

©国土地理院

古地図透明度切替

透明度スライダで背景地図とのリアルタイム比較可能

16

©国土地理院

GPS連動位置表示切替

GPSボタンで

現在地を位置精度含めて表示

地図を切り替えても対応するGPS位置を計算し表示継続

17

©国土地理院

POI表示

POIピンクリッ

クで、対応データポップアップ表示

データ表示だけでなく、Wikipedia等外部ソースの埋め込み表示も可能

18

データ作成

19

MaplatEditorで対応点データ作成

新規地図追加

現行コードネーム:taotie

20

メタデータ入力

メタデータ属性は今後随時追加

メタデータ入力タブ

地図画像アップロード(自動タイル化)

21

対応点入力

対応点入力タブ

与えられた対応点から変換用三角形網を自動計算

古地図/対応地図とも、マッピングしやすいよう自由に回転可能

地図4隅の対応

点は独自ロジックで自動計算

22

© OpenStreetMap

対応地図切換

対応地図を切換可能、地理院過去航空写真、今昔マップ等

23

©国土地理院

トポロジーエラー検出

トポロジーエラー発生時は自動検知

エラー発生点表示

エラー発生点にジャンプ

エラー解消困難な際はエラー許容モードに変更も可能(全単射変換は保証されない)

24

© OpenStreetMap

即座の変換テスト

左クリックで即座に変換テスト起動

古地図ó対応地

図、どちらの方向でもテスト可能

将来的に、縮尺方角のテストにも対応

25

© OpenStreetMap

全単射変換

26

全単射変換とは

• どんな地図の間でも、同じ点を連続変換すれば必ず同じ場所に戻る

• 地図の内部だけではなく、地図外の座標領域含め一意に相互変換

• ただし、データのトポロジーエラーが解決されている事が必要(エラーの有無はMaplatEditorで判定可能)

27

類似技術との比較 (連続変換)

Maplat Stroly

変換点は、Maplat側で

トポロジーエラー解決のため数点加えた以外は同じデータを使用

28

© Stroly

類似技術との比較 (連続変換)

Maplat Stroly

変換点は、Maplat側で

トポロジーエラー解決のため数点加えた以外は同じデータを使用

29

© Stroly

類似技術との比較 (連続変換)

Maplat Stroly

変換点は、Maplat側で

トポロジーエラー解決のため数点加えた以外は同じデータを使用

30

© Stroly

類似技術との比較 (連続変換)

Maplat Stroly

変換点は、Maplat側で

トポロジーエラー解決のため数点加えた以外は同じデータを使用

31

© Stroly

類似技術との比較 (連続変換)

Maplat Stroly

変換点は、Maplat側で

トポロジーエラー解決のため数点加えた以外は同じデータを使用

32

© Stroly

類似技術との比較 (連続変換)

Maplat Stroly

変換点は、Maplat側で

トポロジーエラー解決のため数点加えた以外は同じデータを使用

33

© Stroly

類似技術との比較 (連続変換)

Maplat Stroly

変換点は、Maplat側で

トポロジーエラー解決のため数点加えた以外は同じデータを使用

34

© Stroly

類似技術との比較 (連続変換)

Maplat Stroly

変換点は、Maplat側で

トポロジーエラー解決のため数点加えた以外は同じデータを使用

35

© Stroly

類似技術との比較 (連続変換)

Maplat Stroly

変換点は、Maplat側で

トポロジーエラー解決のため数点加えた以外は同じデータを使用

36

© Stroly

類似技術との比較 (連続変換)

Maplat Stroly

変換点は、Maplat側で

トポロジーエラー解決のため数点加えた以外は同じデータを使用

37

© Stroly

類似技術との比較 (連続変換)

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

技術詳細

41

三角形網を用いた変換手法

42

三角網内の変換の定義

この領域の変換は定義可能

三角形網生成はFOSS4Gのturf.jsを利用

43

古地図側 対応地図側

三角網内の変換の定義

この領域の変換は定義可能

三角形網生成はFOSS4Gのturf.jsを利用

44

古地図側 対応地図側

三角網内の変換の定義

この領域の変換は定義可能

三角形網生成はFOSS4Gのturf.jsを利用

45

古地図側 対応地図側

三角網外の変換の定義(1)

地図外郭に対応する四角形を独自定義

46

古地図側 対応地図側

三角網外の変換の定義(2) 47

古地図側 対応地図側地図外郭頂点と対応点重心を頂点とする三角形を定義し、地図外はその三角形を

無限延長して変換

周辺対応点との距離比率を考慮した加重変換

48

距離を考慮した加重変換

A

A

B

B

C

C

古地図側 対応地図側古地図特有の距離の歪んだ表現を、そのまま変換すると端部分で急に変換

比率が変化する

比率変化をマイルドにするため、周辺対応点との距離平均を指標として

加重変換

49

距離を考慮した加重変換の例 50

© OpenStreetMap

トポロジーエラーを解消し全単射変換保証

51

全単射保証前のロジック

正変換と逆変換で異なる三角網を使用、変換先でのトポロジーエラーは無視される(単射でない)

トポロジーエラー

※現行ロジックでもトポロジーエラー存在時はこのモードで動かすことも可能

52

全単射保証後のロジック

正変換と逆変換で一致する三角網を使用するため、

全単射が保証される

53

トポロジーエラー発生時の対応

トポロジーエラーを検知し、単純なものは自動修正&複雑なものはエディタ

上で修正を促すトポロジーエラー

54

トポロジーエラーの2類型

A

A

A

A

B

B

B

B

C

C

C

C

DD

D D

ケース 1)

ケース 2)

55

トポロジーエラー ケース1

A

A

B

B

C

C

DDエラー)

解消)

繋ぎ変えを行えばエラー解消=>自動解消機能を実装済

A

A

B

BC

C

DD

56

トポロジーエラー ケース2

エラー)

解消)

A

A

B

BC

C

D D

A

A

B

B

C

C

D Dトポロジーエラー解消用対応点を追加し、エラー解消

EE

手順は確立しているが自動化まではできていない => 手動で修正

57

サンプル

58

• 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

今後の展開

60

直近の展開

• スタンプラリー機能と組み合わせた商用観光ソリューションに採用予定• 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

日本発のFOSS4Gソリューション

として広く世界に知られるよう頑張ります

65

66