¿Hay algún límite para dibujar la ruta usando Geocoder (Android)?

Soy capaz de trazar un camino entre dos lugares, pero si la distancia es demasiado larga – más de 300 kilómetros – el camino no se dibuja completamente.

Estoy usando el siguiente código para dibujar el camino:

class MapOverlay extends com.google.android.maps.Overlay { Road mRoad; ArrayList<GeoPoint> mPoints; public MapOverlay(Road road, MapView mv) { mRoad = road; if (road.mRoute.length > 0) { mPoints = new ArrayList<GeoPoint>(); for (int i = 0; i < road.mRoute.length; i++) { mPoints.add(new GeoPoint((int) (road.mRoute[i][1] * 1000000), (int) (road.mRoute[i][0] * 1000000))); } int moveToLat = (mPoints.get(0).getLatitudeE6() + (mPoints.get( mPoints.size() - 1).getLatitudeE6() - mPoints.get(0) .getLatitudeE6()) / 2); int moveToLong = (mPoints.get(0).getLongitudeE6() + (mPoints.get( mPoints.size() - 1).getLongitudeE6() - mPoints.get(0) .getLongitudeE6()) / 2); GeoPoint moveTo = new GeoPoint(moveToLat, moveToLong); MapController mapController = mv.getController(); mapController.animateTo(moveTo); mapController.setZoom(8); } } @Override public boolean draw(Canvas canvas, MapView mv, boolean shadow, long when) { super.draw(canvas, mv, shadow); drawPath(mv, canvas); return true; } public void drawPath(MapView mv, Canvas canvas) { int x1 = -1, y1 = -1, x2 = -1, y2 = -1; Paint paint = new Paint(); paint.setColor(Color.GREEN); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(3); for (int i = 0; i < mPoints.size(); i++) { Point point = new Point(); mv.getProjection().toPixels(mPoints.get(i), point); x2 = point.x; y2 = point.y; if (i > 0) { canvas.drawLine(x1, y1, x2, y2, paint); } x1 = x2; y1 = y2; } } 

}

3 Solutions collect form web for “¿Hay algún límite para dibujar la ruta usando Geocoder (Android)?”

En primer lugar, deberías usar la API de Google Maps V2 en lugar de la vieja API V1 obsoleta

En la actividad, cree las referencias de Google Map y Polyline:

 public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback{ private GoogleMap mMap; Polyline line; //...... 

Primero defina su lista de waypoints:

 List<LatLng> latLngWaypointList = new ArrayList<>(); 

Obtenga su ruta, dibuje la polilínea para la ruta y luego dibuje el waypoint Marcadores:

 class GetDirectionsAsync extends AsyncTask<LatLng, Void, List<LatLng>> { @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected List<LatLng> doInBackground(LatLng... params) { List<LatLng> route = new ArrayList<>(); //populate route...... return route; } @Override protected void onPostExecute(List<LatLng> route) { if (route == null) return; if (line != null){ line.remove(); } PolylineOptions options = new PolylineOptions().width(5).color(Color.MAGENTA).geodesic(true); for (int i = 0; i < pointsList.size(); i++) { LatLng point = route.get(i); //If this point is a waypoint, add it to the list if (isWaypoint(i)) { latLngWaypointList.add(point); } options.add(point); } //draw the route: line = mMap.addPolyline(options); //draw waypoint markers: for (LatLng waypoint : latLngWaypointList) { mMap.addMarker(new MarkerOptions().position(new LatLng(waypoint.latitude, waypoint.longitude)) .title("Waypoint").icon(BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_VIOLET))); } } } 

Aquí es sólo una implementación de espacio reservado de isWaypoint ():

 public boolean isWaypoint(int i) { //replace with your implementation if (i % 17 == 0) { return true; } return false; } 

Resultado para una ruta de la costa oeste a la costa este, cerca de 2500 millas:

Introduzca aquí la descripción de la imagen

Resultado de una ruta más pequeña:

Introduzca aquí la descripción de la imagen

Tenga en cuenta que también utilizo el Api de direcciones de Google en este ejemplo para hacer que la ruta se ajuste a las carreteras. Para obtener un ejemplo completo de cómo utilizar la API de Google Direcciones, consulte aquí: https://stackoverflow.com/a/32940175/4409409

  • I google dirección api usted no tiene un límite para la distancia que desea la ruta para. Usted tiene otras limitaciones como el número de solicitud que puede hacer en 24 horas, etc. Para más detalles visite aquí .
  • Utilice siempre la última versión de google maps api y servicios de juego en su desarrollo de aplicaciones para Android.
  • Siga la guía en la guía de api para hacer que el programa para que haya menos posibilidades de culpa.
  • Así que al lado tienes problemas en las distancias de dibujo que es bastante más grande como 300 km. Asumo que usted puede dibujar fácilmente la trayectoria para distancias más cortas y usted no está teniendo ninguÌ n problema con ella. Teniendo en cuenta esta condición (que se puede hacer corta distancia fácilmente) permite comenzar-

Solución

  1. El problema que está teniendo en el dibujo de mayor ruta se debe a un gran número de waypoints y que conduce a un mayor requisito de memoria de montón para la aplicación.
  2. Así que el núcleo de Android proporciona una pequeña memoria a la aplicación mientras se ejecuta para su memoria de rasguño. Pero eso no es suficiente para las rutas más grandes y su aplicación se bloqueará o se bloqueará en el caso peor.
  3. La solución que funcionó para mí es solicitar explícitamente más memoria del montón al núcleo del androide. Usted puede hacer esto en manifiesto.

     <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:largeHeap="true" ......... 

    Por favor, eche un vistazo a la línea

    Android: largeHeap = "true"

    Esto es lo que debe hacer en su código.

Espero que esta explicación fue útil para su problema.

Si no estoy equivocado Es muy sencillo dibujar un camino en google maps. Código fuente

 var mumbai = new google.maps.LatLng(18.9750, 72.8258); var mapOptions = { zoom: 8, center: mumbai }; map = new google.maps.Map(document.getElementById('dmap'), mapOptions); directionsDisplay.setMap(map); source="18.9750, 72.8258"; destination= "18.9550, 72.8158"; source = (source1.replace(" ", ",")); destination = (destination1.replace(" ", ",")); var request = { origin: source, destination: destination, travelMode: google.maps.TravelMode.DRIVING }; directionsService.route(request, function (response, status) { if (status == google.maps.DirectionsStatus.OK) { directionsDisplay.setDirections(response); } }); 
  • RelativaLayout TextView superposición
  • Mostrar un bus móvil en google maps api v2 android
  • ¿Cómo crear una superposición que bloquea los eventos de toque a la interfaz de usuario debajo de él?
  • Lista de clics dentro de OverlayItem (MapView para Android)
  • Aplicación de una superposición (filtro de imagen) a un mapa de bits
  • Dibujar una superposición similar a MapsApp
  • Disposición de Android: coloca una vista entre dos vistas
  • ¿Cómo mostrar una ruta entre dos geocoords en google maps?
  • Primera vista arriba / superpuesta en LinearLayout
  • Uso de ItemizedOverlay y OverlayItem en Android Beta 0.9
  • ¿Cómo expandir el marcador de superposición en Google Maps?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.