0

アプリの場所を取得するためにこのコードを使用しています:

LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 200.0f, this);

しかし、実際のAndroidフォンでアプリを試してみると、実際の場所から約80キロメートル離れた場所が表示されます..このコードをより正確にするにはどうすればよいですか..私が作っているものに対して結果をより正確にしたい..

私はonLocationChangedを使用して地図に表示します..ここにあります:

public void onLocationChanged(Location location) {
    if (location != null) {

        //Gets users longitude and latitude
        lat = location.getLatitude();
        lng = location.getLongitude();

        //sets the GeoPoint usersLocation equal lat and lng
        userLocation = new GeoPoint((int) lat * 1000000, (int) lng * 1000000);

        OverlayItem usersLocationIcon = new OverlayItem(userLocation, null, null);
        LocationPin myLocationPin = new LocationPin(userIcon, MainActivity.this);

        //Removes the previous location
        if(previousLocation != null)
               mainMap.getOverlays().remove(previousLocation); 

        myLocationPin.getLocation(usersLocationIcon);
        overlayList.add(myLocationPin);

        //refresh the map
        mainMap.invalidate(); 

        //Making myLocationPin into the previousLocation just to be able to remove it later
        previousLocation = myLocationPin;
    }
4

2 に答える 2

4

呼び出しrequestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 200.0f, this);は、GPS からの位置が最後の更新から 200.0 メートル以上変化したときに、1000 ミリ秒ごとに 1 回だけ更新するよう求めています。より細かい精度が必要な場合は、これらの数値を下げてみてください。

ただし、80kmも離れてはいけません。空がはっきり見える屋外でテストしていますか?

問題は丸めにあると思います。を使用していますがnew GeoPoint((int) lat * 1000000, (int) lng * 1000000);、代わりに次のようにします。

new GeoPoint((int) (lat * 1e6), (int) (lng * 1e6));

違いは、乗算の前に double 値が整数に変換されたことです。このようにして、乗算が後で行われるため、小数点以下の桁が維持されます。

于 2011-10-25T17:11:55.443 に答える
0

2つの可能な答えがあります...

細かい許可を求めることができます。これは、近くの Wi-Fi ネットワークと GPS を使用して、現在地をより正確に追跡します。

http://developer.android.com/reference/android/Manifest.permission.html#ACCESS_FINE_LOCATION

または、悪い GPS データを取得している可能性があります。電話を再起動しようとしましたか?Google マップで正しい場所を取得していますか?

お役に立てれば。

于 2011-10-25T17:09:55.917 に答える