Reputation: 3964
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
but in this case its working from Bhuj to Ahmedabad
Upvotes: 1
Views: 4471
Reputation: 3964
Finally I got the Answer how Ola and Uber app doing these..
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
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
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