Как отобразить маркер в Картах, запущенных с помощью географического URI Intent? - PullRequest
103 голосов
/ 21 октября 2010

У меня есть приложение, в котором я хочу показать разные местоположения (по одному, выбираемые с помощью ввода пользователя), запустив Карты Google с их конкретными географическими координатами.

В настоящее время я использую это (с реальнымлат. и длин. значения, конечно):

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

Это именно то, что я хочу, за исключением того, что он не показывает никакого индикатора или маркера для указанной точки.Он только центрируется в своем месте.

Есть ли способ добавить маркер или что-то еще без использования MapView?

Ответы [ 7 ]

245 голосов
/ 13 сентября 2011

Попробуйте это:

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

Вы можете опустить (Label + Name), если вы не хотите метку, и она выберет случайным образом одну из них на основе ближайшей улицы или другой вещи, которую она сочтет необходимой.

43 голосов
/ 22 марта 2012

Принятый ответ правильный, за исключением случаев, когда в вашем ярлыке есть амперсанд (&).

Просмотр Унифицированный идентификатор ресурса для географических местоположений (URI 'geo') :

В разделе 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);
40 голосов
/ 04 февраля 2014

Существует еще много вариантов запуска карты 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);
5 голосов
/ 27 января 2012

Эта строка хорошо работает для меня:

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 голосов
/ 17 января 2011

Попробуйте добавить (LocationMarkerName) к гео: uri. Например, «geo:,? Z = 17 (LocationMarkerName)»

В Google Картах на Android в поиске 23.0980,30.6797 (NamedMarker) кажется, что центр карты и позиционирует маркер с именем NamedMarker в этой позиции.

1 голос
/ 22 января 2014

Я только что подтвердил следующий фрагмент из @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 голосов
/ 21 октября 2010

Я использовал наложения только с MapView для рисования маркеров поверх карты.Если ваш вид показывает вашу карту, возможно, можно просто нарисовать маркер в центре экрана, точно так же, как вы рисуете любое изображение в представлении.

Однако маркер не будетне может быть привязано к фактическим координатам карты, но если это просто статический вид, то это может подойти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...