usar personalizar google custom como clave android google-maps google-maps-api-3 routes google-direction

android - personalizar - google maps javascript api



Diferencia de versiĆ³n de API de Google Maps (9)

@ Ghareeb-Strange- ¿Pero por qué necesitaríamos eso con API v2? Quiero decir, tenemos polilínea que lo hace mucho más fácil.

private void drawPath(){ PolylineOptions options = new PolylineOptions(); options.width(4); options.color(Color.RED); for(int i = 0; i< pathList.size(); i++ ){ options.add(pathList.get(i)); } map.addPolyline(options); }

Con algo como el código publicado arriba, tendría la ruta perfectamente dibujada en su aplicación.

pathList es una lista que contiene todos los puntos de nuestro camino.

¡Aclamaciones!

Estoy tratando de mostrar la ruta entre dos lugares, quiero usar la API V3 de Google Places para los pasos de ruta entre dos puntos.

Antes de usar Old API de Google Maps , y la siguiente solicitud da un resultado perfecto:

http://maps.google.com/maps?f=d&hl=en&saddr=19.5217608,-99.2615823&daddr=19.531224,-99.248262&ie=UTF8&0&om=0&output=kml

Salida:

Ahora trato de reemplazar esto con la nueva API de Google Maps y la siguiente solicitud da un resultado incorrecto. En ambos casos, estoy usando la misma fuente y destino, pero el resultado es diferente en Google Map:

http://maps.googleapis.com/maps/api/directions/json?origin=19.5217608,-99.2615823&destination=19.531224,-99.248262&sensor=false

Mi problema es que la nueva API de Google Maps devuelve menos pasos entre la fuente y el destino, por lo que la ruta no se muestra perfecta en Google Map.

Por favor, ayuda a resolver este problema para la nueva API de Google Maps v3.

Gracias por adelantado.


Con respecto a la falta de resolución de GeoPoint, cambié todas las apariciones de GeoPoint a LatLng y todo funcionó.


La solución anterior publicada por funciona muy bien con Google Maps API V2 pero necesita algunas modificaciones menores:
Reemplace todas las apariciones de GeoPoint con LatLng.
Reemplace la línea:

GeoPoint p = new GeoPoint((int) (((double) lat / 1E5) * 1E6), (int) (((double) lng / 1E5) * 1E6));

Que se encuentra justo antes del final del método decodePoly, con esta línea:

LatLng p = new LatLng(lat / 1E5, lng / 1E5);

Espero que esto funcione para los usuarios de Google Maps API v2.


No estás utilizando todos los puntos devueltos en el resultado. No ha proporcionado su código, pero aquí hay un ejemplo con la API v3 que muestra la misma ruta que devolvió su ejemplo de "mapas de Google".


Parece que hay suficientes respuestas pero para este tema, me beneficia este link . Pero no funcionó cuando descargué e importé. Así lo implementé en mi propia aplicación. Y hay un error en ese código. Cuando quieras una segunda vez, calcula una ruta, la aplicación. descansos

if (mMarkerPoints.size() > 1) { mMarkerPoints.clear(); map.clear(); // LatLng startPoint = new LatLng(nearbyLatitude, // nearbyLongitude); // drawMarker(startPoint); }

Encuentra las líneas y haz comentarios como lo he hecho. De todos modos, en realidad, usted solicitó dibujar una ruta, no un código completo, por lo que puede verificar el código en ese sitio web. Es bueno dibujar una ruta entre los puntos (marcadores). Tenga un buen día.


Por favor revise este link..

Y especificar modos de viaje

-- driving -- walking -- bicycling -- transit

para que obtengas diferentes resultados

por favor pruebalo.


Tomé su URL de solicitud y la pegué en mi aplicación, que usa la versión más reciente, y funciona muy bien. El problema puede ser cómo analizar los datos o descodificar la cadena JSON recibida.

String url = "http://maps.googleapis.com/maps/api/directions/json?origin=19.5217608,-99.2615823&destination=19.531224,-99.248262&sensor=false"; HttpPost httppost = new HttpPost(url); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); InputStream is = null; is = entity.getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder(); sb.append(reader.readLine() + "/n"); String line = "0"; while ((line = reader.readLine()) != null) { sb.append(line + "/n"); } is.close(); reader.close(); String result = sb.toString(); JSONObject jsonObject = new JSONObject(result); JSONArray routeArray = jsonObject.getJSONArray("routes"); JSONObject routes = routeArray.getJSONObject(0); JSONObject overviewPolylines = routes.getJSONObject("overview_polyline"); String encodedString = overviewPolylines.getString("points"); List<GeoPoint> pointToDraw = decodePoly(encodedString); //Added line: mapView.getOverlays().add(new RoutePathOverlay(pointToDraw));

y el método decodePoly() se toma de otra pregunta aquí en SO, que no recuerdo el autor:

