在地图上用折线选项位置变化毛刺(Location change glitches on map us

2019-09-27 04:08发布

进出口面临的一些问题,我的应用程序,特别是与路线情节/动用我的谷歌地图。 我表现的测试路线我的房子周围,发现,该GPS提供商都没有像透过Runtastic或运动追踪类似的应用一样精确。

有时候位置监听器让我难以理解的地图更改,然后折线临近我的位置在地图甚至完美的GPS信号上的任何线。
另一些时候,它只是不列入工作。 它不听位置的变化。

任何人都可以解释我(像林5个)如何等健身应用得到他们的当前位置和地块路线到谷歌地图? 谢谢!

//地图碎片

    map = ((MapFragment) getFragmentManager().findFragmentById(R.id.fragment1)).getMap();
    map.setMyLocationEnabled(true);
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

    Criteria criteria = new Criteria();
    String provider = locationManager.getBestProvider(criteria, true);

//Permission gain

    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION},
                MY_PERMISSION_ACCESS_COURSE_LOCATION);
        return;
    }
    isLocationEnabled(getApplicationContext());

    Location myLocation = locationManager.getLastKnownLocation(provider);
    if (myLocation != null) {
        latitude = myLocation.getLatitude();
        longitude = myLocation.getLongitude();
        float zoom = (float) 17.0;
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), zoom));
        Log.e("TAG", "GPS is on");
        Toast.makeText(MainActivity.this, "latitude:" + latitude + " longitude:" + longitude, Toast.LENGTH_SHORT).show();
    } else {
        locationManager.requestLocationUpdates(provider, 5000, 0, this);
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, 10, this);

    }

 public void onLocationChanged(Location mylocation) {

    if (lastLocationloc == null) {
        lastLocationloc = mylocation;
    }
    LatLng lastLatLng = locationToLatLng(lastLocationloc);
    LatLng thisLatLng = locationToLatLng(mylocation);
    map.addPolyline(new PolylineOptions().add(lastLatLng).add(thisLatLng).width(6).color(Color.RED));
    lastLocationloc = mylocation;
    Toast.makeText(MainActivity.this, "!!!!Location CHANGE!!!!", Toast.LENGTH_SHORT).show();

}

public static LatLng locationToLatLng(Location loc) {
    if (loc != null)
        return new LatLng(loc.getLatitude(), loc.getLongitude());
    return null;
}


例如,我要绘制这样的:


但我的应用程序的工作自己的方式..

Answer 1:

首先,你需要考虑到接收的位置的精确度。 你可以使用精确度Location.getAccuracy()方法( 文档 )。 精度是米,所以越低越好:

if (location.getAccuracy() < MINIMUM_ACCURACY) {
    // Add the new location to your polyline
}

您可以设置MINIMUM_ACCURACY是如10流量计。

在另一方面,你可能需要一个新的位置添加到您的折线只有当你的新位置,而不是你的最后添加的位置给定距离更远。 举个例子:

private static final float MINIMUM_ACCURACY = 10;
private static final float MINIMUM_DISTANCE_BETWEEN_POINTS = 20;
private Location lastLocationloc;

// ...

public void onLocationChanged(Location mylocation) {
    if (mylocation.getAccuracy() < MINIMUM_ACCURACY) {
        if (lastLocationloc == null || lastLocationloc.distanceTo(mylocation) > MINIMUM_DISTANCE_BETWEEN_POINTS) {
            // Add the new location to your polyline

            lastLocationloc = mylocation;
        }
    }
}


文章来源: Location change glitches on map using polyline options