1
26
2012
iPhoneでGPSナビ #12: 可変長タイル画像表示(その2)
電子国土基盤地図情報の背景地図でタイリングのテスト
3種類の解像度のタイリング画像で画像のスムーズな拡大縮小ができるようになったので、本番用の基盤地図情報の背景地図を用いて動作検証を行ってみた.
計画では地図をダウンロード(キャッシング)する際に、iPhoneのスクリーンに地図を表示し、矩形の選択フレームで地図をダウンロードする範囲を決める予定であるが、今回はまだ実装できていないので、perl等を用いて簡単な地図ダウンロード用のスクリプトを作り、特定の範囲の地図を予め一括ダウンロードしておいた.
国土地理院からダウンロード可能な地図は、2500レベルの基盤地図情報から日本全図まで16レベルの地図が用意されているが、今回は4500〜1800レベルの3種類の地図を用いて検証を行った.
4500レベル基盤地図情報 15秒間隔
9000レベル基盤地図情報 30秒間隔
18000レベル基盤地図情報 60秒(1分)間隔
18000レベルの地図(scale=1.0)
18000レベルの地図を縮小表示(scale=0.5)
9000レベルの地図(scale=1.0)
4500レベルの地図(scale=1.0)
一つのレベルの地図は50%〜200%までの範囲で連続的にズームする.50%より縮小すると一段階下のレベルの画像に切り替わる.同様に拡大率が200%に達すると一段上のレベルの画像に切り替わる.画像の切り替わりは良く注意してみないと気付かないくらいスムーズに切り替わる.
このアプリをCoreLocation Manager と組み合わせると、GPSの位置情報に基づいて居場所を国土基盤地図上に表示することができる.緯度・経度の情報を地図の解像度 [degree/pixel] 情報からピクセル数に換算し、地図の基準点からのオフセットを求め、ビューポートを移動させることにより指定した位置を画面中央に表示することができる.
iOSシミュレータの “Debug” メニューの”Location” から、”Custom Location…” に野毛山動物園の三等三角点(TR35339143901)の緯度(35°26′45.19″ :35.445886)経度(139°37′24.94″:139.623596)を設定してみると、野毛山の三角点がきちんと画面中央に表示されていることが確認できる.
野毛山三角点の場所を指定して正しく地図が表示されることを確認
簡単なダウンロードスクリプトを走らせて地図データをダウンロード
imac:DownloadedMaps yasuaki$ ./getMap.pl 35.4666 139.5836 35.4327 139.6390 60
=============================================================================================
User Specified Lon: [ 139.5836(139 35 0.96) - 139.6390(139 38 20.40) ]
Lat: [ 35.4327(35 25 57.72) - 35.4666(35 27 59.76) ]
Interval: [ 60 ]
Map Bounds [ L:502500 T:127680 B:127500 R:502740 ]
---------------------------------------------------------------------------------------------
Row: 1 Col: 1 URL: http://cyberjapandata.gsi.go.jp/data/60nti/new/50250000/50250000-12750000-img.png
--19:38:15-- http://cyberjapandata.gsi.go.jp/data/60nti/new/50250000/50250000-12750000-img.png
=> `60nti/new/50250000-12750000-img.png'
Resolving cyberjapandata.gsi.go.jp... 203.180.164.48, 202.32.224.48
Connecting to cyberjapandata.gsi.go.jp[203.180.164.48]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 43,210 [image/png]
100%[====================================================================>] 43,210 --.--K/s
19:38:15 (1.21 MB/s) - `60nti/new/50250000-12750000-img.png' saved [43210/43210]
Row: 1 Col: 2 URL: http://cyberjapandata.gsi.go.jp/data/60nti/new/50256000/50256000-12750000-img.png
--19:38:17-- http://cyberjapandata.gsi.go.jp/data/60nti/new/50256000/50256000-12750000-img.png
=> `60nti/new/50256000-12750000-img.png'
Resolving cyberjapandata.gsi.go.jp... 203.180.164.48, 202.32.224.48
Connecting to cyberjapandata.gsi.go.jp[203.180.164.48]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 38,826 [image/png]
100%[====================================================================>] 38,826 --.--K/s
... 【省略】
Row: 3 Col: 4 URL: http://cyberjapandata.gsi.go.jp/data/60nti/new/50268000/50268000-12762000-img.png
--19:38:38-- http://cyberjapandata.gsi.go.jp/data/60nti/new/50268000/50268000-12762000-img.png
=> `60nti/new/50268000-12762000-img.png'
Resolving cyberjapandata.gsi.go.jp... 203.180.164.48, 202.32.224.48
Connecting to cyberjapandata.gsi.go.jp[203.180.164.48]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 15,586 [image/png]
100%[====================================================================>] 15,586 --.--K/s
19:38:38 (4.40 MB/s) - `60nti/new/50268000-12762000-img.png' saved [15586/15586]
---------------------------------------------------------------------------------------------
Checking Downloaded Map Tiles...
Row: 1 Col: 1 File: ./60nti/new/50250000-12750000-img.png Type:PNG Size: (W:300, H:368)
Row: 1 Col: 2 File: ./60nti/new/50256000-12750000-img.png Type:PNG Size: (W:300, H:368)
Row: 1 Col: 3 File: ./60nti/new/50262000-12750000-img.png Type:PNG Size: (W:300, H:368)
Row: 1 Col: 4 File: ./60nti/new/50268000-12750000-img.png Type:PNG Size: (W:300, H:368)
Row: 2 Col: 1 File: ./60nti/new/50250000-12756000-img.png Type:PNG Size: (W:300, H:368)
Row: 2 Col: 2 File: ./60nti/new/50256000-12756000-img.png Type:PNG Size: (W:300, H:368)
Row: 2 Col: 3 File: ./60nti/new/50262000-12756000-img.png Type:PNG Size: (W:300, H:368)
Row: 2 Col: 4 File: ./60nti/new/50268000-12756000-img.png Type:PNG Size: (W:300, H:368)
Row: 3 Col: 1 File: ./60nti/new/50250000-12762000-img.png Type:PNG Size: (W:300, H:368)
Row: 3 Col: 2 File: ./60nti/new/50256000-12762000-img.png Type:PNG Size: (W:300, H:368)
Row: 3 Col: 3 File: ./60nti/new/50262000-12762000-img.png Type:PNG Size: (W:300, H:368)
Row: 3 Col: 4 File: ./60nti/new/50268000-12762000-img.png Type:PNG Size: (W:300, H:368)
---------------------------------------------------------------------------------------------
Number of Map Tiles : 12 ( Rows: 3, Columns: 4 )
Minimum Map Tile Size : ( Width:300, Height:368)
Maximum Map Tile Size : ( Width:300, Height:368)
=============================================================================================
ダウンロードした背景地図データを解像度別にフォルダに格納する
ダウンロードした背景地図には緯度・経度情報がファイル名に付加されているが、このままでは地図情報を管理することができないので、とりあえず地図の範囲(緯度・経度)や解像度(ズームレベル)、タイルのサイズ、行列数などの情報をPlist形式のデータとして用意しておく.
本番では地図情報の管理はデータベースで管理するように変更する予定だが、現時点ではplistファイルに次の様な情報を格納している.
地図データを管理するための情報をPlist形式のファイルに記録しておく