デバイスの最も正確な位置を可能な限り短時間で特定しようとしています。
データをジオポイントとして保存し、マップビューに表示しています。
デバイスで最後に GPS を有効にして位置情報をロックしたとき、現在地から約 80 マイル離れていました。
ロケーションマネージャーのセットアップとロケーションリスナーがあります。
これを行うと、NULL になります。
myLocOverlay = new MyLocationOverlay(this, mapView);
GeoPoint test = myLocOverlay.getMyLocation();
しかし、次の数行で;
myLocOverlay.enableMyLocation();
mapView.getOverlays().add(myLocOverlay);
これにより、地図上のオーバーレイに現在地が表示されます。ネットワーク プロバイダーを使用していますが、GPS の修正も試みています (私は屋内にいて、最上階の近くにいないため、できません)。
このようにジオポイントを構築すると;
if(lm.getLastKnownLocation("gps") != null)
{
test = new GeoPoint(
(int) (lm.getLastKnownLocation("gps").getLatitude() * 1E6),
(int) (lm.getLastKnownLocation("gps").getLongitude() * 1E6));
}
else
{
if(lm.getLastKnownLocation("network") != null)
{
test = new GeoPoint(
(int) (lm.getLastKnownLocation("network").getLatitude() * 1E6),
(int) (lm.getLastKnownLocation("network").getLongitude() * 1E6));
}
//bad things
}
その後、混乱する結果が得られます。デバイスの GPS プロバイダーを無効にすると、コードはネットワーク プロバイダーに移動し、かなり正確な結果が得られます。GPS プロバイダーを有効にすると、ジオポイントは、デバイスが GPS ロックを取得することを最後に許可した場所として返されます。
上記の結果を避けたいので、使用を検討していました。
GeoPoint test = myLocOverlay.getMyLocation();
しかし、上で言ったように、私はそれから NULL を取得します。
GPS とネットワークの両方からジオポイントを取得して比較し、ネットワークの場所から 1 マイル離れている場合は GPS の結果を無視します。getMyLocation() が機能しないのはなぜですか? myLocOverlay がマップビューに表示しているものの GeoPoint を返すべきではありませんか?