«

»

dic 03 2012

Nueva versión v2 de la API de Google Maps

Hace tan solo unos minutos el equipo Android de Google nos ha dado a conocer una nueva versión de la librería de Google Maps para su sistema operativo móvil. Esta versión v2 es la primera actualización que recibe dicha librería desde que Android está con nosotros, por lo que era muy esperada y necesaria la renovación. Tras el salto más información de las novedades disponibles.
 

 

Con esta actualización tendremos la posibilidad de añadir a nuestras aplicaciones muchas de las características de los mapas que vemos en la aplicación oficial de Google Maps. Entre ellas:

  • La nueva API se usa a través del reciente SDK de servicios del Google Play, por lo que no depende de la versión de Android instalada en el dispositivo.
  • El mapa se muestra en un nuevo MapFragment, facilitando la creación de interfaces dinámicas sin necesidad de recurrir a trucos raros ni de usar una subclase específica de Activity.
  • Se usan vectores para dibujar el mapa (al igual que en la aplicación de Google) mejorando la velocidad de carga y reduciendo el consumo de datos.
  • Mejora la caché para reducir las ocasiones en que los usuarios ven un mapa vacío cargando.
  • Mapas en 3D. Podemos modificar el punto de vista del usuario para ver el mapa en diferentes perspectivas. Orientación, inclinación, zoom y posición a nuestro control.
  • Disponibilidad de mapa por satélite, híbrido, de terreno e incluso mapas de interior (para los afortunados países que disponen de ellos).
  • Facilita el dibujado de figuras en el mapa con polígonos y polilíneas.
  • Los métodos que ya se usaban anteriormente para colocar marcadores se siguen usando en esta versión.
  • Y más…

 
Si aún no sabéis cómo poner mapas en vuestras aplicaciones podéis ir leyendo nuestro tutorial introductorio, que renovaremos tan pronto tengamos tiempo de echarle mano a esta nueva API para probarla a fondo.

Y si sois demasiado impacientes, podéis ir mirándolo por vuestra cuenta en la nueva documentación oficial.
 
Fuente: Android Developers Blog | Google+

Acerca del autor

Rafa Vázquez

