Saltar al contenido

¿Cómo crear mosaicos de mapas desde OpenStreetMap sin conexión, mostrarlo en Android?

Ya no tienes que buscar más por todo internet porque estás al lugar indicado, contamos con la respuesta que buscas y sin complicarte.

Solución:

Actualmente estoy desarrollando (mi primera) aplicación de Android usando la API de OpenStreetMap (OSM), así que aunque no puedo ayudarte con JSOM, puedo intentar ayudarte con la parte de OSM:

Suponiendo que desea crear una nueva actividad en su aplicación de Android que simplemente muestra un mapa OSM, puede comenzar con algo como esto:

package example.stackoverflow.osmdroid;

import android.app.Activity;
import android.os.Bundle;

import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;

public class YourMap extends Activity 
    // The MapView variable:
    private MapView m_mapView;

    // Default map zoom level:
    private int MAP_DEFAULT_ZOOM = 15;

    // Default map Latitude:
    private double MAP_DEFAULT_LATITUDE = 38.535350;

    // Default map Longitude:
    private double MAP_DEFAULT_LONGITUDE = -121.753807;

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);

        // Specify the XML layout to use:
        setContentView(R.layout.osm_map);

        // Find the MapView controller in that layout:
        m_mapView = (MapView) findViewById(R.id.mapview);

        // Setup the mapView controller:
        m_mapView.setBuiltInZoomControls(true);
        m_mapView.setMultiTouchControls(true);
        m_mapView.setClickable(true);
        m_mapView.setUseDataConnection(false);
        m_mapView.getController().setZoom(MAP_DEFAULT_ZOOM);
        m_mapView.getController().setCenter(
            new GeoPoint(MAP_DEFAULT_LATITUDE, MAP_DEFAULT_LONGITUDE));
        m_mapView.setTileSource(TileSourceFactory.MAPNIK);
     // end onCreate()
 // end class YourMap

Donde su diseño osm_map.xml puede verse así:




          

En cuanto a los mosaicos de mapas reales, hay un programa realmente genial llamado Creador de Atlas móvil, que le permite generar los mosaicos de mapas necesarios para el mapa de Android sin conexión implementado anteriormente.

Una vez que haya instalado la aplicación y desee crear un nuevo atlas, se le pedirá que seleccione el “formato de altas deseado”. Cuando esto aparezca, seleccione “Osmdroid zip”.

Una vez que todo se cargue, seleccione una región en el mapa para la que le gustaría crear mosaicos, seleccione los niveles de zoom para los que desea mosaicos y presione el botón “Agregar selección” en la columna de la izquierda, seguido de “Crear Atlas”.

Ah, y dependiendo de la fuente, es posible que debas marcar la casilla de verificación “Crear / Ajustar mosaicos de mapa” para forzar que los mosaicos se exporten como PNG. ¿Alguien sabe si es posible usar JPG con OSM?

Una vez que se generó el ZIP, lo renombré a “Mapnik.zip” y lo moví a una carpeta recién creada llamada “mosaicos” en mi espacio de trabajo del proyecto de Android Eclipse. Para que funcione, también tuve que abrir el archivo zip y cambiar el nombre de la carpeta de nivel superior de algo como “Google Earth” (según la fuente del mapa que utilizó), a “Mapnik”, para que el mosaico se mostrar en mi aplicación de Android.

Sin embargo, para cargar los mosaicos en su teléfono, deberá usar la herramienta ADB desde el terminal. En su directorio de herramientas ADB, querrá ejecutar algo como esto (cada línea es un nuevo comando):

./adb shell rm -r /sdcard/osmdroid/
./adb shell mkdir /sdcard/osmdroi/
./adb push ~/path/to/your/mapnik.zip /sdcard/osmdroid

Dependiendo del tamaño del mapa y la velocidad del bus de memoria del teléfono, este último paso puede tomar de varios minutos a una hora en completarse. Una vez hecho esto, su mapa debería funcionar, ¡espero!

Como mencioné, esta es la primera vez que uso la API de OSM, por lo que de ninguna manera soy un experto en ella, y solo puedo comentar lo que funcionó para mí.

¡Espero que esto te ayude a comenzar!

EDITAR:

No tuve la oportunidad de ejecutar el código que escribí ayer, por lo que no detecté algunos de los errores. Acabo de crear un nuevo proyecto en Eclipse, volqué mi código allí, arreglé algunas cosas y lo puse en funcionamiento. ¡Todos los cambios que hice se reflejan en el código anterior! Olvidé varias de las declaraciones de importación básicas y olvidé agregar permisos al archivo manifest.xml.

Las últimas líneas de mi manifest.xml ahora se ven así:

     
    
    
    
    
    

Y es posible que también desee agregar esto al manifiesto, aunque ciertamente no es crítico:


Agregue esto justo después del parte.

Además, asegúrese de importar las siguientes dos bibliotecas JAR:

osmdroid-android-3.0.3.jar // Or whatever version you're using...

y

slf4j-android-1.5.8.jar // Or whatever the latest version is...

Sin este último JAR, mi código seguía fallando hasta que me acordé de incluirlo.

Asegúrese de modificar las coordenadas predeterminadas para que apunten a una ubicación para la que realmente tiene mosaicos de mapa; de lo contrario, no verá mucho de nada, aparte de un lienzo en blanco.

¡Lo siento por no ejecutar el código en mi extremo primero!

Aquí hay una solución paso a paso:

En breve:

1- Debes descargar mosaicos de mapas usando Mobile Atlas Creator. He explicado los pasos AQUÍ

2- Mueva el archivo zip resultante a /mnt/sdcard/osmdroid/ en su dispositivo.

3- Agregar osmdroid-android-XXX.jar y slf4j-android-1.5.8.jar en la ruta de compilación de su proyecto

4- Agregar MapView: puede agregar un MapView a su diseño xml


O cree un MapView mediante programación:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)

    mResourceProxy = new ResourceProxyImpl(inflater.getContext().getApplicationContext());
    mMapView = new MapView(inflater.getContext(), 256, mResourceProxy);
    return mMapView;

No olvide agregar estos permisos a su manifiesto:

 





Este es un buen proyecto de muestra. Espero eso ayude 😉

Importante

Como mencionó @Scai: recientemente Open Street Map anunció que esta herramienta no es buena y tenía algunos problemas:

Esta herramienta genera mucho tráfico para los servidores de mosaicos OSM y es probable que se bloquee. Por favor, no lo use.

Si crees que ha resultado de ayuda este post, te agradeceríamos que lo compartas con otros juniors de esta manera nos ayudas a dar difusión a nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4.5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *