EDIT : Vu que j'ai rencontré plusieurs problème pour la raison du poste (récupérer la latitude et la longitude avec la map Google), je met les différents points qui ont posé problème et leur solution. A la fin de ce message le code complet de mes deux classes utilisé pour l'affichage de la carte Google et pour dessiner par dessus.
Problème de base :
- Récupérer les informations de lat/long dans une 3ème classe qui lancerais via un bouton la classe Map (ici LocActivity)
Ce qui a été fait :
- Afficher la map
- Créer et Afficher un marqueur
- Effacer le marqueur présent lorsqu'on pose un nouveau marqueur
- Effacer le marqueur présent
- Afficher la position du marqueur dans une AlertDialog ou un Toast (affichage simple)
Voilà ça fait pas grand chose. Pour réaliser ceci j'ai utilisé
- http://developer.android.com/resourc...o-mapview.html
- Recherche Google
- La précieuse aide de dawadam
J'espère que ça pourra aider qqn. Quand j'aurais fini mon "projet" je mettrais comment j'ai récup les informations lat/long. Mais pour ça faut que l'autre partie de mon projet soit fini et cela ne dépend pas de moi
Code actuel
Classe Map
Classe Overlay
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105 import java.util.List; import com.google.android.maps.*; import android.graphics.drawable.Drawable; import android.location.Location; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.Window; public class LocActivity extends MapActivity { // Attribut pour l'affichage de la carte private MapView mapView; // Vue qui affiche la carte private MapController mapController; // Controlleur pour la carte private GeoPoint point; // Point a afficher sur la carte // Attribut pour afficher/utiliser le marqueur private List<Overlay> mapOverlays; // Couche sur la carte private MapItemizedOverlay itemizedOverlay; // Affiche le dessin private OverlayItem overlayItem; // Dessin sur la couche private GeoPoint newPoint; // Nouvelle position Lat/Long private Drawable drawable; // Dessin // Attribut pour vérifier s il y a un marqueur sur la carte private boolean id = false; // true:MarqueurSurCarte // false:PasDeMarqueur // Attribut pour récupérer les information de la position marquee private Location location; // Recuperation position du // marqueur public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); mapView = (MapView) findViewById(R.id.map_view); mapView.setBuiltInZoomControls(true); mapView.setClickable(true); mapController = mapView.getController(); double lat = 46.806219D; double lon = 7.1662690D; point = new GeoPoint((int) (lat * 1E6), (int) (lon * 1E6)); mapController.animateTo(point); mapController.setZoom(17); mapView.setSatellite(true); mapView.invalidate(); this.init(); } @Override protected boolean isRouteDisplayed() { return false; } // Initisalisation de la couche et du marqueur private void init() { drawable = this.getResources().getDrawable(R.drawable.pbleu); // Icone mapOverlays = mapView.getOverlays(); // Ajoute une couche à la vue itemizedOverlay = new MapItemizedOverlay(drawable, this); // Créer un // nouveau dessin } /** Creation du menu */ @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, 1000, 0, "Poser Marqueur").setIcon( android.R.drawable.ic_menu_manage); menu.add(0, 1001, 0, "Supprimer Marqueur").setIcon( android.R.drawable.ic_menu_view); return super.onCreateOptionsMenu(menu); } /** Handler sur le menu */ public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case 1000: mapOverlays.add(itemizedOverlay); newPoint = mapView.getMapCenter(); overlayItem = new OverlayItem(newPoint, "Position", "Lat: " + newPoint.getLatitudeE6() + " Long: " + newPoint.getLongitudeE6()); if (id == true) { itemizedOverlay.supOverlay(); itemizedOverlay.addOverlay(overlayItem); } else if (id == false) { itemizedOverlay.addOverlay(overlayItem); id = true; } // location.setLatitude(newPoint.getLatitudeE6()); // location.setLongitude(newPoint.getLongitudeE6()); break; case 1001: itemizedOverlay.supOverlay(); break; } return super.onOptionsItemSelected(item); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 import java.util.ArrayList; import android.app.AlertDialog; import android.content.Context; import android.graphics.drawable.Drawable; import com.google.android.maps.OverlayItem; public class MapItemizedOverlay extends com.google.android.maps.ItemizedOverlay { // Liste des marqueurs private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); private Context mContext; private AlertDialog.Builder dialog; public MapItemizedOverlay(Drawable defaultMarker) { super(boundCenterBottom(defaultMarker)); } public MapItemizedOverlay(Drawable defaultMarker, Context context) { super(boundCenterBottom(defaultMarker)); mContext = context; dialog = new AlertDialog.Builder(mContext); } @Override protected OverlayItem createItem(int i) { return mOverlays.get(i); } @Override public int size() { return mOverlays.size(); } @Override // Affiche une fenêtre avec les renseignements de la position protected boolean onTap(int index) { OverlayItem item = mOverlays.get(index); dialog.setTitle(item.getTitle()); dialog.setMessage(item.getSnippet()); dialog.show(); // Affichage simple (fonctionnel) // Toast.makeText(mContext, item.getSnippet(), Toast.LENGTH_SHORT).show(); return true; } // Ajoute un marqueur à la couche public void addOverlay(OverlayItem overlay) { mOverlays.add(overlay); populate(); } // Efface le marqueur de la couche utilisee public void supOverlay() { mOverlays.clear(); } }
Partager