Coğrafi URI Amacı tarafından başlatılan Haritalar'da bir işaretçiyi nasıl gösterebilirim?


107

Google Haritalar'ı belirli coğrafi koordinatlarıyla başlatarak farklı konumları (her seferinde bir tane, kullanıcı girişiyle seçilen) göstermek istediğim bir uygulamam var.

Şu anda bunu kullanıyorum (tabii ki gerçek enlem ve uzun değerlerle):

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

Tam olarak istediğim şey bu, ancak belirtilen nokta için herhangi bir gösterge veya işaret göstermemesi dışında. Yalnızca bulunduğu yerde merkezlenir.

MapView kullanmadan işaretleyiciyi veya başka bir şeyi almanın bir yolu var mı?


etiketin en son harita güncellemelerinde gösterilmesi durdu .. ne yapmalı?
user2297550

Yanıtlar:


254

Bunu dene:

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

Bir etiket istemiyorsanız (Etiket + Ad) 'ı atlayabilirsiniz ve en yakın caddeye veya alakalı olduğunu düşündüğü başka bir şeye göre rastgele birini seçecektir.


Bu URI'yi uyguladıktan sonra yakınlaştırmayı ayarlamada sorun yaşıyorum. Görünüşe göre artık kullanılmıyor
LuckyMalaka

8
@mmm ...:? z'yi an & z olarak değiştirmeniz gerekecek. Sadece bir tane alabilir misin? bir uri içinde. KÖTÜ: geo: N, M? Z = 10? Q = N, M (Yer) İYİ: geo: N, M? Z = 10 & q = N, M (Yer)
Josh

Yakınlaştırma yok hala çalışmıyor (ancak etiket işi çalışıyor). Ayrıca haritalar ilgili herhangi bir şey bulamazsa (biz ona etiket vermemize rağmen) bir tost hatası gösterecektir. Bu çözüm işe yarıyor, ancak yalnızca yarı optimal.
Warpzit

3
Bu bir coğrafi konumdan ziyade basit bir sorgu olduğu için yakınlaştırma yok sayılır. Burada olan aslında Google'a gönderilen basit bir sorgudur ve ardından sunucu buna karşılık gelen bir "arama sonucu" ile yanıt verir.
Maps.google.com'da

4
Ike robpvn, bunu (veya etiketli bir sorgu içeren diğer yöntemlerden herhangi birini) kullanmak, bölümdeki coğrafi noktayı tamamen yok sayar geo:. Bazı durumlarda, sorgu enlem / boylam kullanılarak başarısız olur ve ardından coğrafi noktaya geri dönmek yerine "sonuç yok" mesajı alırsınız. Herhangi bir CBS uygulaması için pek kullanışlı değil.
Geobits

45

Etiketinizin içinde "ve" işareti (&) bulunmaması dışında, kabul edilen yanıt doğrudur.

Coğrafi Konumlar için Tek Tip Kaynak Tanımlayıcıya ('coğrafi' URI) Bakmak :

Bölüm 5.1 şunu belirtir:

son URI bir 'sorgu' bileşeni içerecekse, bileşen sınırlayıcı "?" sonucun sonuna, ardından kodlanmış sorgu dizesi.

Maalesef bizim için, bunu yapmak istediğimiz şey olmayan '=' işaretinden de kaçacaktır.

Bunu yapmalıyız:

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
Bu işlevsellik yeni Google Haritalar
7.x'te bozuldu

42

Bir amaç kullanarak bir Google haritası başlatmak için daha birçok seçenek var ...

   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" için gerçekten gerekli değil
Olivier de Jonge

"iwloc", bilgi penceresi konumu ve "hl", dil anlamına gelir; bu değerleri ayarlamazsanız, varsayılan değerler uygulanır. =)
Jorgesys

)ikinci yolu özlüyorsun .
Sen

Güç kaynağı! ikinci ve üçüncü seçenek! teşekkürler ikisini de düzelttim! ᕦ ´ • ᴥ • `ᕥ @Baras
Jorgesys

5

Bu dize benim için iyi çalışıyor:

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

Geo: uri'ye (LocationMarkerName) eklemeyi deneyin. Örneğin, "geo:,? Z = 17 (LocationMarkerName)"

23.0980,30.6797 (NamedMarker) için arama yapan Android'deki Google Haritalar'da, haritayı ortalıyor ve bu konuma NamedMarker adıyla bir işaretçi konumlandırıyor gibi görünüyor.


1

@ Kenton Price'dan gelen aşağıdaki snippet'in hala Android 4.4'te (KitKat) çalıştığını doğruladım:

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

0

Bir haritanın tepesindeki işaretçileri çizmek için yalnızca MapView ile Bindirmeleri kullandım. Görünümünüz haritanızı gösteriyorsa, bir Görünüm üzerine herhangi bir görüntü çizdiğiniz gibi, işaretçinizi ekranın ortasına basitçe çizmeniz mümkün olabilir.

Bununla birlikte, işaretçi gerçek harita koordinatlarına bağlanmaz, ancak yalnızca statik bir görünümse, o zaman bu işe yarayabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.