110

我有一个应用程序,我想通过启动带有特定地理坐标的谷歌地图来显示不同的位置(一次一个,由用户输入选择)。

我目前正在使用这个(当然有真正的纬度和经度值):

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

这正是我想要的,只是它没有显示指定点的任何指示器或标记。它仅以它的位置为中心。

是否有某种方法可以在不使用 MapView 的情况下获取标记或其他内容?

4

7 回答 7

260

尝试这个:

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

如果您不想要标签,您可以省略 (Label+Name),它会根据最近的街道或它认为相关的其他事物随机选择一个。

于 2011-09-13T17:31:30.097 回答
48

使用 Intent 启动 Google 地图还有更多选择...

   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);
于 2014-02-04T16:29:49.943 回答
45

接受的答案是正确的,除非您的标签中包含与号 (&)。

查看地理位置的统一资源标识符('geo' URI)

第 5.1 节规定:

如果最终 URI 将包含一个“查询”组件,请添加组件分隔符“?” 到结果的末尾,然后是编码的查询字符串。

对我们来说不幸的是,这样做也会逃避我们不想要的'='。

我们应该这样做:

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);
于 2012-03-22T15:22:13.367 回答
6

这个字符串对我很有效:

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);
于 2012-01-27T10:50:42.490 回答
2

尝试将 (LocationMarkerName) 附加到 geo: uri。例如,“geo:,?z=17(LocationMarkerName)”

在 Android 上的 Google 地图中搜索 23.0980,30.6797 (NamedMarker),它似乎将地图居中并在该位置放置一个名为 NamedMarker 的标记。

于 2011-01-17T11:51:57.143 回答
1

我刚刚确认来自@Kenton Price 的以下片段仍然适用于 Android 4.4 (KitKat):

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:<lat>,<long>?q=<lat>,<long>(Label+Name)"));
startActivity(intent);
于 2014-01-22T06:13:25.260 回答
0

我只使用带有 MapView 的 Overlays 在地图上绘制标记。如果您的视图正在显示您的地图,则可以简单地在屏幕中心绘制标记,就像在视图上绘制任何图像一样。

但是,标记不会链接到实际的地图坐标,但如果它只是一个静态视图,那么可能会这样做。

于 2010-10-21T19:47:00.907 回答