5
27 nov 2009

Introduction


Nous avons appris à mettre une carte dans une application Android, mais une carte mal positionnée, sans fonction de zoom, sans autre vue que la carte basique, est une carte sans intérêt. Comment mettre en oeuvre tout cela. C'est assez simple.

Le contrôleur de zoom


Pour pouvoir afficher le contrôleur de zoom dès que l'utilisateur touche sa carte, il suffit de quelques lignes de codes, que vous pouvez insérer dans la méthode onCreate() public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MapView mapView = (MapView) findViewById(R.id.mapview); mapView.setBuiltInZoomControls(true); } R.id.mapview fait référence à l'identifiant de votre carte dans son layout , ici dans /res/layout/main.xml. Il suffit alors d'appliquer la méthode setBuiltInZoomControls avec le paramètre true; si vous le passez à false, cela permet d'enlever ce contrôleur. Voici le résultat :

Une vue satellite


Pour changer le mode d'affichage pour une vue satellite, il suffit d'appliquer à votre mapView la méthode setSatelitte avec le paramètre true. public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MapView mapView = (MapView) findViewById(R.id.mapview); mapView.setBuiltInZoomControls(true); mapView.setSatellite(true); } Et voici le résultat:

Centrer la carte sur un point précis


Pour positionner sa carte au bon endroit, il suffit d'utiliser quelques méthodes sur la classe MapControler. public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MapView mapView = (MapView) findViewById(R.id.mapview); mapView.setBuiltInZoomControls(true); // centrer la carte sur la station de métro Grands Boulevards à Paris double lat = 48.87153740744375; double lon = 2.342920216006007; GeoPoint gp = new GeoPoint((int) (lat * 1E6), (int) (lon * 1E6)); MapController mc = mapView.getController(); mc.setCenter(gp); mc.setZoom(17); } Il suffit de créer un GeoPoint qui est caractérisé par une latitude et une longitude. Les nombres en format double sont multipliés par 1000000 et castés en int. Ensuite on donne ce point à la méthode setCenter qui s'applique sur le MapController de la mapView. On peut ensuite appliquer un niveau de zoom, suivant ce que l'on souhaite voir. Et voici le résultat:

Dois-je prendre la route ?


Pour finir ce tutoriel, on peut ajouter une couche de trafic routier par exemple. public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MapView mapView = (MapView) findViewById(R.id.mapview); mapView.setBuiltInZoomControls(true); // centrer la carte sur la station de métro Grands Boulevards à Paris double lat = 48.87153740744375; double lon = 2.342920216006007; GeoPoint gp = new GeoPoint((int) (lat * 1E6), (int) (lon * 1E6)); MapController mc = mapView.getController(); mc.setCenter(gp); mc.setZoom(15); mapView.setTraffic(true); } Il suffit d'utiliser la méthode setTraffic avec le paramètre true. Donc, je ne vais pas prendre la voiture :

Remarques


Liens utiles : Google APIs Add-On API Level 4 : http://code.google.com/intl/fr/android/add-ons/google-apis/reference/ind...

Conclusion


Ce second tutoriel à propos d'Android est bien plus simple que le premier. Il s'agit ici de jouer un peu avec l'API Google.
Auteur : Loïc - loic.goblet [ at ] gmail.com

A propos de l'auteur: 

Commentaires

Salut!

Merci pour ces quelques infos tres basiques.. C'est déjà tres utile.

Des plans pour étoffer cette page avec des tutos plus poussés?

Merci et bonne continuation.

Salut et merci pour ces infos.
Il est vrai qu'avec une simple ligne on passe en vue satellite, mais comment faire pour qu'il y ai un bouton qui permettre de changer de vue ?
Je sais que le composant pour le zoom est déjà construit dans l'API, mais pour ajouter un bouton qui disparaisse/apparaisse et lui affecter une fonction comme le changement de vue, comment peut-on faire ?

Bonjour,

Il faut probablement regarder la classe com.google.android.maps.Overlay qui permet de dessiner des objets par dessus la carte. Ces objets peuvent être ensuite manipulés et peuvent répondre à des événements de type "tap" .

Loïc

Merci pour ta réponse.
Oui tu as raison, j'ai trouvé le code pour faire cela :
A poser dans la classe qui extends MapActivity
""""
private OnClickListener mySatelliteListener = new OnClickListener() {
@Override
public void onClick(View v) {
invertSatellite();//Ma fonction satellite/plan
}
};
"""""
A poser dans le de cette classe :
""""
ImageButton myBTSatellite = (ImageButton) findViewById(R.id.sat);//sat est l'id de mon Imagebutton
myBTSatellite.setOnClickListener(mySatelliteListener);
""""
A noter que dans le xml de la map, j'ai :
""""
objet principal
la map avec l'apikey
une couche sur laquelle poser les boutton
Mon bouton @+id/sat


""""
Ceci devrait compléter ton approche.

Bonsoir ,

Comment peux-je mettre des bouttons ou des liens sur La map, et comment je peux gérer les clicks?

Merci.