¿Hay alguna manera de mostrar las instrucciones de la ruta en Google Map API v2?
Estaba buscando una respuesta usando Google y aquí, y los únicos mensajes relevantes que he encontrado son:
Google Maps Android V2 y API de dirección
- Limite el número de claves API de Google Maps asociadas con una huella dactilar SHA-1 (es decir, almacén de claves de depuración)?
- Google Maps en Android: No se pudo encontrar el estilo 'mapViewStyle' en el tema actual
- Añadir pines a Google Map en un TWebBrowser y procesar clics
- Cómo ocultar la clave del API del traductor en android
- No se puede resolver el método 'getSupportFragmentManager ()' en Fragmento
Obtener indicaciones para llegar con la API de Google Maps v2
Pero no hay respuesta allí. Así que ya lo he mencionado, pero lo diré de nuevo. Estoy buscando una solución para Google Map API v2 usando FragmentActivity y un SupportMagFragment y LatLng objetos y no usando MapView, MapActivtiy y GeoPoint.
Además no tengo el objeto Overlay para usar así que no puedo pintar la dirección en el mapa, ¿hay una alternativa para eso?
Entonces, ¿hay una manera de hacer eso?
Gracias por adelantado.
- ¿Cómo abrir Google Maps con la dirección?
- Google Maps SDK con el nuevo emulador Intel Atom x86
- La vista Google Maps de Google devuelve el error cuando se usa onTap () - Se supone que Alertdialog se muestra
- Crear un archivo GPX desde GeoPoints
- Google Maps Android API no coincide entre cliente y paquete
- GetMapAsync () en el fragmento
- ¿Consigue la distancia entre dos ubicaciones en android?
- Android Maps v2: "Los servicios de Google Play, que dependen de algunas de tus aplicaciones, no son compatibles con tu dispositivo".
Pruebe esta solución aquí
Usted puede conseguir conducir o caminar dirección en V2
La superposición es realmente algo que olvidar.
Las polilíneas se pueden dibujar fácilmente
https://developers.google.com/maps/documentation/android/lines#add_a_polyline
Simplemente haga un bucle a través de sus puntos después de analizar la respuesta de JSON:
PolylineOptions rectOptions = new PolylineOptions() .add(new LatLng(37.35, -122.0)) .add(new LatLng(37.45, -122.0)) // North of the previous point, but at the same longitude .add(new LatLng(37.45, -122.2)) // Same latitude, and 30km to the west .add(new LatLng(37.35, -122.2)) // Same longitude, and 16km to the south .add(new LatLng(37.35, -122.0)); // Closes the polyline. // Set the rectangle's color to red rectOptions.color(Color.RED); // Get back the mutable Polyline Polyline polyline = myMap.addPolyline(rectOptions);
Su título de la pregunta es mucho más general que sus requisitos, así que contestaré esto en una manera que pienso beneficiarán a ésos que ven esta pregunta y esperanzadamente satisfacen sus requisitos en quizás una diversa manera.
Si usted no está mostrando direcciones en el contexto de un mapa que ya es un fragmento cargado y algo que se ha hecho para mostrar direcciones sobre el mapa (que es probablemente similar a lo que está haciendo el OP), es más fácil y creo estándar para hacer esto Con un Intent
.
Esto lanza una actividad de ruta del mapa (a través de una aplicación separada – donde la aplicación lanzada depende de las aplicaciones compatibles del usuario, que por defecto es Google Maps) que dibuja direcciones desde la dirección de origen ( String originAddress
) a la dirección de destino ( String destinationAddress
) via Carreteras
// Build the URI query string. String uriPath = "https://www.google.com/maps/dir/"; // Format parameters according to documentation at: // https://developers.google.com/maps/documentation/directions/intro String uriParams = "?api=1" + "&origin=" + originAddress.replace(" ", "+") .replace(",", "") + "&destination=" + destinationAddress.replace(" ", "+") .replace(",", "") + "&travelmode=driving"; Uri queryURI = Uri.parse(uriPath + uriParams); // Open the map. Intent intent = new Intent(Intent.ACTION_VIEW, queryURI); startActivity(activity, intent, null);
(Cuando la activity
es simplemente la Activity
actualmente activa – obtenida por cualquier medio que sea apropiado en el contexto de programación actual).
El siguiente código obtiene una dirección String
de un objeto LatLng
(que debe procesarse para la consulta URI String
como la anterior):
/** * Retrieves an address `String` from a `LatLng` object. */ private void getAddressFromLocation( final StringBuilder address, final LatLng latlng) { // Create the URI query String. String uriPath = "https://maps.googleapis.com/maps/api/geocode/json"; String uriParams = "?latlng=" + String.format("%f,%f", latlng.latitude, latlng.longitude) + "&key=" + GOOGLE_MAPS_WEB_API_KEY; String uriString = uriPath + uriParams; // Issue the query using the Volley library for networking. RequestFuture<JSONObject> future = RequestFuture.newFuture(); JSONObject response = null; // Required for JsonObjectRequest, but not important here. Map<String, String> jsonParams = new HashMap<String, String>(); JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, uriString, new JSONObject(jsonParams), new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { try { if (response != null) { String resultString = response.getJSONArray("results") .getJSONObject(0) .getString("formatted_address"); // Assumes `address` was empty. address.append(resultString); } // end of if // No response was received. } catch (JSONException e) { // Most likely, an assumption about the JSON // structure was invalid. e.printStackTrace(); } } // end of `onResponse()` }, // end of `new Response.Listener<JSONObject>()` new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e(LOG_TAG, "Error occurred ", error); } }); // Add the request to the request queue. // `VolleyRequestQueue` is a singleton containing // an instance of a Volley `RequestQueue`. VolleyRequestQueue.getInstance(activity) .addToRequestQueue(request); }
Esta petición es asíncrona, pero se puede hacer sincrónica . Usted necesitará llamar a toString()
en el parámetro real pasado a la address
para obtener originAddress
.
Q: Estaba buscando una respuesta usando Google y aquí, y los únicos mensajes relevantes que he encontrado son: Google Maps Android V2 y la dirección API Google mapa API v2 – obtener instrucciones para llegar
Respuesta: Su dicho, "pero no hay respuesta allí." No es absolutamente correcto. En este sitio, usted puede encontrar sólo algunas pistas sobre eso. Creo que no obtendrá el código perfecto y los KNOW-HOWs de implementación concretos aquí. De hecho, muchos desarrolladores quieren que la aplicación muestre el enrutamiento o las direcciones en Google Maps. Pero creo que no hay una solución para obtener direcciones sólo con la pura API de Google Maps v2.
P: Así que ya lo he mencionado pero lo repetiré. Estoy buscando una solución para Google Map API v2 usando FragmentActivity y un SupportMagFragment y LatLng objetos y no usando MapView, MapActivtiy y GeoPoint.
Respuesta: Aquí hay algunos buenos ejemplos de tutoriales (haga clic aquí) . Puedes encontrar lo que quieres.
P: Además, no tengo el objeto Superposición para usar, así que no puedo pintar la dirección en el mapa, ¿hay una alternativa para eso? Entonces, ¿hay una manera de hacer eso?
Respuesta: En la API de Google Maps v2, la molesta superposición y así sucesivamente no son más necesarias. Para esto, usted puede encontrar la respuesta en mi sitio enlazado arriba.
- APIs faltantes y autenticación> Aplicaciones registradas en Google Cloud Console / ¿Cómo obtengo la clave API de GCM?
- Cómo actualizar la lista del cajón de navegación tan pronto como su abrir / cerrar en Android