Mostrando un mapa estático de Yahoo! en con la BlackBerry
Veíamos en un artículo anterior (Cómo mostrar imágenes de mapas en el móvil) distintas opciones para mostrar mapas estáticos (simples imágenes de mapas, nada de JavaScript). Vamos a ver con un poco de código cómo utilizar la Yahoo! Map Image API en BlackBerry (que con algunos cambios se podrá adaptar a cualquier aplicación Java ME).
La API acepta varios parámetros para elegir la ubicación del mapa a mostrar, y nosotros vamos a utilizar como parámetros la longitud y latitud del punto central, así como el nivel de zoom y el tamaño de la imagen:
String url = "http://local.yahooapis.com/MapsService/V1/mapImage?appid=mi_yahoo_appid"
+ "&latitude=" + latitude + "&longitude=" + longitude +
"&image_height=" + height + "&image_width=" + width + "&zoom=" + zoom;
El parámetro mi_yahoo_appid es nuestro id de aplicación de Yahoo!, que se puede obtener gratuitamente aquí: Yahoo! Application ID. Con la url formada podemos realizar la llamada a la API.
StreamConnection s = (StreamConnection)Connector.open(url);
HttpConnection httpConn = (HttpConnection)s;
int status = httpConn.getResponseCode();
if (status == HttpConnection.HTTP_OK)
{
try
{
DocumentBuilder doc = DocumentBuilderFactory.newInstance().newDocumentBuilder();
DataInputStream dis = s.openDataInputStream();
Document d = doc.parse(dis);
Element el = d.getDocumentElement();
url = el.getFirstChild().getNodeValue() ;
dis.close();
}
catch(SAXException e)
{
System.err.println(e.toString());
}
catch(ParserConfigurationException e)
{
System.err.println(e.toString());
}
Realizamos la conexión de forma normal, y si todo ha ido bien Yahoo! nos devolverá un documento XML:
<?xml version="1.0" encoding="UTF-8"?>
<Result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">http://img.maps.yahoo.com/mapimage?MAPDATA=eJz6K.d6wXVM6myr2yRPfx6.kl.uMGgD3Tu4JtDQzr_33pFEsTT
SaosZ9OCtsiDrsLv9t65fzjz0CJm6JO2v_ZIHLflY9gto.xWMK9ovlRJVmrBLO4FoSsh3Ipsr
</Result>
Este documento contiene un único elemento, cuyo texto es otra url que contiene la imagen solicitada en formato PNG. Para acceder a esta url, en el package net.rim.device.api.xml.parsers encontramos la clase DocumentBuilder, que nos permite convertir un InputStream en un objeto Document de org.w3c.dom, a partir del cual accedemos fácilmente al valor del elemento. Con esta segunda url volvemos a abrir una conexión:
s = (StreamConnection)Connector.open(url);
httpConn = (HttpConnection)s;
status = httpConn.getResponseCode();
if (status == HttpConnection.HTTP_OK)
{
java.io.InputStream input = s.openInputStream();
byte[] data = new byte[1];
ByteVector bv = new ByteVector();
while ( -1 != input.read(data) )
{
bv.addElement(data[0]);
}
Bitmap bitmap = Bitmap.createBitmapFromPNG(bv.getArray(), 0, -1);
// Mostramos la imagen almacenada en el bitmap
}
Esta vez utilizamos el flujo de bytes devuelto para crear un Bitmap. No podemos utilizar el método getLength() de la conexión para averiguar el número de bytes total porque las cabeceras de la página no incluyen el campo Content-Length. Así que recorremos byte byte el stream para obtener un array de bytes con el que generar el Bitmap.
Ya tenemos nuestro Bitmap para mostrar. Bastará añadir, por ejemplo, un BitmapField y asignarle el Bitmap recién creado.

Javier:
Me interesa mucho la información de tu blog. En este momento me encuentro desarrollando una aplicación para Blackberry, q se conecta a un web service, parsea el xml, forma un array y con éste genera una imagen en pantalla…Me anda fenómeno en el simulador 8310 pero en el aparato no se logra conectar…El aparato tiene internet (con el navegador no tengo ningun problema). Estoy medio enloquecido si tenés alguna idea…Te pido que me contestes al mail, te puedo pasar el código, si te parece. Muchas gracias
Saludos desde argentina….
Francisco
6 de noviembre de 2008 a 22:50
Javier:
Por suerte lo solucioné…tenía mal configurado el wap…Gracias!!!
Francisco
7 de noviembre de 2008 a 21:05
Por casualidad y navegando para desaarollos blackberry encontre el suyo y desearia añadirlo a mi desarrolo blackberry utilizando los mapaas que yo utilizo en mi pagina http://coopelrecreo.com/zoom/UC/Index1.htm me popdia ayudar en este desasarrolo aunque solo fuera mostrar el tile de mi posicion
saludso
r.soler
ramon soler
2 de enero de 2009 a 15:49