private List<GeoPoint> decodePoly(String encoded) { List<GeoPoint> poly = new ArrayList<GeoPoint>(); int index = 0, len = encoded.length(); int lat = 0, lng = 0; while (index < len) { int b, shift = 0, result = 0; do { b = encoded.charAt(index++) - 63; result |= (b & 0x1f) << shift; shift += 5; } while (b >= 0x20); int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); lat += dlat; shift = 0; result = 0; do { b = encoded.charAt(index++) - 63; result |= (b & 0x1f) << shift; shift += 5; } while (b >= 0x20); int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); lng += dlng; GeoPoint p = new GeoPoint((int) (((double) lat / 1E5) * 1E6), (int) (((double) lng / 1E5) * 1E6)); poly.add(p); } return poly; }

Incluyo lo que he usado para agregar la superposición al mapa en sí mismo, no puedo encontrar el tutorial que se tomó de ... lo siento por no dar crédito. (Agregué la llamada a esto en el primer método que publiqué)

public class RoutePathOverlay extends Overlay { private int _pathColor; private final List<GeoPoint> _points; private boolean _drawStartEnd; public RoutePathOverlay(List<GeoPoint> points) { this(points, Color.RED, true); } public RoutePathOverlay(List<GeoPoint> points, int pathColor, boolean drawStartEnd) { _points = points; _pathColor = pathColor; _drawStartEnd = drawStartEnd; } private void drawOval(Canvas canvas, Paint paint, Point point) { Paint ovalPaint = new Paint(paint); ovalPaint.setStyle(Paint.Style.FILL_AND_STROKE); ovalPaint.setStrokeWidth(2); int _radius = 6; RectF oval = new RectF(point.x - _radius, point.y - _radius, point.x + _radius, point.y + _radius); canvas.drawOval(oval, ovalPaint); } public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) { Projection projection = mapView.getProjection(); if (shadow == false && _points != null) { Point startPoint = null, endPoint = null; Path path = new Path(); //We are creating the path for (int i = 0; i < _points.size(); i++) { GeoPoint gPointA = _points.get(i); Point pointA = new Point(); projection.toPixels(gPointA, pointA); if (i == 0) { //This is the start point startPoint = pointA; path.moveTo(pointA.x, pointA.y); } else { if (i == _points.size() - 1)//This is the end point endPoint = pointA; path.lineTo(pointA.x, pointA.y); } } Paint paint = new Paint(); paint.setAntiAlias(true); paint.setColor(_pathColor); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(5); paint.setAlpha(90); if (getDrawStartEnd()) { if (startPoint != null) { drawOval(canvas, paint, startPoint); } if (endPoint != null) { drawOval(canvas, paint, endPoint); } } if (!path.isEmpty()) canvas.drawPath(path, paint); } return super.draw(canvas, mapView, shadow, when); } public boolean getDrawStartEnd() { return _drawStartEnd; } public void setDrawStartEnd(boolean markStartEnd) { _drawStartEnd = markStartEnd; } }

Espero que esto funcione para usted.


Usé la solución dada por "La bla bla", pero hice algunas pequeñas modificaciones. Estaba teniendo un problema al mostrar la ruta cuando tenía demasiados puntos, cuando se acerca demasiado, la ruta ya no se muestra y aparece este mensaje en logcat "la ruta de la forma es demasiado grande para transformarla en una textura".

Lo que hice fue subdividir el camino de la siguiente manera:

if (shadow == false && _points != null) { Path path = new Path();; //We are creating the path Point pointA = new Point(); for (int i = 0; i < _points.size(); i++) { mapView.getProjection().toPixels(_points.get(i), pointA); if (i == 0) path.moveTo(pointA.x, pointA.y); else path.lineTo(pointA.x, pointA.y); if(i%10==0 || i == _points.size()-1){ Paint paint = new Paint(); paint.setAntiAlias(true); paint.setColor(_pathColor); paint.setStyle(Paint.Style.STROKE); paint.setStrokeJoin(Paint.Join.ROUND); paint.setStrokeCap(Paint.Cap.ROUND); paint.setStrokeWidth(mapView.getZoomLevel()-10); paint.setAlpha(200); if (!path.isEmpty()) canvas.drawPath(path, paint); path = new Path(); path.moveTo(pointA.x, pointA.y); } } }

Hago rutas cada 10 puntos, puede ser menos eficiente, pero de esta manera puede mostrar la ruta cuando el zoom está en valores altos.


¿Qué hay de nuevo en Google Map API v3?
Google Maps Directions API v3 para Android proporciona rutas en el Encoded Polyline Algorithm Format .

¿Qué debemos hacer?
We must have to decode this Polyline for showing exact Map

¿Cómo decodificamos esta Polilínea codificada proporcionada por Google Directions API v3?
Consulte estos tres enlaces para ver más claramente con las devoluciones de Polilínea codificadas de la Google Maps Directions API v3

¿Cómo podemos resolver el problema en la pregunta anterior?
Por favor refiérase a estos tres enlaces de respuestas, que resuelven su problema: