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