【问题标题】:Location distance calculation getting wrong value位置距离计算得到错误值
【发布时间】:2018-03-14 17:55:01
【问题描述】:

我正在尝试以米为单位跟踪用户距离,但有时给出的距离远大于用户实际行进的距离。我想可能是因为曲线或类似的东西,但想知道我做错了什么。这是我的代码:

public class MainActivity extends AppCompatActivity {

    private FusedLocationProviderClient mFusedLocationClient;
    private LocationCallback mLocationCallback;
    private LatLng mLastKnownLatLng;
    private float[] mResults = new float[]{0};
    private float mDistance = 0;

    @Override
    public void onCreate() {
        super.onCreate();
        setContentView(R.layout.main);

        mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
        startLocationUpdates();
        createLocationCallback();
    }

    protected void startLocationUpdates() {

        LocationRequest locationRequest = new LocationRequest();
        locationRequest.setInterval(5000);
        locationRequest.setFastestInterval(1000);
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

        if (checkLocationPermission())
            mFusedLocationClient.requestLocationUpdates(locationRequest, mLocationCallback,
                Looper.myLooper());
    }

    private void createLocationCallback() {
        mLocationCallback = new LocationCallback() {
            @Override
            public void onLocationResult(LocationResult locationResult) {
                super.onLocationResult(locationResult);

                Location location = locationResult.getLastLocation();

                if (mLastKnownLatLng == null)
                    mLastKnownLatLng = new LatLng(location.getLatitude(), location.getLongitude());

                if ((mLastKnownLatLng.latitude != location.getLatitude()
                    && mLastKnownLatLng.longitude != location.getLongitude())
                    && location.getAccuracy() < 50) {

                    Location.distanceBetween(mLastKnownLatLng.latitude, mLastKnownLatLng.longitude,
                        location.getLatitude(), location.getLongitude(), mResults);

                    mDistance += mResults[0];

                    mLastKnownLatLng = new LatLng(location.getLatitude(), location.getLongitude());
                }
            }
        };
    }
}

【问题讨论】:

    标签: android android-gps fusedlocationproviderapi


    【解决方案1】:

    你应该试试

    Location locationA = new Location("point A");
    
    locationA.setLatitude(latA);
    locationA.setLongitude(lngA);
    
    Location locationB = new Location("point B");
    
    locationB.setLatitude(latB);
    locationB.setLongitude(lngB);
    
    float distance = locationA.distanceTo(locationB);
    
    //in your case 
    
    mLastKnownLatLng.distanceTo(location)
    

    【讨论】:

    • 这个我已经试过了,也试过SphericalUtil.computeDistanceBetween(LatLngA, LatLngB)。结果似乎是一样的,所以我认为这不是计算本身,而是另一个给我错误信息的错误。我不知道。
    • 我认为,您的mDistance += mResults[0]; 会多次更新。你什么时候检查距离?多少次?你想重置它吗?自己回答这些问题,看看能否找出问题所在。
    猜你喜欢
    • 2021-04-19
    • 2011-04-03
    • 2012-01-16
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 2013-08-22
    相关资源
    最近更新 更多