Bagaimana cara menampilkan marker di Maps yang diluncurkan oleh geo URI Intent?


107

Saya memiliki aplikasi tempat saya ingin menunjukkan lokasi yang berbeda (satu per satu, dipilih berdasarkan masukan pengguna) dengan meluncurkan Google Maps dengan koordinat geografis spesifiknya.

Saat ini saya menggunakan ini (tentu saja dengan nilai lintang dan bujur nyata):

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

Itu persis seperti yang saya inginkan, kecuali itu tidak menunjukkan indikator atau penanda apa pun untuk titik yang ditentukan. Itu hanya berpusat di lokasinya.

Apakah ada cara untuk memasukkan penanda atau hal lain tanpa menggunakan MapView?


label telah berhenti ditampilkan di pembaruan peta terbaru .. apa yang harus dilakukan?
pengguna2297550

Jawaban:


254

Coba ini:

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

Anda dapat menghilangkan (Label + Nama) jika tidak menginginkan label, dan label akan memilih salah satu secara acak berdasarkan jalan terdekat atau hal lain yang dianggap relevan.


Setelah menerapkan URI ini, saya mengalami masalah dalam menyetel zoom. Tampaknya sudah usang sekarang
LuckyMalaka

8
@mmm ...: Anda harus mengubah? z menjadi & z. Anda hanya boleh memiliki satu? dalam uri. BURUK: geo: N, M? Z = 10? Q = N, M (Tempat) BAIK: geo: N, M? Z = 10 & q = N, M (Tempat)
Josh

Tidak ada zoom yang masih tidak berfungsi (tetapi label berfungsi). Juga jika peta tidak dapat menemukan sesuatu yang relevan (meskipun kami menyediakannya dengan label) itu akan menunjukkan kesalahan bersulang. Solusi ini bekerja tetapi hanya semi optimal.
Warpzit

3
Zoom diabaikan karena ini adalah kueri sederhana, bukan geointent. Apa yang terjadi di sini sebenarnya adalah kueri biasa yang dikirim ke Google, dan kemudian server merespons dengan "hasil penelusuran" yang sesuai dengannya. Anda dapat mencoba mencari <lat>, <long> (Label + Nama) di maps.google.com dan mendapatkan hasil yang sama
robpvn

4
Menggunakan ini (atau salah satu metode lain di sini yang melibatkan kueri berlabel) sepenuhnya mengabaikan titik geografis di geo:bagian tersebut, lke robpvn menunjukkan. Dalam beberapa kasus, kueri akan gagal menggunakan garis lintang / bujur, lalu Anda hanya mendapatkan toast "tidak ada hasil" alih-alih kembali ke titik geografis. Tidak terlalu berguna untuk semua jenis aplikasi GIS.
Geobits

45

Jawaban yang diterima benar, kecuali jika label Anda memiliki ampersand (&) di dalamnya.

Melihat A Uniform Resource Identifier untuk Lokasi Geografis ('geo' URI) :

Bagian 5.1 menyatakan:

jika URI terakhir menyertakan komponen 'query', tambahkan pembatas komponen "?" ke akhir hasil, diikuti dengan string kueri yang disandikan.

Sayangnya bagi kami, melakukan ini juga akan menghindari '=' yang bukan yang kami inginkan.

Kita harus melakukan ini:

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
Fungsi ini rusak di Google Maps 7.x baru, lihat juga code.google.com/p/android/issues/detail?id=58507
ATom

42

Ada lebih banyak pilihan untuk meluncurkan peta Google menggunakan maksud ...

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

sepertinya untuk 2) "& iwloc = A & hl = es" tidak benar-benar dibutuhkan
Olivier de Jonge

"iwloc" adalah singkatan dari info window location dan "hl" untuk bahasa, jika Anda tidak menyetel nilai ini, nilai default akan berlaku. =)
Jorgesys

Anda melewatkan )cara kedua.
Sen

UPS! opsi kedua dan ketiga! terima kasih saya telah memperbaiki keduanya! ᕦ ´ • ᴥ • `ᕥ @Baras
Jorgesys

5

String ini bekerja dengan baik untuk saya:

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

Coba tambahkan (LocationMarkerName) ke geo: uri. Misalnya, "geo:,? Z = 17 (LocationMarkerName)"

Di Google Maps di Android mencari 23.0980,30.6797 (NamedMarker), tampaknya memusatkan peta dan menempatkan penanda dengan nama NamedMarker pada posisi itu.


1

Saya baru saja mengonfirmasi cuplikan berikut dari @Kenton Price masih berfungsi di Android 4.4 (KitKat):

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

0

Saya hanya menggunakan Overlay dengan MapView untuk menggambar penanda di atas peta. Jika tampilan Anda menunjukkan peta Anda, Anda dapat dengan mudah menggambar penanda di tengah layar, dengan cara yang sama seperti Anda menggambar gambar apa pun pada Tampilan.

Namun, marker tidak akan ditautkan ke koordinat peta yang sebenarnya, tetapi jika itu hanya tampilan statis, mungkin ini bisa dilakukan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.