web-dev-qa-db-fra.com

Comment afficher un marqueur dans les cartes lancées par geo URI Intent?

J'ai une application où je souhaite afficher différents emplacements (un à la fois, sélectionnés par l'utilisateur) en lançant Google Maps avec leurs coordonnées géographiques spécifiques.

J'utilise actuellement ceci (avec de vraies valeurs lat et longues. 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 ne montre aucun indicateur ni marqueur pour le point spécifié. Il se concentre uniquement sur son emplacement.

Existe-t-il un moyen d’obtenir le marqueur ou autre chose incluse sans utiliser MapView?

105
Specur

Essaye ça:

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

Vous pouvez omettre (étiquette + nom) si vous ne voulez pas d’étiquette et elle en choisira une au hasard en fonction de la rue la plus proche ou de tout autre élément qu’elle jugera pertinent.

246
Kenton Price

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

Regardant n identificateur de ressource uniforme pour les emplacements géographiques ('geo' URI) :

La section 5.1 stipule:

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

Malheureusement pour nous, cela échappera également au '=' qui n'est pas ce que nous voulons.

Nous devrions faire ceci:

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);
44
xorgate

Il y a beaucoup plus d'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);
40
Jorgesys

Cette chaîne 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);
5
The HCD

Essayez d’ajouter (LocationMarkerName) au fichier geo: uri. Par exemple, "geo:,? Z = 17 (LocationMarkerName)"

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

2
joshuau

Je viens de confirmer l'extrait suivant de @Kenton Price fonctionne toujours sur Android 4.4 (KitKat):

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

J'ai utilisé les superpositions avec MapView uniquement pour dessiner des marqueurs au-dessus d'une carte. Si votre vue montre votre carte, il pourrait être possible de simplement dessiner votre marqueur au centre de l'écran, de la même manière que vous dessineriez une image sur une vue.

Cependant, le marqueur ne serait pas lié aux coordonnées réelles de la carte, mais s'il ne s'agissait que d'une vue statique, cela pourrait suffire.

0
John J Smith