マップ座標正規化機能の使い方 - crest-cassia/CrowdWalk GitHub Wiki

普段シミュレーションに使っている門司港や新国立劇場のマップデータは、標準的な CrowdWalk 座標系(平面直角座標系を90度回転させたもの)にはなっていません。このため背景地図の表示機能が使えない等の制約があります。
マップエディタの座標正規化機能を使えば、これらのマップデータを標準的な CrowdWalk 座標系に変換することが出来ます。

使い方

  • マップエディタを起動して変換するマップを表示します。
  • ノードを二つ選択します。この際、ノード間の距離がX・Y方向共に離れているほど変換精度が良くなります。
  • コンテキストメニューの Normalize coordinates をクリックしてダイアログを開きます。
  • Zone で平面直角座標系の系番号を選択します。
  • Node1Node2Longitude に経度、Latitude に緯度をそれぞれ入力します。ブラウザで 地理院地図 (電子国土Web) を開くとノード位置の緯度経度を調べることが出来ます。緯度経度情報は画面下の の字状の部分をクリックすると現れます。
  • 計算で求められたスケール値を変換に適用する方法を Scale で選択します。X・Y 方向別にそれぞれのスケール値を適用する場合は separately、両方向ともに平均値を適用する場合は average、両方向ともに X 方向のスケール値を適用する場合は X、両方向ともに Y 方向のスケール値を適用する場合は Y を選択します。
  • マップの回転処理をおこなう場合は Rotation をチェックします。
  • リンク長を再計算する場合は Recalc length をチェックします。
  • リンク長を再計算する際に高低差を反映する場合は Reflect height をチェックします。
  • OK をクリックして変換を実行します。
  • スケール値、回転角度等の変換パラメータがコンソールに表示されます。(この角度分反対に回転すると元のマップと同じ向きになります)

制限事項

  • マップデータの縦横比が 1:1 ではなく、更に回転も加えられている場合は正しい変換をおこなう事が出来ません。
  • 変換対象はノード座標のみです。Polygon データ(triangleMeshes, outerBoundaryIs, innerBoundaryIs)の座標は変換されません。

sample/stop-sample ディレクトリの門司港マップを変換する

  • マップエディタを起動して門司港マップを表示します。
  • ノードを二つ選択します。
moji_lower_left moji_upper_right
(33.939666, 130.954075) (33.958601, 130.969230)
  • コンテキストメニューの Normalize coordinates をクリックしてダイアログを開きます。

moji_dialog

  • Zone は 2 を選択します。
  • Node1、Node2 の Longitude に経度、Latitude に緯度をそれぞれ入力します。
  • 門司港のマップデータは縦横比が 1:1 になっていないため Scale は separately を選択します。
  • 門司港のマップデータは回転が加えられていないため Rotation のチェックを外します。
  • リンク長を再計算する必要があるため Recalc length をチェックします。
  • 標高値はすべて 0 になっているため(意味がないので) Reflect height はチェックしません。
  • OK をクリックして変換を実行します。
ITK_Info[Normalize coordinates]:scaleX = 0.9347351648849067, scaleY = 1.1180954742269034
ITK_Info[Normalize coordinates]:applied scale = separately, value = 0.9347351648849067, 1.1180954742269034

新国立劇場マップを変換する

  • マップエディタを起動して新国立劇場マップを表示します。
  • ノードを二つ選択します。
nntt_lower_left nntt_uuper_right
(35.672193, 139.682896) (35.692167, 139.691709)
  • コンテキストメニューの Normalize coordinates をクリックしてダイアログを開きます。

nntt_dialog

  • Zone は 9 を選択します。
  • Node1、Node2 の Longitude に経度、Latitude に緯度をそれぞれ入力します。
  • 元のマップデータの縦横比は 1:1 になっているので、なるべく計算誤差を減らす意味で Scale は average を選択します。
  • Rotation をチェックします。
  • リンク長を再計算する場合は Recalc length をチェックします。
  • 元のマップデータではリンク長に高低差が反映されていません。同様にする場合は Reflect height にはチェックを入れません。
  • OK をクリックして変換を実行します。
ITK_Info[Normalize coordinates]:angular_difference = -37.4885654265872
ITK_Info[Normalize coordinates]:scaleX = 0.9996102194953537, scaleY = 0.9996102194953572
ITK_Info[Normalize coordinates]:applied scale = average, value = 0.9996102194953554