112 votes

Comment afficher un marqueur dans les cartes lancées par l'Intent geo uri ?

J'ai une application où je veux montrer différents lieux (un à la fois, choisis par l'utilisateur) en lançant Google Maps avec leurs géo-coordes spécifiques.

J'utilise actuellement ceci : (avec les valeurs réelles de lat. et long. bien sûr)

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:<lat>,<long>?z=17"));
startActivity(intent);

C'est exactement ce que je veux, sauf qu'il n'affiche aucun indicateur ou marqueur pour le point spécifié. Il se centre uniquement sur son emplacement.

Existe-t-il un moyen d'inclure le marqueur ou autre chose sans utiliser un MapView ?

262voto

Kenton Price Points 2249

Essayez ça :

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:<lat>,<long>?q=<lat>,<long>(Label+Name)"));
startActivity(intent);

Vous pouvez omettre (Label+Name) si vous ne voulez pas d'étiquette, et il en choisira une au hasard en fonction de la rue la plus proche ou de tout autre élément qu'il juge pertinent.

51voto

Elenasys Points 23268

Il existe de nombreuses autres options pour lancer une carte google en utilisant une intention...

   Double myLatitude = 44.433106;
   Double myLongitude = 26.103687;
   String labelLocation = "Jorgesys @ Bucharest";

1)

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:<" + myLatitude  + ">,<" + myLongitude + ">?q=<" + myLatitude  + ">,<" + myLongitude + ">(" + labelLocation + ")"));
    startActivity(intent);

2)

String urlAddress = "http://maps.google.com/maps?q="+ myLatitude  +"," + myLongitude +"("+ labelLocation + ")&iwloc=A&hl=es";     
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlAddress);
    startActivity(intent);

3)

   String urlAddress = "http://maps.googleapis.com/maps/api/streetview?size=500x500&location=" + myLatitude  + "," + myLongitude + "&fov=90&heading=235&pitch=10&sensor=false";
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlAddress);
        startActivity(intent);

45voto

xorgate Points 586

La réponse acceptée est correcte, sauf si votre étiquette contient une esperluette (&).

Regarder Un identificateur de ressources uniformes pour les emplacements géographiques (URI "geo") :

La section 5.1 stipule :

si l'URI final doit inclure un composant 'query', ajoutez le délimiteur de composant " ? à la fin du résultat, suivi de la balise chaîne de requête codée.

Malheureusement pour nous, si nous procédons de la sorte, le '=' s'échappera également, ce qui n'est pas ce que nous voulons. Voici ce que nous devrions faire :

String label = "Cinnamon & Toast";
String uriBegin = "geo:12,34";
String query = "12,34(" + label + ")";
String encodedQuery = Uri.encode( query  );
String uriString = uriBegin + "?q=" + encodedQuery;
Uri uri = Uri.parse( uriString );
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, uri );
startActivity( intent );

6voto

The HCD Points 123

Cette corde fonctionne bien pour moi :

String geoUriString="geo:"+lat+","+lon+"?q=("+head+")@"+lat+","+lon;
Uri geoUri = Uri.parse(geoUriString);
Log.e(TAG, "String: "+geoUriString);
Intent mapCall  = new Intent(Intent.ACTION_VIEW, geoUri);
startActivity(mapCall);

2voto

joshuau Points 21

Avez-vous essayé d'ajouter (LocationMarkerName) à l'uri geo: ? par exemple, "geo :,?z=17(LocationMarkerName)".

Dans Google Maps sur Android, la recherche de 23.0980,30.6797(NamedMarker) semble centrer la carte et positionner un marqueur avec le nom NamedMarker à cette position.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X