49 votes

Comment afficher une carte google statique sur une imageview Android ?

Je veux afficher une carte google statique sur une imageview. Quelque chose de similaire à "Whatsapp" montrant tout en partageant l'emplacement. Comment puis-je faire cela ?

104voto

pcans Points 3554

Google offre l'API de carte statique pour laquelle vous avez besoin d'une clé API.

Vous pouvez télécharger un bitmap configuré dynamiquement à partir du Web, le stocker sur le système de fichiers ou dans la mémoire, puis obtenir un drawable à partir de celui-ci afin de le définir dans l'ImageView.

Vous devez générer une url à partir de vos coordonnées pour charger les données depuis le web en utilisant cette url. Exemple pour un bitmap de 200x200 montrant la Tour Eiffel à Paris :

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&key=YOUR_API_KEY"

StackOverflow a déjà répondu à la question de savoir comment télécharger une image du web pour l'afficher dans une vue d'image : enlace

Vous pouvez trouver ici la documentation pour le API Google Static Maps .

19voto

user1494912 Points 61
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;
    }

17voto

Nicolas Adrian Points 498

Vous pouvez également afficher une image statique de manière native avec le SDK maintenant (cela a été ajouté en décembre 2014) : https://developers.google.com/maps/documentation/Android/lite

Cela donnera lieu à un MapView.

5voto

Vinil Chandran Points 1103

La vue Web est ma suggestion pour cela.

Créer un fichier html carte_statique.html à l'intérieur du dossier html dans le dossier des actifs

son contenu peut être le suivant

<!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>

Ensuite, créez programmatiquement une URL de carte statique et remplacez REPLACE_HERE avec elle. Puis chargez-la sur la vue web. Cela réduira considérablement notre effort.

Le code est le suivant

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) {

}

0voto

Alex Points 206

Une autre solution est la bibliothèque Picasso : " Une bibliothèque puissante de téléchargement et de mise en cache d'images pour Android "

Vous donnez l'URL d'une image à Picasso et ensuite il fait une requête GET et charge l'image. Si la requête échoue, Picasso peut définir une image par défaut.

Vous pouvez même définir une animation de progression pendant le chargement de l'image.

C'est une solution bonne et propre.

Un exemple :

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);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X