How do I show a marker in Maps launched by geo URI Intent?
Asked Answered
M

7

113

I have a application where I want to show different locations (one at the time, picked by user input) by launching Google Maps with their specific geo coordinates.

I'm currently using this (with real lat. and long. values of course):

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

It's quite exactly what I want, except that it doesn't show any indicator or marker for the specified point. It only centers at it's location.

Is there some way to get the marker or something else included without using a MapView?

Mu answered 21/10, 2010 at 17:15 Comment(1)
the label has stopped showing in most recent maps update .. what to do?Corolla
V
262

Try this:

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

You can omit (Label+Name) if you don't want a label, and it will choose one randomly based on the nearest street or other thing it thinks relevant.

Veta answered 13/9, 2011 at 17:31 Comment(11)
After implementing this URI i have problems setting the zoom. It seems to be obsolete nowSicular
@mmm...: You'll need to change the ?z to an &z. You can only have one ? in a uri. BAD: geo:N,M?z=10?q=N,M(Place) GOOD: geo:N,M?z=10&q=N,M(Place)Hind
No zoom still doesn't work (but the label thing does). Also if maps can't find anything relevant (even though we supply it with the label) it will show a toast error. This solution works but only semi optimal.Manhunt
That was special, Droider. Instead of <long> and <lat> you enter the longitudinal and latitudinal value you require.Veta
Zoom is ignored because this is a simple query rather than a geointent. What happens here is actually a plain query that is sent to Google, and then the server responds with a "search result" corresponding to it. You can try searching for <lat>,<long>(Label+Name) on maps.google.com and get the same resultIntermigration
Using this(or any of the other methods here which involve a labeled query) completely ignores the geopoint in the geo: portion, lke robpvn pointed out. In some cases the query will fail using lat/long, and then you just get a "no results" toast instead of falling back to geopoint. Not very useful for any sort of GIS app.Macaco
This functionality was broken in new Google Maps 7.x, see too code.google.com/p/android/issues/detail?id=58507Grosso
There's official documentation on: developer.android.com/guide/components/intents-common.html#MapsMorly
this doesn't work any more .. the label does not showCorolla
how to do it with multiple of latlong andoridEvident
this is working, Android12, Uri gmmIntentUri = Uri.parse("geo:"+latitude+","+longitude+"?z="+zoom+"&q="+latitude+","+longitude);Adrastus
A
51

There are many more options to launch a Google map using an intent...

   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);
Aurie answered 4/2, 2014 at 16:29 Comment(4)
looks like for 2) "&iwloc=A&hl=es" is not really neededCoth
"iwloc" stands for info window location and "hl" for the language, if you don´t set this values, default values apply. =)Aurie
you miss ) on second way.Enugu
Ups! second and third option! thanks I have fixed both! ᕦ ´• ᴥ •` ᕥ @BarasAurie
T
45

The accepted answer is correct, except when your label has an ampersand (&) in it.

Looking at A Uniform Resource Identifier for Geographic Locations ('geo' URI):

Section 5.1 states:

if the final URI is to include a 'query' component, add the component delimiter "?" to the end of the result, followed by the encoded query string.

Unfortunately for us, doing this will also escape the '=' which is not what we want.

We should do this:

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);
Theseus answered 22/3, 2012 at 15:22 Comment(1)
This functionality was broken in new Google Maps 7.x, see too code.google.com/p/android/issues/detail?id=58507Grosso
T
6

This string works well for 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);
Tartarean answered 27/1, 2012 at 10:50 Comment(0)
B
2

Try appending (LocationMarkerName) to the geo: uri. For example, "geo:,?z=17(LocationMarkerName)"

In Google Maps on Android searching for 23.0980,30.6797 (NamedMarker), it seems to centre the map and position a marker with name NamedMarker at that position.

Bionics answered 17/1, 2011 at 11:51 Comment(0)
M
1

I just confirmed the following snippet from @Kenton Price still works on Android 4.4 (KitKat):

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:<lat>,<long>?q=<lat>,<long>(Label+Name)"));
startActivity(intent);
Manufacture answered 22/1, 2014 at 6:13 Comment(0)
P
0

I have only used Overlays with the MapView for drawing markers on top of a map. If your view is showing your map, it might be possible to simply draw your marker at the centre of the screen, in the same way as you would draw any image on a View.

However, the marker wouldn't be linked to the actual map coordinates, but if it's just a static view, then this might do.

Pember answered 21/10, 2010 at 19:47 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.