tutorial studio org openstreet library ejemplo android geolocation osmdroid

android - studio - osmdroid ejemplo



OSMDroid: zoom para mostrar todo el PathOverlay (2)

Necesito rellenar mi superposición con muchos (~ 400) puntos, agregarlos a PathOverlay y luego establecer el nivel de zoom para que el usuario pueda ver toda la ruta en la pantalla.

Una solución sería mantener longitud máxima, longitud mínima, longitud mínima, longitud mínima y al final basándonos en estos 4 números calculados (esta es la parte que aún no he descifrado, ya que no sé cómo es la int en el setZoom() relacionado con las distancias en el mapa) calcule el nivel de zoom apropiado. Entonces usaría el método setCenter() .

¿Hay alguna manera más simple de hacer esto usando OSMDroid? Si no, ¿cómo debo determinar el nivel de zoom correcto?


La pregunta es antigua pero no hay una respuesta definitiva, así que publicaré la mía:

Uso este fragmento todos los días. Esto se encargará de manejar la situación donde acaba de crearse la vista del mapa. De hecho, puede suceder que desee acercarse a un cuadro delimitador como un comportamiento de inicio para el mapa. Si llama a este método antes de que se muestre la vista, registrará un oyente para ejecutar el zoom tan pronto como la vista esté lista.

map es mi MapView

public void zoomToBounds(final BoundingBox box) { if (map.getHeight() > 0) { map.zoomToBoundingBox(box, true); } else { ViewTreeObserver vto = map.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { map.zoomToBoundingBox(box, true); ViewTreeObserver vto2 = map.getViewTreeObserver(); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { vto2.removeGlobalOnLayoutListener(this); } else { vto2.removeOnGlobalLayoutListener(this); } } }); } }

Y aquí está cómo obtener un boundingBox de una lista de GeoPoints

public BoundingBox computeArea(ArrayList<GeoPoint> points) { double nord = 0, sud = 0, ovest = 0, est = 0; for (int i = 0; i < points.size(); i++) { if (points.get(i) == null) continue; double lat = points.get(i).getLatitude(); double lon = points.get(i).getLongitude(); if ((i == 0) || (lat > nord)) nord = lat; if ((i == 0) || (lat < sud)) sud = lat; if ((i == 0) || (lon < ovest)) ovest = lon; if ((i == 0) || (lon > est)) est = lon; } return new BoundingBox(nord, est, sud, ovest); }


Pasando de memoria aquí ... debería ser algo como esto:

double north = 47.111111; double east = -122.111111; double south = 46.111111; double west = -120.111111; BoundingBoxE6 boundingBox = new BoundingBoxE6(north, east, south, west); mMapView.getController().zoomToSpan(boundingBox);