Как загрузить результаты Android Direction API во внешнее приложение Google Maps?
Я использую Google Directions API для получения маршрутов между двумя точками с помощью Way Points.
В настоящее время я получаю информацию о направлении между двумя точками с помощью API направления и показываю результат в Google Maps, встроенном в мое приложение. Это работает хорошо, как и ожидалось. Вот как я это сделал:
private DirectionsResult getDirectionsDetails(String origin,String destination,TravelMode mode) {
Log.i("testtt"," Origin "+origin+" Destination "+destination);
DateTime now = new DateTime();
try {
return DirectionsApi.newRequest(getGeoContext())
.mode(mode)
.origin(origin)
.waypoints(waypoints.toArray(new String[0]))
.destination(destination)
.departureTime(now)
.await();
} catch (InterruptedException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
} catch (com.google.maps.errors.ApiException e) {
e.printStackTrace();
return null;
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
setupGoogleMapScreenSettings(googleMap);
DirectionsResult results = getDirectionsDetails(origin,destination,TravelMode.DRIVING);
if (results != null) {
addPolyline(results, googleMap);
positionCamera(results.routes[overview], googleMap);
addMarkersToMap(results, googleMap);
}
}
private void setupGoogleMapScreenSettings(GoogleMap mMap) {
mMap.setBuildingsEnabled(true);
mMap.setIndoorEnabled(true);
mMap.setTrafficEnabled(true);
UiSettings mUiSettings = mMap.getUiSettings();
mUiSettings.setZoomControlsEnabled(true);
mUiSettings.setCompassEnabled(true);
mUiSettings.setMyLocationButtonEnabled(true);
mUiSettings.setScrollGesturesEnabled(true);
mUiSettings.setZoomGesturesEnabled(true);
mUiSettings.setTiltGesturesEnabled(true);
mUiSettings.setRotateGesturesEnabled(true);
}
private void addMarkersToMap(DirectionsResult results, GoogleMap mMap) {
mMap.addMarker(new MarkerOptions().position(new LatLng(results.routes[overview].legs[overview].startLocation.lat,results.routes[overview].legs[overview].startLocation.lng)).title(results.routes[overview].legs[overview].startAddress));
mMap.addMarker(new MarkerOptions().position(new LatLng(results.routes[overview].legs[overview].endLocation.lat,results.routes[overview].legs[overview].endLocation.lng)).title(results.routes[overview].legs[overview].endAddress).snippet(getEndLocationTitle(results)));
}
private void positionCamera(DirectionsRoute route, GoogleMap mMap) {
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(route.legs[overview].startLocation.lat, route.legs[overview].startLocation.lng), 12));
}
private void addPolyline(DirectionsResult results, GoogleMap mMap) {
List<LatLng> decodedPath = PolyUtil.decode(results.routes[overview].overviewPolyline.getEncodedPath());
mMap.addPolyline(new PolylineOptions().addAll(decodedPath));
}
Но я хочу загрузить результат этого направления во внешнее приложение Google Maps. Я спрашиваю, есть ли способ передать объект DirectionsResult в приложение Google Maps через Intent, чтобы он отображал маршруты в приложении. Причина, по которой я хочу этого, заключается в том, чтобы избежать интеграции API Карт Google с проектом, поскольку он больше не является полностью бесплатным. Детали цены
1 ответ
Как я вижу из вашего кода, вы не выполняете никаких вычислений для DirectionsDetails
дано DirectionsApi
Вы можете открыть передать свои координаты местоположения в Google Maps.
По умолчанию, Google maps
всегда загружает лучший доступный маршрут в соответствии с текущим трафиком и временем:
String geoUri = "http://maps.google.com/maps?q=loc:" + lat + "," + lng + " (" + mTitle + ")";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(geoUri));
context.startActivity(intent);
Если вы хотите добавить waypoints
между вашим источником и пунктом назначения вы можете посмотреть на этот ответ.
Если вы хотите, вы можете найти маршрут через DirectionsApi
и обработать данные для вашей внутренней аналитики, например. приблизительное время путешествия между его местоположением и новым местоположением, расстоянием и т. д.