Search code examples
androidgoogle-polylinemaproute

Google Maps: Drawing routes origin and destination are connected


I am drawing route on google map using waypoints. Everything looks good except my origin and destination is also connected. I am sure my origin and destination is not same.

Here is the url generated after I generate directions url from list of latitude/longitudes.

https://maps.googleapis.com/maps/api/directions/json? &origin=26.8530478,75.78491989999999 &destination=26.8804683,75.75850109999999 &waypoints=26.8566917,75.7691974%7C 26.868405,75.76440269999999%7C 26.8762989,75.7664082 &key=MY_API_KEY

And also attaching the output. The straight line from "1" to "5' should not be there. Please help me in finding the mistake.

Thanks.

ParserTask -

ArrayList<LatLng> points = new ArrayList<LatLng>();
    PolylineOptions lineOptions = new PolylineOptions();
   // LatLngBounds.Builder builder = new LatLngBounds.Builder();
    int color = ContextCompat.getColor(activity, R.color.black_overlay);
    if (null != result)
        for (int i = 0; i < result.size(); i++) {
            // Fetching i-th route
            List<HashMap<String, String>> path = result.get(i);
            // Fetching all the points in i-th route
            for (int j = 0; j < path.size(); j++) {
                HashMap<String, String> point = path.get(j);
                double lat = Double.parseDouble(point.get("lat"));
                double lng = Double.parseDouble(point.get("lng"));
                LatLng position = new LatLng(lat, lng);
                points.add(position);
                //builder.include(position);
            }
            lineOptions = new PolylineOptions().width(15).color(color).addAll(points).zIndex(6);
        }
    if (activity instanceof OnRoutesParsingCompletedCallBack) {
        ((OnRoutesParsingCompletedCallBack) activity).
                onRoutesParsingCompleted(lineOptions);
    }

Activity with map object -

@Override
public void onRoutesParsingCompleted(PolylineOptions lineOptions) {//}, LatLngBounds.Builder builder) {
    if (lineOptions.getPoints().size() > 0) {
        googleMap.addPolyline(lineOptions);
    } else
        Toast.makeText(this, "There is something wrong. No routes to draw!", Toast.LENGTH_SHORT).show();

    mCurrLocationMarker.showInfoWindow();
    progressBar.setVisibility(GONE);
    googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(currentLatLong, 13));
}

enter image description here


Solution

  • I think, the issue is that you are adding all possible routes to the same polyline. So, the polyline goes by the first route, then it "returns" to the start point and goes again by the second route. You either need to remove the for that loops over the results:

    if (null != result)
        // Fetching 1st route
        List<HashMap<String, String>> path = result.get(0);
        // Fetching all the points in 1st route
        for (int j = 0; j < path.size(); j++) {
            HashMap<String, String> point = path.get(j);
            double lat = Double.parseDouble(point.get("lat"));
            double lng = Double.parseDouble(point.get("lng"));
            LatLng position = new LatLng(lat, lng);
            points.add(position);
            //builder.include(position);
        }
        lineOptions = new PolylineOptions().width(15).color(color).addAll(points).zIndex(6);
    }
    

    Or you can create a polyline for each existing route.