0

我使用此代码获取我的应用程序的位置:

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

但是当我在我真正的安卓手机上尝试这个应用程序时,它显示的这个位置距离我实际所在的位置大约 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 毫秒更新一次。如果您想要更高的精度,请尝试降低这些数字。

但是,您不应该离开 80 公里。您是否在外面可以清楚地看到天空进行测试?

我认为问题在于四舍五入。您正在使用new GeoPoint((int) lat * 1000000, (int) lng * 1000000);,而是这样做:

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

不同之处在于,双精度值在乘法之前被转换为整数。这样乘法发生在之后,因此小数点后的数字被保留。

于 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 回答