Estudio Ingeniería Informática del Software en Sevilla. Me considero geek sin dinero, amante y desarrollador novato de Android. He creado algunas aplicaciones como SeviBus, TicTacDroide, Kill Bieber y Traductor Hoygan, si es que se puede llamar aplicaciones a estas dos últimas ;) Ganas de aprender más y más no me faltan, e intentaré compartir mis experiencias con vosotros en la medida de lo posible.

  • Roberto

    Hola, muchas gracias por el articulo e estado siguiendo los tutoriales que han publicado de google mapse aprendido mucho y me gustaría bastante si en algún momento crearan un tutorial acerca de como hacer rutas en google maps ya que estoy interesado bastante en ese tema, muchas gracias por los tutoriales que publican me han servido bastante.
    Saludos cordiales.

    • http://about.me/sloy Sloy

      Probablemente no hagamos un tutorial de eso dado que es algo muy concreto. Antes quizás fuese más complicado dibujar rutas en el mapa, pero con las polilíneas de la nueva versión es mucho más fácil.
      Echa un ojo a la documentación y al proyecto de ejemplo.

      Un saludo.

  • Alejandro

    He estado viendo tus tutoriales sobre mapas y probando tu aplicación SeviBus y quiero agradecerte todo tu trabajo que creo que es de gran ayuda.

    Actualmente estoy haciendo una aplicación que me muestre las localizaciones de diferentes grabaciones que tengo subidas en un servidor y estoy buscando cómo podría obtener un ArrayList o una matriz de JSON con las posiciones que hay en los metadatos de los audios para añadir marcadores en los mapas.

    He visto que en tu aplicación SeviBus te conectas constantemente con las posiciones de los autobuses y quería saber si te conectas desde el terminal con alguna clase o hay algún proceso desde el servidor que te proporciona esta información. Quizás podrá ayudarme la librería Android Asynchronous Http Client http://loopj.com/android-async-http/ voy a probar con ella.

    Te agradecería cualquier consejo sobre el tema.

    También decirte que estoy probando con la v2 de la api de GoogleMaps así que estaré muy pendiente de si sacas nuevos tutoriales sobre los mapas.

    He visto

    • http://about.me/sloy Sloy

      Puedes ver el código tú mismo en https://github.com/Sloy/SeviBus

      En SeviBus hago uso de un servicio SOAP que tiene la empresa de autobuses. Tu caso es completamente distinto. Tendrías que buscarte la forma de extraer esa información que dices que está en los metadatos, y usarla para construir un webservice accesible desde fuera en formato JSON.

      Para las peticiones HTTP desde Android las puedes hacer de muchas formas y con muchas librerías. Yo uso las clases propias de Android.

      • Alejandro

        He conseguido que me muestre la serie de marcadores en el mapa utilizando peticiones HTTP y recuperando los arrays con JSON pero ahora tengo una duda sobre cómo mandar a una nueva actividad la información contenida en cada infowindow cuando se pulsa sobre él, únicamente consigo enviar la última posición del array haciendo la misma acción sea cual sea el marcador que pulse.

        Lo que hago es lo siguiente:

        String[] arraylatitud = arrlat.toArray(new String[arrlat.size()]);
        String[] arraylongitud = arrlon.toArray(new String[arrlon.size()]);
        String[] arrayrecordname = arrrecname.toArray(new String[arrrecname.size()]);

        for(int i=0; i<arrlon.size();i++){

        markerpos=mapa.addMarker(new MarkerOptions()
        .position(new LatLng(Float.valueOf (arraylatitud[i]),Float.valueOf (arraylongitud[i])))
        .title(arrayrecordname[i])
        .snippet("Latitud:" + arraylatitud[i] + "Longitud:" + arraylongitud[i]));

        }

        mapa.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

        public void onInfoWindowClick(Marker marker) {

        filename=markerpos.getTitle();
        Intent intent = new Intent(MapArea.this, StreamingArea.class);
        intent.putExtra("variable_selection", filename.toString());
        startActivity(intent);

        }
        });

        ¿Conoces alguna manera de solucionar ésto? Gracias de nuevo.

        • http://about.me/sloy Sloy

          La api por si sola no te facilita esa tarea, desgraciadamente. Una forma fácil de solventarlo es usando un mapa del tipo private Map markerMap = new HashMap<>(); de forma que en el onInfoWindowClick() hagas markerMap.get(marker) con el parámetro que recibe el listener para obtener el objeto asociado de tu modelo y hacer las acciones pertinentes.

          Estoy preparando un tutorial más detallado para la nueva API con este tipo de cosas. Espero que pronto puedas verlo ahí si no te queda claro.

          • Alejandro

            Aunque consigo crear mi lista de marcadores a partir del HashMap no me deja recuperar el parámetro getTitle() desde el onInfoWindowClick, éste me aparece vacío ¿Cómo puedo hacer que me lo lance al evento?

            private Map markerMap = new HashMap();
            Marker mark;

            for(int i=0; i<arrlon.size();i++){

            MarkerOptions opt = new MarkerOptions().position(new LatLng(Float.valueOf (arraylatitud[i]),Float.valueOf (arraylongitud[i])))
            .title(arrayrecordname[i])
            .snippet("Latitud:" + arraylatitud[i] + "Longitud:" + arraylongitud[i]);

            mark = mapa.addMarker(opt);
            markerMap.put(mark, arrayrecordname[i]);

            }

            mapa.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

            public void onInfoWindowClick(Marker marker) {

            String mapItem = (String) markerMap.get(marker.getTitle());

            Intent intent = new Intent(MapArea.this, StreamingArea.class);
            intent.putExtra("variable_selection", mapItem);
            startActivity(intent);

            }
            });

          • http://about.me/sloy Sloy

            La clave de tu mapa es de tipo Marker, pero tú le estás pasando un String (el de getTitle) para obtener el valor.
            Normalmente esto te daría un error directamente en Eclipse al detectar que el tipo de dato es incorrecto, pero estás usando el mapa con los tipos genéricos. Tienes que especificarlos declarando el mapa bien, Map http://docs.oracle.com/javase/7/docs/api/java/util/Map.html

  • http://www.sozpic.com Alfonso

    Muy interesante el artículo.

  • David

    Hola que tal, he seguido tu tutorial desde la versión anterior de la api v2 de google maps, mi duda ahora es la siguiente, si quiero utilizar el gps y esta nueva versión de la api, puedo implementar de igual manera el gps que con la api anterior? o cambian las instrucciones, en el caso de la api anterior practicamente con 2 lineas de código el punto de ubicación del usuario(punto azul) en esta nueva api como lo podemos utilizar ? espero me puedas ayudar gracias

    • http://about.me/sloy Sloy

      Las APIS de GPS son propias de Android y no de la librería de mapas, por lo cual la versión de los mapas que uses es totalmente independiente para el uso del GPS.

      Si a lo que te refieres es al indicador de posición del usuario, que creo es a lo que te estás refiriendo realmente, sólo hay que llamar al método setMyLocationEnabled(true) del objeto GoogleMap. Una línea.

      Saludos.

  • Javi

    Hola Sloy.

    Simplemente quería agradecerte el tutorial y el interés que pones para que el resto vayamos aprendiendo lo que tú ya sabes y de una forma tan altruista.

    Saludos.

    Javi.

  • Javi

    Me refería al tutorial sobre la API v1… Ojalá prepares uno igual de completo de la nueva API v2!

    Saludos.

  • http://www.facebook.com/jonatan.osalde Jonatan Uriel Osalde Luna

    que tal sabes como podira pintar KML en esta nueva api. o si el uso de polyline seria indicado, puesto que cada KML tiene alrededor de 400 a 800 puntos GPS y pienso que seria demasiado tardado, lo hago para pintar rutas a autobuses alguna idea?

    • http://about.me/sloy Sloy

      800 puntos sí podrían ser demasiados para mostrar de una vez. Más que por tardar demasiado, porque se haga imposible ver nada en el mapa a menos que se aplique mucho zoom. Quizás te interesaría filtrar lo que muestras a la vez.

  • http://gravatar.com/soniamariamc03 soniamariamc03

    Esta muy interesante tu tutorial, tu informacion ha sido de mucha ayuda queria saber si talves me podria ayudar quiero saber como se puede obtener la informacion de una ruta paso a paso para android espero su respuesta muchisisimas gracias.