.Net 4.0 C# フォームアプリからのGPS情報取得について
Visual Studio 2010 C# / .Net Framework 4.0 にて、 Windows Form アプリケーションの開発を行っています。
アプリケーションの実行環境は Windows 8.1 タブレットをターゲットとしており、
機能としてはタブレットに内臓されている GPS より現在位置情報の取得を行っています。
下記 LocationInfo
クラスの Get() にて緯度経度を返しているのですが、Wifiに接続されているときと、接続されていない場合で取得値に差異があります。
※ WiFi 接続時は現在地とは全く違う場所を返してきている様です。
- Windows 8 標準アプリの「地図」ではオンラインオフラインいずれの場合も正常な位置を取得できているようなのですが、
Windows.Device
より取得できる値とWindows.System.Device
から取得できる値には違いがあるのでしょうか? - また WiFi 接続時に全く違う場所が返されていることの原因としては、位置情報データベース(どこのサービス?)に登録されているアクセスポイントと経度緯度座標の情報がおかしいと考えればよいのでしょうか?これを解決する術はありますか?
- Wifi 接続時であっても GPS センサーの値(衛星値)のみを取得する方法はないでしょうか?
デバイスに COMポートから直接アクセスを試みましたが、デバイスマネージャの COMポートのツリーには GPS デバイスは表示されておらず、センサーのツリーに表示されていました。
public class LocationInfo
{
private static System.Device.Location.GeoCoordinateWatcher _wtc;
private static double _latitude = double.MinValue;
private static double _longitude = double.MinValue;
private static bool _changed;
public static void Get(ref double latitude, ref double longitude)
{
_changed = false;
System.Threading.Thread _proc = new System.Threading.Thread(WatcherStart);
_proc.Start();
while(true)
{
if(_changed)
{
latitude = _latitude;
longitude = _longitude;
return;
}
System.Threading.Thread.Sleep(100);
}
}
private static void WatcherStart()
{
_wtc = new System.Device.Location.GeoCoordinateWatcher(System.Device.Location.GeoPositionAccuracy.Default);
_wtc.PositionChanged += new EventHandler<System.Device.Location.GeoPositionChangedEventArgs<System.Device.Location.GeoCoordinate>>(PositionChanged);
_wtc.Start();
}
private static void PositionChanged(object sender, System.Device.Location.GeoPositionChangedEventArgs<System.Device.Location.GeoCoordinate> e)
{
_latitude = e.Position.Location.Latitude;
_longitude = e.Position.Location.Longitude;
_changed = true;
}
}
やりたいことは、常に GPS の衛星情報のみを使用できるようにしたいと考えています。
(電波をつかめていないときはエラー応答で構わない)
上記質問内容の方法以外にも対応方法等がありましたらご教示ください。