geo URIインテントによって起動されたマップにマーカーを表示するにはどうすればよいですか?


107

特定の地理座標でGoogleマップを起動して、さまざまな場所(一度に1つ、ユーザー入力により選択)を表示するアプリケーションがあります。

私は現在これを使用しています(もちろん、実際の緯度と経度の値で):

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

これは、指定したポイントのインジケーターやマーカーが表示されないことを除いて、まったく同じです。それはその場所にのみ集中します。

MapViewを使用せずにマーカーなどを含める方法はありますか?


最新の地図更新でラベルが表示されなくなった..どうすればよいですか?
user2297550

回答:


254

これを試して:

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

ラベルが必要ない場合は、(ラベル+名前)を省略できます。これにより、最寄りの道路または関連すると思われる他のものに基づいてランダムに選択されます。


このURIを実装した後、ズームの設定に問題があります。それは今時代遅れになっているようです
LuckyMalaka

8
@mmm ...:?zを&zに変更する必要があります。1つしか持てませんか?URIで。悪い例:geo:N、M?z = 10?q = N、M(Place)良い例:geo:N、M?z = 10&q = N、M(Place)
Josh

ズームはまだ機能しません(ただし、ラベルは機能します)。また、マップで関連性のあるものが見つからない場合(ラベルを付けても)、トーストエラーが表示されます。このソリューションは機能しますが、準最適です。
Warpzit

3
これは地理的目的ではなく単純なクエリであるため、ズームは無視されます。ここで発生するのは、実際にはGoogleに送信されるプレーンクエリであり、サーバーはそれに対応する「検索結果」で応答します。maps.google.comで<lat>、<long>(Label + Name)を検索して同じ結果を得ることができます
robpvn

4
これ(またはここでラベル付けされたクエリを含む他の方法のいずれか)を使用すると、そのgeo:部分のジオポイントは完全に無視されるとlke robpvnが指摘しました。場合によっては、lat / longを使用するとクエリが失敗し、ジオポイントにフォールバックするのではなく、単に "結果なし"トーストを取得します。あらゆる種類のGISアプリにはあまり役立ちません。
Geobits 2013

45

ラベルにアンパサンド(&)が含まれている場合を除いて、受け入れられた答えは正しいです。

地理的な場所( 'geo' URI)のUniform Resource Identifierを見る:

セクション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);

2
この機能は新しいGoogleマップ7.xで壊れていました。code.google.com
p /

42

インテントを使用して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);

2)のように見えます。 "&iwloc = A&hl = es"は実際には必要ありません
Olivier de Jonge 2017年

「iwloc」は情報ウィンドウの場所を表し、「hl」は言語を表します。この値を設定しない場合、デフォルト値が適用されます。=)
Jorgesys 2017年

あなた)は2番目の方法で逃します。
セン

UPS!2番目と3番目のオプション!両方修正しました。ᕦ ´•ᴥ• `ᕥ@Baras
Jorgesys

5

この文字列は私にとってはうまくいきます:

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

(LocationMarkerName)をgeo:uriに追加してみてください。例:「geo:、?z = 17(LocationMarkerName)」

Android上のGoogleマップで23.0980,30.6797(NamedMarker)を検索すると、マップが中央に配置され、NamedMarkerという名前のマーカーがその位置に配置されます。


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

0

マップの上にマーカーを描画するために、MapViewでオーバーレイのみを使用しました。ビューに地図が表示されている場合は、ビューに画像を描画するのと同じように、画面の中央にマーカーを描画するだけでよい場合があります。

ただし、マーカーは実際のマップ座標にリンクされませんが、それが静的なビューである場合は、そうなる可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.