2011-03-16 25 views

Respuesta

91

Google ofrece la API de mapas estáticos de forma gratuita.

Puede descargar un mapa de bits configurado dinámicamente desde la web, almacenarlo en el sistema de archivos o en la memoria y luego obtener un dibujable para configurarlo en ImageView.

Debe generar una url a partir de sus coordenadas para cargar los datos de la web utilizando esta url. Exemple de un mapa de bits de 200x200 que muestra la Torre Eiffel en París:

String latEiffelTower = "48.858235"; 
String lngEiffelTower = "2.294571"; 
String url = "http://maps.google.com/maps/api/staticmap?center=" + latEiffelTower + "," + lngEiffelTower + "&zoom=15&size=200x200&sensor=false" 

StackOverflow ya tienen alguna respuesta sobre cómo descargar una imagen de la web con el fin de mostrarlo en una imageview: https://stackoverflow.com/search?q=imageview+url+%5Bandroid%5D

puede encontrar aquí la documentación para el Google Static Maps API.

+0

no sabía que ... gracias por compartir! – WarrenFaith

+0

¡Eso es genial! Utilicé una segunda vista de mapa que me causó muchos problemas (normalmente solo puede tener uno por proceso), pero probablemente me apegue a esta solución. Solo una pregunta: ¿se aplican aquí las 25k descargas por aplicación (https://developers.google.com/maps/documentation/staticmaps/#Limits)? Si es así, ¿cómo lo verifican? Las solicitudes provienen de diferentes dispositivos, la URL no tiene una clave api ... –

+0

tiene razón, sin una clave de API, no pueden aplicar el límite de 25 KB por aplicación. Por ahora, esta api probablemente no tiene un límite, si las solicitudes provienen de diferentes ips. – pcans

-6

En primer lugar, toma la imagen de su mapa que se muestra en una carpeta dibujable después de ese uso como fondo de ese imageView.

+0

no relacionado con la cuestión –

20
public static Bitmap getGoogleMapThumbnail(double lati, double longi){ 
     String URL = "http://maps.google.com/maps/api/staticmap?center=" +lati + "," + longi + "&zoom=15&size=200x200&sensor=false"; 
     Bitmap bmp = null; 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpGet request = new HttpGet(URL); 

     InputStream in = null; 
     try { 
      in = httpclient.execute(request).getEntity().getContent(); 
      bmp = BitmapFactory.decodeStream(in); 
      in.close(); 
     } catch (IllegalStateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return bmp; 
    } 
+4

¡Este código está desactualizado! –

-1

Como lo menciona @pcans, me gusta mucho su solución. Puede usar una cadena como URL para cargar su imagen en ImageView. Sugiero una biblioteca de terceros para una imagen de carga: https://github.com/koush/ion

esperanza de que pueda ayudar a :)

0

Además, otra solución es la biblioteca de Picasso: "Un potente biblioteca de descarga de imágenes y almacenamiento en caché para Android"

darle una URL de la imagen de Picasso y luego lo hace una petición GET y se carga la imagen. Si la petición falla, entonces Picasso puede establecer una imagen predeterminada.

Incluso puede establecer una animación de progreso mientras se carga la imagen.

Es una solución buena y limpia.

Un ejemplo:

ImageView ivUrl = (ImageView) view.findViewById(R.id.iv_photo); 

Picasso.with(getContext()).cancelRequest(ivUrl); 

Picasso.with(getContext()) 
    .load(imageUrlString) 
    .error(R.drawable.ic_error) 
    .placeholder(R.drawable.progress_animation) 
    .into(ivUrl); 
4

vista Web es mi sugerencia para ello.

crear un archivo HTML static_map.html dentro de la carpeta html en la carpeta de recursos

su contenido puede ser como el siguiente

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
<style> 
    html,body{ 
     padding:0; 
     margin:0; 
    } 
    .map{ 
     position: fixed; 
    top: 0; 
    right: 0; 
    bottom: 0; 
    left: 0; 
    width: 100%; 
    height: 100%; 
    } 
</style> 
</head> 

<body> 
<img class="map" src="REPLACE_HERE" > 
</body> 
</html> 

A continuación, mediante programación crear una URL mapa estático y reemplazar REPLACE_HERE cuerda con ella. A continuación, cárguelo en la vista web.Esto reducirá mucho nuestro esfuerzo.

El código es el siguiente

try { 
    String url ="https://maps.googleapis.com/maps/api/staticmap?"; 
    url+="&zoom=13"; 
    url+="&size=600x300"; 
    url+="&maptype=roadmap"; 
    url+="&markers=color:green%7Clabel:G%7C"+latitude+", "+longitude; 
    url+="&key="+ YOUR_GOOGLE_API_KEY; 

    InputStream is = context.getAssets().open("html/static_map.html"); 
    int size = is.available(); 
    byte[] buffer = new byte[size]; 
    is.read(buffer); 
    is.close(); 
    String str = new String(buffer); 
    str = str.replace("REPLACE_HERE", url); 
    wv_map.getSettings().setJavaScriptEnabled(true); 
    wv_map.loadDataWithBaseURL("", str, "text/html", "UTF-8", ""); 
} catch (IOException e) { 

} 
Cuestiones relacionadas