Monday 23 November 2020

Remove polyline based on location

Marker

I want to remove the line when current location is passes the line

This is how I add polyline. Based on directions api response

 private void addPolyline(DirectionsResult results, GoogleMap mMap) {
    decodedPath = PolyUtil.decode(results.routes[0].overviewPolyline.getEncodedPath());

  
    int PATTERN_DASH_LENGTH_PX = 20;
    int PATTERN_GAP_LENGTH_PX = 0;
    PatternItem DASH = new Dash(PATTERN_DASH_LENGTH_PX);
    PatternItem GAP = new Gap(PATTERN_GAP_LENGTH_PX);
    List<PatternItem> PATTERN_POLYGON_ALPHA = Arrays.asList(GAP, DASH);
    polyline= mMap.addPolyline(new PolylineOptions()
            .geodesic(true)
            .color(getResources().getColor(R.color.blue_900))
            .width(8)
            .pattern(PATTERN_POLYGON_ALPHA)
            .addAll(decodedPath));

    if (ContextCompat.checkSelfPermission(this.getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED){
        startLocationUpdates();
    }
}

Code when user changes location using fusedLocationProviderClient

private void setUserLocationMarker(Location location) {
  //Remove location if distance is < or equal to 5 meters
  for (LatLng latLngPoint : decodedPath) {
        float[] results = new float[1];
        Location.distanceBetween(location.getLatitude(), location.getLongitude(),
                latLngPoint.latitude, latLngPoint.longitude, results);
        float dis = results[0];
        if(dis<=5){
            decodedPath.remove(latLngPoint);
            break;
        }
    }
  //code Update user marker

   polyline.setPoints(decodedPath);
 }

I tried to use distanceBetween to get the distance between the current location and the google directions result. But the line still does not update.



from Remove polyline based on location

No comments:

Post a Comment