Windows 7 Sensor & Location Platformを使ってみよう!! – その4


さて、今回は、Visual Studio 2010 Beta 2に入った、ロケーション系のManagedライブラリを紹介してみましょう。


まず準備として、Visual Studio 2010 Beta 2をインストールします。インストールは、
http://www.microsoft.com/japan/visualstudio/products/2010/default.mspx
から。


そして、ロケーション情報を取得するための、GPSやサービスが必要です。私のWin 7 PCのコントロールパネルの”ハードウェアとサウンド”→”位置センサーとその他のセンサー”を開くと、OrionやLegacy GPS Driver、Skyhook Wiress XPS Location Sensorなどが入っています。皆さんの環境がどうなっているか分からないので、とりあえず、Bingで調べてみたら、
http://www.u-blox.com/ja/usb-drivers/windows-7-driver.html
があったので、紹介しておきますね。私は、Legacy GPS Driver(アメリカでMSが販売しているStreet & Trip付属のGPS)を使いました。


まず、Visual Studio 2010でWPFアプリケーションプロジェクトを作成します。
次にプロジェクトに参照を追加します。追加するのは、System.Device.dllです。.NET V4のアッセンブリーの一覧に出てきます。


プログラムの先頭に





using System.Device; 

を追加し、MainWindows.xamlにボタンを一個追加し、XAML Editorでボタンをダブルクリックしてハンドラーを用意します。そこに、






GeoLocationProvider provider = new GeoLocationProvider();
provider.Start();
GeoLocation location = provider.Location;
……
provider.Stop();


と書き、F5デバッグ実行し、ボタンをクリックしてみましょう。GeoLocationには、以下のプロパティが用意されています。



  • Address

  • Coordinate

  • Heading

  • Speed

  • Timestamp

Addressは、住所や郵便番号など論理的な位置情報です。(私の環境では取得できなかった)Coordinateは緯度、経度、高度が得られます。(こっちは取得できた)Headingはちょっとわからないな。Speedは移動距離、Timestampは、位置情報を取得した時間を参照できます。これらの値は、Windows 7 SDKのsensors.hで定義されているLocationセンサーのプロパティとして定義されているものがそのまま取得できるようになっているようです。詳しいことは、すでにMSDNのライブラリ
http://msdn.microsoft.com/en-us/library/system.device.location(VS.100).aspx
に書かれているので(ベータレベルなのでちょっと情報不足?)、見てみてね。


先ほどのコードは、同期参照のコードでしたね。位置情報が変わったときに通知されるアプリを書きたい場合は、GeoLocationProviderのLocationChangedにイベントハンドラを登録すれば、非同期参照が可能です。まだ確認はしていませんが、LocationChangedに登録したイベントハンドラには、GeoLocationChangedEventArgs型の変数が送られてきます。この変数には、先ほど紹介したGeoLocation型のプロパティLocationを持っているので、これを使えば、位置情報が参照できます。


このライブラリのメリットは、位置情報取得の役割が抽象化され、位置情報を供給しているのがGPSセンサーだろうが、無線LANのルータだろうがなんだろうが関係なく、位置情報を取得できる点にあります。COMレベルのSensor & Location Platform APIの単なるラッパーとして定義しなかったところにセンスの良さを感じますね。
まぁ、といっても、COMを使う機会があると思うので、次回は、Windows API Code Packの中身を覗いて、COM Interopの基本を解説し、そこからNativeコードでCOMレベルのSensor APIを使ったプログラムを書く方法を紹介しますね。


では、また。


その5へ 目次へ

Comments (0)

Skip to main content