Développement Android : Afficher une carte Thierry Vaira <[email protected]> http://tvaira.free.fr/ 26/11/2017 (rev. 1) Table des matières Afficher une carte sous Android 1 Objectif ........................................................... 1 Introduction ......................................................... 1 OpenStreetMap sous Android ............................................... 1 osmdroid .......................................................... 2 Les permissions ....................................................... 2 La GUI ........................................................... 2 Affichage de la carte .................................................... 2 Exemple ........................................................... 5 Google Maps sous Android ................................................ 10 Liens ............................................................. 11 Afficher une carte sous Android Objectif L’objectif est d’afficher une localisation sur une carte. Pré-requis : Géolocalisation [PDF] Introduction Pour afficher une localisation sur une carte, on peut utiliser : – l’API Google Maps – la bibliothèque osmdroid basé sur OpenStreetMap OpenStreetMap sous Android OpenStreetMap (OSM) est un projet initié en 2004 qui a pour but de constituer une base de données géographiques libre du monde (permettant par exemple de créer des cartes sous licence libre), en utilisant le système GPS et d’autres données libres. Android est un système d’exploitation basé sur Linux pour les téléphones mobiles et autres appareils mobiles. Les appareils sous Android peuvent être utilisés pour afficher et éditer des cartes basées sur OpenStreetMap. Il existe plusieurs bibliothèques permettant aux développeurs Android d’intégrer OpenStreetMap dans leurs propres applications, qu’il s’agisse d’une carte statique, d’une carte entièrement interactive ou d’utilisations plus sophistiquées telles que le géocodage et le routage. Osmdroid est une bibliothèque Android qui fournit des outils pour interagir avec OpenStreetMap. L’OpenStreetMapView est un remplacement (presque) complet pour la classe MapView d’Android. Remarque : osmdroid est une application de démonstration disponible sur google play. 1
11
Embed
Développement Android : Afficher une cartetvaira.free.fr/dev/android/android-carte.pdf · AFFICHER UNE CARTE SOUS ANDROID osmdroid...
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
L’objectif est d’afficher une localisation sur une carte.Pré-requis : Géolocalisation [PDF]
Introduction
Pour afficher une localisation sur une carte, on peut utiliser :– l’API Google Maps– la bibliothèque osmdroid basé sur OpenStreetMap
OpenStreetMap sous Android
OpenStreetMap (OSM) est un projet initié en 2004 qui a pour but de constituer une base de données géographiques libredu monde (permettant par exemple de créer des cartes sous licence libre), en utilisant le système GPS et d’autres donnéeslibres.Android est un système d’exploitation basé sur Linux pour les téléphones mobiles et autres appareils mobiles.Les appareils sous Android peuvent être utilisés pour afficher et éditer des cartes basées sur OpenStreetMap.Il existe plusieurs bibliothèques permettant aux développeurs Android d’intégrer OpenStreetMap dans leurs propresapplications, qu’il s’agisse d’une carte statique, d’une carte entièrement interactive ou d’utilisations plus sophistiquéestelles que le géocodage et le routage.Osmdroid est une bibliothèque Android qui fournit des outils pour interagir avec OpenStreetMap. L’OpenStreetMapViewest un remplacement (presque) complet pour la classe MapView d’Android. Remarque : osmdroid est une application dedémonstration disponible sur google play.
Pour intégrer la bibliothèque osmdroid dans votre application avec Android Studio, il faut éditer le fichier build.gradlesitué dans votre dossier app :� �...dependencies {
...compile 'org.osmdroid:osmdroid-android:5.6.5'
}� �Lire : HowTo osmdroid library
Les permissions
L’application a besoin de certains droits d’accès (uses-permission) et pour cela, il faut modifier le fichier AndroidManifest.xmlde l’application :� �<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"
La classe MapView est une vue qui permet d’afficher une carte. Lorsqu’elle a le focus, elle capture les pressions de toucheet les gestes tactiles pour déplacer la carte.Exemple :� �...import org.osmdroid.views.MapView;
}}� �On peut ajouter une échelle sur la carte en superposition à l’aide de la classe ScaleBarOverlay :� �ScaleBarOverlay myScaleBarOverlay = new ScaleBarOverlay(myOpenMapView);myOpenMapView.getOverlays().add(myScaleBarOverlay);� �On peut ajouter une boussole sur la carte en superposition à l’aide de la classe CompassOverlay :� �CompassOverlay mCompassOverlay = new CompassOverlay(getApplicationContext(), new
InternalCompassOrientationProvider(getApplicationContext()), myOpenMapView);mCompassOverlay.enableCompass();myOpenMapView.getOverlays().add(mCompassOverlay);� �On peut ajouter sa position en superposition à l’aide de la classe MyLocationNewOverlay :� �MyLocationNewOverlay mLocationOverlay = new MyLocationNewOverlay(new GpsMyLocationProvider(getApplicationContext
()), myOpenMapView);mLocationOverlay.enableMyLocation();myOpenMapView.setMultiTouchControls(true);myOpenMapView.getOverlays().add(mLocationOverlay);� �On peut ajouter un Marker (ici avec sa propre image copiée dans res -> drawable) :� �Marker tec = new Marker(myOpenMapView);tec.setPosition(new GeoPoint(localisation.getLatitude(), localisation.getLongitude()));tec.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);tec.setIcon(getResources().getDrawable(R.drawable.trottinette));tec.setTitle("TEC");myOpenMapView.getOverlays().add(tec);
myOpenMapView.invalidate();� �On peut ajouter un tracé à base de lignes avec la classe Polyline :� �ArrayList<GeoPoint> trajet.add(new GeoPoint(localisation.getLatitude(), localisation.getLongitude()));
Polyline line = new Polyline(getApplicationContext());line.setTitle("Un trajet");line.setSubDescription(Polyline.class.getCanonicalName());
// Un tracé à base de lignes rougesPolyline line = new Polyline(getApplicationContext());line.setTitle("Un trajet");line.setSubDescription(Polyline.class.getCanonicalName());line.setWidth(10f);line.setColor(Color.RED);line.setPoints(trajet);line.setGeodesic(true);line.setInfoWindow(new BasicInfoWindow(R.layout.bonuspack_bubble, myOpenMapView));myOpenMapView.getOverlayManager().add(line);
/*Marker tec = new Marker(myOpenMapView);tec.setPosition(new GeoPoint(localisation.getLatitude(), localisation.getLongitude()));tec.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);tec.setIcon(getResources().getDrawable(R.drawable.trottinette));tec.setTitle("TEC");myOpenMapView.getOverlays().add(tec);*/
/*ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();items.add(new OverlayItem("Title", "Description", new GeoPoint(localisation.getLatitude(),
localisation.getLongitude())));
ItemizedOverlayWithFocus<OverlayItem> mOverlay = new ItemizedOverlayWithFocus<OverlayItem>(getApplicationContext(), items,
new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {@Overridepublic boolean onItemSingleTapUp(final int index, final OverlayItem item) {
mRotationGestureOverlay = new RotationGestureOverlay(getApplicationContext(), myOpenMapView);mRotationGestureOverlay.setEnabled(true);myOpenMapView.setMultiTouchControls(true);myOpenMapView.getOverlays().add(this.mRotationGestureOverlay);
trajet = new ArrayList<GeoPoint>();
Log.d("GPS", "onCreate");
initialiserLocalisation();
mLocationOverlay = new MyLocationNewOverlay(new GpsMyLocationProvider(getApplicationContext()),myOpenMapView);
// la précision : (ACCURACY_FINE pour une haute précision ou ACCURACY_COARSE pour une moins bonneprécision)
criteres.setAccuracy(Criteria.ACCURACY_FINE);
// l'altitudecriteres.setAltitudeRequired(true);
// la directioncriteres.setBearingRequired(true);
// la vitessecriteres.setSpeedRequired(true);
// la consommation d'énergie demandéecriteres.setCostAllowed(true);//criteres.setPowerRequirement(Criteria.POWER_HIGH);criteres.setPowerRequirement(Criteria.POWER_MEDIUM);
// on notifie la localisationecouteurGPS.onLocationChanged(localisation);
}
// on configure la mise à jour automatique : au moins 10 mètres et 15 secondeslocationManager.requestLocationUpdates(fournisseur, 15000, 10, ecouteurGPS);
– Guide de développement Android– Données de géolocalisation (Android API)– OpenStreetMap et Android– osmdroid– HowTo osmdroid library– OSMBonusPack– API Google Maps– La localisation et les cartes (OpenClassRooms)