地図作製

需要があるのか無いのかわからないアプリ案
スマートフォンGPS機能を使って、伊能忠敬になれるアプリを作ろうー

やりたい事は
1. 訪問した場所の周囲だけ地図が見える、RPGゲームのマップみたいなのがあったらいいな!
2. ただ訪問した場所が見えるだけだとつまんない。古地図みたいないびつな形の地図を作ろう!
3. 訪れるたび精度があがるね!伊能忠敬になりきって精密な地図を完成させよう!

GPSは正確無比だから、いかにうまく誤差をのせるて古地図みたいないい感じに歪んだ地図作るかが腕の見せ所のはず。


というわけでまずは計測方法を決める。

1. 各計測点で天文測位(太陽とか北極星とかで緯度経度を求める)を行う
2. 周囲の半径Xkm以内にある別の計測点までの方位と距離を測る
3. なるべく観測に一致するような解を最小二乗法で解く
(注 全部GPS測位結果を用いたエミュレートです)

まずは式を立てる。
点iについて
(x_i,y_i): 推測位置
(x_j,y_j): 周囲の点jの推測位置
(ax_i,ay_i): 天文測位位置, aw_i: 重み
(dx_{ij},dy_{ij}): 点i,jの差(測定方角と距離から), w_{ij}: 重み
として

点iの誤差aw_i\bigl\{(x_i-ax_i)^2+(y_i-ay_i)^2\bigr\}+{\sum_j}w_{ij}\bigl\{(x_i+dx_{ij}-x_j)^2+(y_i+dy_{ij}-y_j)^2\bigr\} を最小化するべし。
意味としては
天文測位位置にある程度近く、周囲の計測点の方角と距離がだいたい合ってる位置(xi,yi)を求めようとしてる。
細かい事はどうだっていい。

反復法でやると
x_i=\frac{aw_iax_i+{\sum_j}w_{ij}(x_j-dx_{ij})}{aw_i+{\sum_j}w_{ij}}
y_i=\frac{aw_iay_i+{\sum_j}w_{ij}(x_j-dy_{ij})}{aw_i+{\sum_j}w_{ij}}
これを全計測点iで何度も繰り返せば求まるはず!

そして・・・


赤線: 島をほぼ一周した段階での歪んだ地図
緑線: 内部の道まで網羅した結果精度が上がった地図

やりたい事は出来てるっ!


ポイントは誤差の乗せ方。
天文測位には位置に依存した系統誤差をたっぷりのせてやる。
 → 天文測位だけで正確な位置がわかっちゃったら地図が歪んでくれない
方位と距離の方は、普通に誤差をたっぷりのせても思った様に地図が歪まなかった。
 → 時間に依存する系統誤差をのせると、道を一度通るだけだと必ず歪む&同じ道を何度か通ると精度が上がるという効果も

問題点
計測点が増えた時、反復法だと収束が遅くならないか心配
 → 共役勾配法とかAlgebraic Multigrid Methodっぽいのとか使ったらよさそうな気がする
スマフォ耐えておくれ

☆☆☆今日やったのはここまで☆☆☆
グラフィック(歪んだ地図の描画方法)あたりに課題は多い。主要な名所も記されてる古地図っぽい見た目にしたいな。
出来そうな事がわかっちゃったからしばらく放置しそうな予感が・・・