Как отобразить маркер в Картах, запущенных Geo Uri Intent?
У меня есть приложение, в котором я хочу показать разные местоположения (по одному, выбираемые с помощью ввода пользователя), запустив Карты Google с их конкретными географическими координатами.
В настоящее время я использую это: (с реальными лат. И long. Значениями, конечно)
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:<lat>,<long>?z=17"));
startActivity(intent);
Это именно то, что я хочу, за исключением того, что он не показывает никакого индикатора или маркера для указанной точки. Это только центры в этом месте.
Есть ли способ добавить маркер или что-то еще без использования MapView?
7 ответов
Попробуй это:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:<lat>,<long>?q=<lat>,<long>(Label+Name)"));
startActivity(intent);
Вы можете опустить (Label+Name), если вы не хотите метку, и она выберет одну в случайном порядке на основе ближайшей улицы или другой вещи, которую сочтет уместной.
Есть еще много вариантов запуска карты 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);
Принятый ответ правильный, за исключением случаев, когда на вашем ярлыке есть амперсанд (&).
Рассмотрим универсальный идентификатор ресурса для географических местоположений (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 );
Эта строка хорошо работает для меня:
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);
Вы пытались добавить (LocationMarkerName) в geo: uri? например, "geo:,?z=17(LocationMarkerName)"
В Google Картах на Android поиск 23.0980,30.6797(NamedMarker), кажется, центрирует карту и помещает маркер с именем NamedMarker в эту позицию.
Только что подтвердил следующий фрагмент из @Kenton Price по-прежнему работает на Android 4.4
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:<lat>,<long>?q=<lat>,<long>(Label+Name)"));
startActivity(intent);
Я использовал только Наложения с MapView для рисования маркеров поверх карты. Если ваш вид показывает вашу карту, возможно, можно просто нарисовать маркер в центре экрана, так же, как вы рисуете любое изображение в виде. Тем не менее, маркер не будет связан с фактическими координатами карты, но если это просто статический вид, то это может подойти.