Descargar mapas para osmdroid

Estoy desarrollando una aplicación en la que necesito usar mapas sin conexión. Estoy usando osmdroid y osmbonuspack

Para descargar los mapas que he probado:

  • Los mapas MobileAtlasCreator pero Mapnik están bloqueados .
  • osmdroid-packager . Funciona, pero solo descargue 9 me para ampliar

Para mí, lo ideal sería descargar los mapas de la aplicación en sí, y solo quiero descargar los mapas que está en una pista, no una sección completa.

¿Cómo podría solucionarlo?

¿Hay alguna forma de descargar mapas desde el teléfono a través de mi aplicación?

Solución de trabajo con MobileAtlasCreator / MOBAC :

Existe una documentación de osmdroid , pero es muy débil y, a veces, desactualizada.

Luché por un tiempo en sucesivos problemas. Aquí están los detalles de una solución de trabajo con osmdroid v4.1.

1) Cuando construyas tu mapa sin conexión con MOBAC:

  • Como los mapas de Mapnik están efectivamente bloqueados, seleccione “OpenStreetMap MapQuest” como fuente.
  • Formato Atlas: elija “Osmdroid ZIP”
  • Asegúrese de marcar todos los niveles de zoom que necesite. Por defecto, ninguno está seleccionado.

Seleccione su área, cree su “atlas”. Esto produce un archivo zip.

Cargue el archivo zip en su dispositivo, en / sdcard / osmroid / (la ruta exacta puede variar según el dispositivo. Si ya usó osmdroid, este directorio DEBE existir)

El nombre del archivo no importa. La extensión DEBE ser “.zip”

2) Ahora, en su aplicación osmroid, su método onCreate debería ser algo como esto:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); map = (MapView) findViewById(R.id.map); map.setTileSource(new XYTileSource("MapQuest", ResourceProxy.string.mapquest_osm, 0, 18, 256, ".jpg", new String[] { "http://otile1.mqcdn.com/tiles/1.0.0/map/", "http://otile2.mqcdn.com/tiles/1.0.0/map/", "http://otile3.mqcdn.com/tiles/1.0.0/map/", "http://otile4.mqcdn.com/tiles/1.0.0/map/"})); map.setBuiltInZoomControls(true); map.setMultiTouchControls(true); map.setUseDataConnection(false); //optional, but a good way to prevent loading from the network and test your zip loading. IMapController mapController = map.getController(); mapController.setZoom(_A ZOOM LEVEL YOU HAVE IN YOUR ZIP_); GeoPoint startPoint = new GeoPoint(_POSITION SOMEWHERE INSIDE YOUR MAP_); mapController.setCenter(startPoint); } 

En este código, los 2 valores de los parámetros son MUY importantes:

El nombre “MapQuest” (con esta ortografía EXACTA) es OBLIGATORIO => esto se usa como una ruta interna dentro del archivo zip. Si abre su archivo zip, verá que MOBAC creó este directorio “MapQuest”.

La extensión “.jpg” también es OBLIGATORIA => ya que MOBAC crea mosaicos de MapQuest en la extensión zip con .jpg (importante de notar, ya que las fonts de teselas estándar en osmdroid están usando la extensión “.png”).

En esta etapa, debería estar bien, siempre y cuando esté realmente posicionando la vista de mapa en un área que es parte de su atlas (nivel de zoom y posición).

3) Volver a MOBAC … También puede elegir los siguientes formatos de Atlas: “Osmdroid SQLite” o “MBTiles SQLite”. Transfert el archivo (Layer.sqlite o Layer.mbtiles) en el dispositivo en / sdcard / osmdroid /

De nuevo, en su constructor XYTileSource, la extensión DEBE ser “.jpg”. El nombre no importa.

Ambos funcionaron bien.

4) Elegir el formato “Osmdroid GEMF” no funcionará: es un error conocido en GEMF en el manejo de fichas jpg. EDITAR> En MOBAC, puede usar la función de “procesamiento de mosaico personalizado” para convertir fichas JPG a formato PNG. Entonces “Osmdroid GEMF” estará bien.

Aproximadamente al segundo enfoque preferido que se formula en la pregunta: “¿Hay alguna forma de descargar mapas desde el teléfono a través de mi aplicación?”

=> La respuesta es ahora: ¡Sí!

Desde OSMBonusPack v4.6, hay una clase CacheManager, que permite descargar los mosaicos de un área (rectangular), directamente desde la aplicación Android. Los mosaicos se cargan en la memoria caché estándar de osmdroid tiles.

Se puede probar utilizando OSMNavigator .

Antes que nada, gracias MKer y Tom Kincaid desde otra publicación, uniéndolos. Lo siguiente funciona para mí:

Esto era lo que necesitaba hacer y que es diferente de MKer:

  String[] urls = {"http://127.0.0.1"}; mapView.setTileSource(new XYTileSource("MapQuest", // name of the main file that has been zipped ResourceProxy.string.mapquest_osm, 2, // min map zoom level 14, // max map zoom level 256, // tile size pixels ".jpg", // extension of the tiles (can be ".png" as well) urls)); 

Después de crear los mapas usando Mobile Atlas Creator

Hoy solo OSM Map Tile Packager trabaja para map tile mapnik y hace mapas en PNG, por lo que

  if(ConexaoInternet.verificaConexao(getActivity())) { //<-- here i am Checking if has conection with internet mapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE); }else{ String[] urls = {"http://127.0.0.1"}; mapView.setTileSource(new XYTileSource("Mapnik", // name of the main file that has been zipped ResourceProxy.string.mapquest_osm, 9, // min map zoom level 15, // max map zoom level 256, // tile size pixels ".png", new String[]{"http://a.tile.openstreetmap.org/", "http://b.tile.openstreetmap.org/", "http://c.tile.openstreetmap.org/"})); } 

Prefiero poner algunas URLs concretas.