info - onmarkerclicklistener example android
¿Hay alguna manera de mostrar las indicaciones de ruta en Google Map API v2? (4)
P: Estaba buscando una respuesta usando Google y aquí, y las únicas publicaciones relevantes que he encontrado son: Google Maps Android V2 y Direction API Google map API v2 - obtener indicaciones de manejo
Respuesta: Tu dicho, "pero no hay respuesta allí". no es absolutamente correcto En este sitio, puede encontrar solo algunas pistas sobre eso. Creo que no obtendrá el código perfecto y concretamente implementará KNOW-HOW aquí. De hecho, muchos desarrolladores desean hacer que la aplicación muestre el enrutamiento o las indicaciones en Google Maps. Pero creo que no hay ninguna solución para obtener instrucciones solo con la pura API de Google Maps v2.
P: 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 objetos LatLng 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 Overlay para usar, así que no puedo pintar la dirección en el mapa, ¿hay alguna alternativa para eso? ¿Entonces hay una manera de hacer eso?
Respuesta: En la versión 2 de la API de Google Maps, la molesta superposición y demás ya no son necesarios. Para esto, puede encontrar la respuesta en mi sitio vinculado arriba.
Estaba buscando una respuesta usando Google y aquí, y las únicas publicaciones relevantes que he encontrado son:
Google Maps Android V2 y Direction API
Obtenga instrucciones de manejo usando Google Maps API v2
pero no hay respuesta allí. Así que ya lo mencioné, pero lo diré de nuevo. Estoy buscando una solución para Google Map API v2 usando FragmentActivity y un SupportMagFragment y objetos LatLng 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 alguna alternativa para eso?
¿Entonces hay una manera de hacer eso?
Gracias por adelantado.
La Superposición es de hecho algo para olvidar.
Las polilíneas se pueden dibujar fácilmente
https://developers.google.com/maps/documentation/android/lines#add_a_polyline
Recorra sus puntos una vez que haya analizado la respuesta 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);
prueba esta solución aquí
puedes conducir o caminar en la dirección V2
El título de su pregunta es mucho más general que sus requisitos, por lo que responderé a esto de una manera que creo que beneficiará a los que ven esta pregunta y espero que cumpla con sus requisitos de tal vez de otra manera.
Si no muestra las indicaciones en el contexto de un mapa que ya es un fragmento cargado y se ha hecho algo para mostrar las direcciones sobre el mapa (que probablemente sea similar a lo que hace el OP), es más fácil y creo que estándar para hacerlo con un Intent
.
Esto inicia una actividad de ruta de mapa (a través de una aplicación separada, donde la aplicación se inicia depende de las aplicaciones compatibles del usuario, que de forma predeterminada es Google Maps) que traza direcciones desde la dirección de origen ( String originAddress
) a la dirección de destino ( String destinationAddress
) caminos:
// 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);
(Donde la activity
es simplemente la Activity
actualmente activa - obtenida a través de cualquier medio que sea apropiado en el contexto de programación actual).
El siguiente código obtiene una String
dirección de un objeto LatLng
(que luego debe procesarse para la String
consulta URI como se LatLng
anteriormente):
/**
* 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 solicitud es asíncrona, pero puede hacerse sincrónica . Tendrá que llamar a toString()
en el parámetro real pasado a la address
para obtener la address
de origen.