2022-02-07

Tech Programing

程式人小天地

Remove polyline based on location

1 min read


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.



Source link

資料來源:Stackoverflow

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *