Mapbox: el SDK de mapas abierto

En el momento de integrar mapas en una aplicación móvil tenemos múltiples opciones alternativas a nuestro alcance. En nuestros días, las opciones más utilizadas, sobretodo en el desarrollo móvil, son la API de Google Maps, el SDK de Mapbox y el framework MapKit de Apple. Con lo que, si piensas en incluir mapas en tu aplicación, es conveniente hacer la mejor elección desde un inicio.

Tras trabajar con todas y cada una estas opciones a lo largo de un tiempo, indudablemente, considero que la mejor opción alternativa es tirar por la solución que nos ofrece Mapbox, por su simplicidad y flexibilidad. En el artículo explicaremos por qué razón Mapbox, aparte de ver de qué forma incorporar ciertas funcionalidades más potentes examinando dos fáciles ejemplos.

¿Qué tiene Mapbox que no tienen el resto?

Todo es cien por ciento personalizable. Desde cualquier color hasta mostrar/ocultar capas en el mapa. Hay una serie de estilos libres por defecto (Dark, Light, etcétera) mas asimismo tienes la posibilidad de diseñar/crear tus estilos por completo por medio de la herramienta Mapbox Studio. Últimamente se lanzó Cartogram, que te produce un estilo de forma automática desde una imagen. Los estilos se integran en las aplicaciones agregando una sola línea de código. Como puedes imaginar, todo ello te deja producir mapas acordes con el branding de tu aplicación y de esta manera ofrecer una mejor experiencia a tus usuarios.
Open source. Todo el código está abierto y basado en estándares abiertos. Mapbox dispone de más de quinientos repositorios en Github. Esto te deja ver las funcionalidades que están en desarrollo, reportar cualquier clase de inconveniente que puedas tener o bien aun contribuir mandando PRs. Mapbox es una plataforma hecha por desarrolladores para desarrolladores.
No importa para qué exactamente plataforma desarrolles pues hay SDKs libres para casi todas. Entre las que están Android, iOS, Web, Qt, Unity y MacOS. Además de esto, todas y cada una de las funcionalidades están alcanzables desde cada uno de ellos de ellos, en tanto que comparten una misma base.
In-aplicación. Todo ocurre en tu aplicación. No resulta necesario tener que saltar a otra aplicación para nada (Mapbox no tiene aplicaciones para usuarios con lo que no tiene interés en competir con sus desarrolladores). Esto es en especial útil si estás desarrollando una aplicación de navegación, puesto que, en contraste a otros SDKs, puedes proveer una experiencia de navegación completa, sin perder a tus usuarios en ningún instante. Otro ejemplo es la posibilidad de guardar mapas offline sin salir de tu aplicación.
El core está basado en mapas vectoriales incorporados en C++, de manera que solamente se mandan los datos precisos al dispositivo y se interpretan en tiempo real, lo que se traduce en mapas rapidísimos y en visualizaciones considerablemente más ligeras.
Tanto el SDK de Android como el de iOS tienen una API afín a la de Google Maps y MapKit respectivamente. Con lo que todo el conocimiento que tuvieses te proseguirá siendo útil y además de esto migrar a Mapbox no te va a costar nada. Para hacer el cambio es suficiente con hacer un Sustituir todos a través del IDE y listo.

Talk is cheap. Espectáculo me the code

Para comenzar a utilizar los servicios de Mapbox en tus aplicaciones tan solo precisas el habitual token de acceso, que se logra de forma fácil tras registrarse (utilizar Mapbox es sin coste para tus primeros cincuenta con cero usuarios activos). Hay guías veloces de instalación, tanto para Android para iOS. Tras llenar la guía de la plataforma para la que estés desarrollando, ya vas a estar listo para comenzar a programar.

Ahora, vamos a mostrar de qué manera trabajar con 2 de las funcionalidades más potentes del SDK, Data Driven Styling, Offline y 3D Extrusions. Los ejemplos están escritos en Java para Android. Todavía de esta manera, como ya se ha mentado ya antes, se pueden incorporar en una cualquiera de las otras plataformas libres (y Kotlin, claro).

Primeramente, debemos configurar el token de acceso:

@Override
protected void onCreate(Bundle savedInstanceState) undefined

Ahora, ya podemos incluir un mapa de la próxima forma:

private MapView mapView;

@Override
protected void onCreate(Bundle savedInstanceState) undefined

// Add required Lifecycle methods

activity_style_zoom_dependent_fill_color.xml:

Para asegurar un adecuado manejo entre el ciclo vital de OpenGL y el de Android, MapView define su ciclo vital. Es por este motivo, que debemos sobrescribir los métodos del ciclo vital de la Activity de la próxima forma:

@Override
protected void onStart() undefined

Los métodos que debemos sobre redactar a fin de que todo funcione apropiadamente son los próximos (Mapbox provee implementación para todos ):

onCreate();
onStart();
onResume();
onPause();
onStop();
onSaveInstanceState();
onLowMemory();
onDestroy();

Para finalizar, una vez declarado y asignado el MapView, hay que llamar a MapView#getMapAsync para crear un objeto MapboxMap, preciso para interaccionar con el mapa (como ves, muy semejante a Google Maps API en Android):

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Mapbox.getInstance(this, getString(R.string.access_token));
setContentView(R.layout.activity_style_zoom_dependent_fill_color);

mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);

mapView.getMapAsync(new OnMapReadyCallback() undefined);

Data Driven Styling

Mudar el tono del agua dependiendo del zoom:

mapView.getMapAsync(new OnMapReadyCallback() undefined);

Offline

Descargar un mapa offline:

mapView.getMapAsync(new OnMapReadyCallback() undefined);

3D Extrusions (Building complemento)

Utilizando mapbox-android-complemento-building, enseñar edificios en 3D es tan fácil como:

mapView.getMapAsync(new OnMapReadyCallback() undefined);

Conclusión

Como has podido ver, Mapbox trae muchas funcionalidades que no nos ofrecen otros frameworks. Y esto solo es una pequeña muestra de lo que podemos hacer, puesto que además del SDK de mapas, tenemos libres el Mapbox Services SDK (APIs de Geocoding, Map Matching, Directions, etcétera), el Navigation SDK o bien los Mapbox Complementos.

Y , ¿conocías Mapbox? ¿Cúales son tus casos de empleo al trabajar con mapas? Te animo a que le eches una ojeada a la última versión (Android/iOS) y nos afirmes qué te semeja. En siguientes artículos, vamos a hablar de de qué forma incorporar otras funcionalides y trabajar con el resto de SDKs. Mientras, si tienes cualquier duda, la sección de comentarios es tuya.

Documentación Mapbox Android SDK, Mapbox iOS SDK, Github