Come faccio a mostrare un indicatore in Maps lanciato da Intento URI geografico?


107

Ho un'applicazione in cui voglio mostrare diverse posizioni (una alla volta, selezionata dall'input dell'utente) avviando Google Maps con le loro coordinate geografiche specifiche.

Attualmente lo sto utilizzando (con valori lat. E long. Reali ovviamente):

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

È esattamente quello che voglio, tranne per il fatto che non mostra alcun indicatore o indicatore per il punto specificato. Si concentra solo nella sua posizione.

C'è un modo per includere il marker o qualcos'altro senza utilizzare MapView?


l'etichetta ha smesso di essere mostrata nell'ultimo aggiornamento delle mappe .. cosa fare?
user2297550

Risposte:


254

Prova questo:

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

Puoi omettere (Etichetta + Nome) se non desideri un'etichetta e ne sceglierà una a caso in base alla strada più vicina o ad altra cosa che ritiene rilevante.


Dopo aver implementato questo URI ho problemi con l'impostazione dello zoom. Sembra essere obsoleto ora
LuckyMalaka

8
@mmm ...: dovrai cambiare? z in an & z. Puoi averne solo uno? in un uri. BAD: geo: N, M? Z = 10? Q = N, M (luogo) GOOD: geo: N, M? Z = 10 & q = N, M (luogo)
Josh

Nessuno zoom continua a non funzionare (ma la cosa dell'etichetta funziona). Inoltre se le mappe non riescono a trovare nulla di rilevante (anche se le forniamo l'etichetta) mostrerà un errore di avviso popup. Questa soluzione funziona ma solo semi ottimale.
Warpzit

3
Lo zoom viene ignorato perché si tratta di una semplice query piuttosto che di un geointent. Quello che succede qui è in realtà una semplice query che viene inviata a Google, e quindi il server risponde con un "risultato di ricerca" corrispondente ad esso. Puoi provare a cercare <lat>, <long> (Etichetta + Nome) su maps.google.com e ottenere lo stesso risultato
robpvn

4
L'uso di questo (o di uno qualsiasi degli altri metodi qui che implicano una query etichettata) ignora completamente il punto geografico nella geo:parte, ha sottolineato lke robpvn. In alcuni casi la query non riesce utilizzando lat / long, quindi viene visualizzato un avviso popup "nessun risultato" invece di tornare al geopoint. Non molto utile per qualsiasi tipo di app GIS.
Geobits

45

La risposta accettata è corretta, tranne quando l'etichetta contiene una e commerciale (&).

Esaminando un identificatore di risorsa uniforme per posizioni geografiche (URI 'geo') :

La sezione 5.1 afferma:

se l'URI finale deve includere un componente "query", aggiungi il delimitatore del componente "?" alla fine del risultato, seguito dalla stringa di query codificata.

Sfortunatamente per noi, facendo questo sfuggirà anche il '=' che non è quello che vogliamo.

Dovremmo farlo:

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

2
Questa funzionalità è stato rotto nel nuovo Google Maps 7.x, vedi anche code.google.com/p/android/issues/detail?id=58507
Atom

42

Esistono molte altre opzioni per avviare una mappa di Google utilizzando un intento ...

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

sembra per 2) "& iwloc = A & hl = es" non è realmente necessario
Olivier de Jonge

"iwloc" sta per posizione della finestra informativa e "hl" per la lingua, se non si impostano questi valori, si applicano i valori predefiniti. =)
Jorgesys

ti manca )il secondo modo.
Sen

UPS! seconda e terza opzione! grazie ho sistemato entrambi! ᕦ ´ • ᴥ • `ᕥ @Baras
Jorgesys

5

Questa stringa funziona bene per me:

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

2

Prova ad aggiungere (LocationMarkerName) a geo: uri. Ad esempio, "geo:,? Z = 17 (LocationMarkerName)"

In Google Maps su Android alla ricerca di 23.0980,30.6797 (NamedMarker), sembra centrare la mappa e posizionare un indicatore con nome NamedMarker in quella posizione.


1

Ho appena confermato che il seguente frammento di @Kenton Price funziona ancora su Android 4.4 (KitKat):

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

0

Ho usato solo le sovrapposizioni con MapView per disegnare i marcatori sopra una mappa. Se la tua vista mostra la tua mappa, potrebbe essere possibile disegnare semplicemente il tuo indicatore al centro dello schermo, nello stesso modo in cui disegneresti qualsiasi immagine su una vista.

Tuttavia, l'indicatore non sarebbe collegato alle coordinate effettive della mappa, ma se si tratta solo di una visualizzazione statica, potrebbe funzionare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.