[Google Code] Récupérer lat/long depuis un Zoom GoogleMap
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:
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:
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();
}
} |