稚内〜利尻・礼文航路(ハートランドフェリー


Date/Time: 2018:05:28 09:03:59
Camera: PENTAX
Model: PENTAX K-5 II s
Exporsure Time: 1/1600
FNumber: 8.0
Aperture Value: 6.0
Focal Length: 21.0

Close

y2blog » iPhone用GPSナビに挑戦 #1

12

07

2011

iPhone用GPSナビに挑戦 #1

iPhone用GPSナビ作成に向けて下調べ


私自身 iOS系のアプリ開発はまだ不慣れで、Appleが提供しているリソースやツール等の知識が不十分です.今後執筆する記事には見当違いや間違った内容が含まれているかもしれませんが、自分が知り得た事や土壺にはまった事などを記事として公開していくつもりです.


まだ開発に取り掛かったばかりで、アプリケーションの基本的な構想も固まっていませんが、暇を見つけては記事をアップしていきたいと思います.


Appleが提供している CoreLocation Frameworkについて


iPhone用GPSナビアプリを開発するにあたり、先ずはAppleがフレームワークとしてデベロッパに提供しているCoreLocation Frameworkの機能について調査してみることにしました.


先ずは、Appleがデベロッパ向けに提供しているiOS関連のリソース(iOS Dev Center)を当たってみることにしました.


基本的にAppleのデベロッパ向けのドキュメントは英語ですが、最近では一部のドキュメントは日本語化されているようです.


iOS関連の日本語ドキュメント: http://developer.apple.com/jp/devcenter/ios/library/japanese.html
英語が苦手な人にとってはAppleのデベロッパ向けのドキュメントを読むのは苦痛でしょうが、Apple系の開発に限らずインターネットの世界に携わるには英語のドキュメントに慣れるのは必須条件ですので頑張って下さい.


幸いなことに、CoreLocation フレームワークについての『位置情報対応プログラミングガイド』が日本語で公開されています.


このドキュメントでは位置情報の取得方法やジオコーディング、MapKitを用いた地図の表示などについて書かれていますので、何らかのGPSマップアプリを開発する際には必読のドキュメントですね.残念ながらMapKitはGoogle Mapsベースですので、国土地理院の電子国土を利用する場合には自分で何らかのフレームワークを作成しなければならないでしょう.


CoreLocation フレームワークについてはまだ調査を始めたばかりですので、もう少し内容を理解してから紹介したいと思います.


文書だけの記事だと見栄えがしないので、とりあえずAppleが用意してあるサンプルコード(LocateMe)をXcodeを用いてiPhoneシミュレータ上で動かしてみた様子を穴埋め的に紹介しておきます.

サンプルコード “LocateMe” をビルドしてみる


“LocateMe”は iOS Developer Library [ http://developer.apple.com/library/ios/#samplecode/LocateMe/Introduction/Intro.html ] からダウンロードすることができます.ダウンロードした “LocateMe.zip” を解凍すると XCode用のプロジェクトファイルやコード、各種リソース類などビルドに必要なリソースが一式入っています.

"LocateMe" をビルド
Xcode4.2で “LocateMe” サンプルをビルドして実行してみる

“LocateMe” を Snow Leopard環境下で Xcode3.2.6 + iOS SDK4.2 で試して見ましたが、何故か iOSシミュレータ上では位置情報が全く取得できませんでした.Core Locationフレームワークを用いる場合はiOS5環境で開発を行う方が無難な様です.


Xcodeのプロジェクトファイル “LocateMe.xcodeproj” を Lion環境のXcode4.2で開き、ビルドして実行してみます.恐らく問題無くビルドが成功しiPhoneシミュレータ(iOS5) が起動し”LocateMe”アプリが起動することと思います.


“LocateMe”には “GetLocation” と”Track Location” の2つの機能があるようですが、”GetLocation” を選び、”Start” ボタンをクリックすると”Configure”(設定)ダイアログが現れます. “Desired Accuracy”(要求する精度)と “Timoeout” のパラメータを適当にセットし “Done” ボタンを押すと位置情報の取得に入りますが、現在位置の情報を “LocateMe” が利用しても良いかどうか確認のアラートダイアログが現れます.”OK” をクリックして先へ進めると、”Status” 欄には”Aquired Location” が表示され、数十秒後には “Timed Out” に変わります.


“Best Mesurement” 欄と “All Mesurements” 欄が表示されていますが、ここには緯度・経度情報を10進表記で表した数値と、取得した日時が表示されています.この欄をクリックすると “Accuracy”〔精度)や “Cource and Speed” 〔コースとスピード)などの付随情報が表示されます.

GetLocation
Get Locationを選ぶ
Configure Dialog
精度やタイムアウトなどを設定する
Confirmation Dialog
現在地情報を取得して良いかどうかの確認
Aquired Location
ダミーの現在地情報が表示される

残念ながらこの緯度・経度の数値はiPhoneシミュレータでは常に固定(San Franciscoのダウンタウンの中心部マーケットストリートにあるApple Store)で表示されてしまいますが、実機ではその場所の緯度・経度が表示されるでしょう.尚、この緯度経度の値に関してはクパチーノのApple本社の緯度経度が表示されていたようですが、現在はSan FranciscoのApple Store に変更されたようです.
【補足】 iPhoneSDK 4 以降はiPhoneシミュレータの “Debug” メニューにある “Location” => “Custom Location…” でiPhoneシミュレータで現在地のロケーションを自由に設定できるようになっています.


“LocateMe” サンプルは Core Location フレームワークの機能だけを知るには、少し大袈裟かもしれません.Core Location フレームワークを用いて緯度・経度や標高、方位だけを取り出す方法については別な機会にもっと単純なサンプルコードを用いて紹介したいと思います.


まだCore Location フレームワークの機能を把握できていませんが、どうやらユーザが設定した有る一定距離を閾値として位置情報取得イベントが発生する仕組みの様ですね.一般的なGPSロガーの様に、一定時間毎にイベントを発生させることができた方がGPSロガーとしての使い勝手は良いのですが、この辺のところについてはもう少し調べてみることにします.


Core Location フレームワーク自体は GPS衛星からの直接取得、Wi-Fiアクセスポイント情報、3G回線の基地局の情報などを自動的に組み合わせて最適な位置情報を取得しているようです.山歩きの場合には必然的にGPS衛星からの直接取得に頼ることになると思いますが、果たしてiPhoneのGPSチップがどの程度実用に耐えられるのか不安な面もありますが、今後実地テスト等を重ねてみるつもりです.


数万円から10万円近くもするGarminなどのGPSナビゲーションシステムには遠く及ばなくても、手持ちのiPhoneが簡易GPSナビとして使えれば貧乏登山家には福音ですね.ただ不安材料としてはiPhoneがアウトドア用途には全く向いていない(防水能力ゼロ)こととバッテリーの持ち時間ですね.


これまでは Softbankの貧弱な電波環境のためiPhoneを山へ持って行くことはありませんでしたが、auからもiPhoneが発売されたので山の中での電波状況は大分良くなったのではないかと思います.後はDocomoがiPhoneを出してくれれば良いのですが...


単純にGPSナビとしてだけ使うのであれば、携帯の電波の届かない山の中でも支障はないのですが、緊急時の通信手段としてはiPhoneは全く役に立ちませんね.