Rajesh Satvara
Rajesh Satvara

Reputation: 3964

How to draw line between two Latlong points?

Using Polyline i can able to create a path between two points.

but when i am using these two points (Ahmedabad to New york) polyline is not create. else it works if there is no SEA between two points.

i'am getting issue when points are like

enter image description here

but in this case its working from Bhuj to Ahmedabad enter image description here

Upvotes: 1

Views: 4471

Answers (3)

Rajesh Satvara
Rajesh Satvara

Reputation: 3964

Finally I got the Answer how Ola and Uber app doing these..

enter image description here

ArrayList<LatLng> points = new ArrayList<LatLng>();
                PolylineOptions polyLineOptions = new PolylineOptions();
                points.add(new LatLng(from_latitude,from_longitude));
                points.add(new LatLng(to_latitude,to_longitude));
                polyLineOptions.width(7 * 1);
                polyLineOptions.geodesic(true);
                polyLineOptions.color(activity.getResources().getColor(R.color.black));
                polyLineOptions.addAll(points);
                Polyline polyline = mMap.addPolyline(polyLineOptions);
                polyline.setGeodesic(true);

Upvotes: 4

peyman rahmani
peyman rahmani

Reputation: 73

 solution 1:

    private void showDirection(LatLng source, LatLng destination) {

    Map<String, String> hashMap = new HashMap<String, String>();

    final String url = "http://maps.googleapis.com/maps/api/directions/json?origin="
            + source.latitude
            + ","
            + source.longitude
            + "&destination="
            + destination.latitude
            + ","
            + destination.longitude
            + "&sensor=false";
    new HttpRequester(activity, hashMap, StaticValues.ServiceCode.GET_ROUTE, true,
            this);
    Utils.showCustomProgressDialog(activity,
            getString(R.string.text_getting_direction), false, null);
}


solution 2:
private void build_retrofit_and_get_response(String type) {

    String url = "https://maps.googleapis.com/maps/";

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(url)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    RetrofitMaps service = retrofit.create(RetrofitMaps.class);

    Call<Example> call = service.getDistanceDuration("metric", StartLocation.latitude + "," + StartLocation.longitude,
            EndLocation.latitude + "," + EndLocation.longitude, type);

    call.enqueue(new Callback<Example>() {
        @Override
        public void onResponse(Response<Example> response, Retrofit retrofit) {

            try {
                //Remove previous line from map
                if (line != null) {
                    line.remove();
                }
                // This loop will go through all the results and add marker 
on each location.
                for (int i = 0; i < response.body().getRoutes().size(); i++) {
                    String distance = response.body().getRoutes().get(i).getLegs().get(i).getDistance().getText();
                    String time = response.body().getRoutes().get(i).getLegs().get(i).getDuration().getText();
//          activity.setTitleActionBar("Distance:" + distance + ", Duration:" + time);
                    String encodedString = response.body().getRoutes().get(0).getOverviewPolyline().getPoints();
                    List<LatLng> list = decodePoly(encodedString);
                    line = mGoogleMap.addPolyline(new PolylineOptions()
                            .addAll(list)
                            .width(10)
                            .color(Color.RED)
                            .geodesic(true)
                    );
                }
            } catch (Exception e) {
                Log.d("onResponse", "There is an error");
                e.printStackTrace();
            }
        }

        @Override
        public void onFailure(Throwable t) {
            Log.d("onFailure", t.toString());
        }
    });

}

Upvotes: 0

Nikhil Sharma
Nikhil Sharma

Reputation: 603

You can draw like below one

 PolylineOptions rectOptions = new PolylineOptions();
    LatLng polLatLng = null;
    if (points.size() > 0) {
        ArrayList<LatLng> pathPoint = new ArrayList<LatLng>();
        for (int k = 0; k < points.size(); k++) {
            double polLat = points.get(k).latitude;
            double polLng = points.get(k).longitude;
            pathPoint.add(new LatLng(polLat, polLng));
            polLatLng = new LatLng(polLat, polLng);
        }
        double startLatitude = points.get(0).latitude;
        double startLongitude = points.get(0).longitude;
        double endLatitude = points.get(points.size() - 1).latitude;
        double endLongitude = points.get(points.size() - 1).longitude;
        LatLng start = new LatLng(startLatitude, startLongitude);
        LatLng end = new LatLng(endLatitude, endLongitude);

        mMap.addMarker(new MarkerOptions().position(start).title("start"));
        mMap.addMarker(new MarkerOptions().position(end).title("end"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(polLatLng));
        mMap.animateCamera(CameraUpdateFactory.zoomTo(10));
        rectOptions.addAll(pathPoint);
        rectOptions.width(10);
        rectOptions.color(Color.BLUE);
        mMap.addPolyline(rectOptions);

Upvotes: 0

Related Questions