如何在地图中显示由 geoURI 意图启动的标记?

我有一个应用程序,我想显示不同的位置(一次一个,由用户输入)启动谷歌地图与他们的具体地理坐标。

我现在正在使用它(当然是使用真正的 lat. 和 long. 值) :

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

这完全正是我想要的,除了它没有显示任何指示器或标记为指定的点。它只集中在它所在的位置。

有没有什么方法可以不使用 MapView 来获得标记或其他内容?

80838 次浏览

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.

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.

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.

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

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

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

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