Намерение Google Maps не показывает правильный уровень масштабирования

#android #google-maps #kotlin

#Android #google-карты #kotlin

Вопрос:

Всякий раз, когда я запускаю свое намерение Google Maps, уровень масштабирования по какой-то причине не меняется. Это ошибка или есть что-то, что я делаю неправильно?

Класс данных

 data class MyDataClass(val myCoordinates: String)
 

Класс фрагмента

 ...
    val myDetails = myList[position] as MyDataClass

    val myClickListener = View.OnClickListener {
                val gmmIntentUri = Uri.parse("geo:0,0?q="   myDetails.myCoordinates   "?z=8amp;(Google Australia)")
                val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
                mapIntent.setPackage("com.google.android.apps.maps")
                holder.environsEButton.context.startActivity(mapIntent)


        holder.myButton.context.startActivity(mapIntent)
    }
...
 

Класс фрагмента

 ...
    myList.add(MyDataClass("25.5153717,-0.1000000"))
...
 

Ответ №1:

Масштаб уже представлен z=8 , но местоположение должно быть: geo:25.5153717,-0.1000000 . Просто посмотрите документацию… хотя я бы предположил, что при передаче как координат, так и строки местоположения он может выбрать один из них, а не оба (поскольку эти запросы могут противоречить самим себе, если они не будут ссылаться на одно и то же местоположение).

Комментарии:

1. Оба ответа говорят о 2 совершенно разных вещах. Что geo на самом деле означает?

2. geo может означать географическое местоположение, которое равно координатам. и я бы полностью согласился с другим ответом, что строка запроса могла быть искажена; они всегда начинаются с a ? , а затем дополнительные параметры объединяются с a amp; .

3. Жаль, что проблема, связанная с тем, что пользовательская метка не отображается , до сих пор не устранена спустя несколько лет. В качестве альтернативы я планировал показать a MapView с несколькими маркерами, но я пытаюсь избежать ограничения в 44 тыс. методов, поскольку у меня есть много разных мест, чтобы показать, что большинство из них — дюжина маркеров на a MapView . Будет ли использовать Google Maps Intents для Android (не Maps SDK). используйте меньше методов в целом из-за намерений? Я почти уверен, что зависимость имеет много методов (несмотря на то, что она является androidx), многие из которых мне, вероятно, не нужны.

4. Я также должен добавить, что каждые 6 месяцев мой MapView становится пустым по какой-то странной причине, из-за чего я избегаю его использования. Необходимость так часто сбрасывать мой ключ очень раздражает.

Ответ №2:

Хорошо, вы используете намерения Google Maps для Android (не Maps SDK)

Могу ли я предложить интерполяцию строк

 val zoomLevel : Int = 8
val gmmIntentUri = Uri.parse("geo:0,0?q=${myDetails.myCoordinates}amp;z=${zoomLevel}amp;(Google Australia)")
 

Чтобы изменить уровень масштабирования, вы можете установить значение zoomLevel от 0 до 23.
В вашем MyDataClass вы можете добавить поле zoomLevel.

Редактировать: при ближайшем рассмотрении ваш Uri начинался с ?q , следующий параметр должен быть ?z вместо amp;z . Вот почему ваш масштаб не отображался.

См. https://developers.google.com/maps/documentation/urls/android-intents

Комментарии:

1. Отлично, но теперь маркер больше не появляется.

2. @Swarthy46, geo:0,0 они вернулись к маркеру

3. В этом случае оба ответа не так уж и неверны.

4. Должно ли это быть так? val gmmIntentUri = Uri.parse("geo:0,0?q=${myDetails.myCoordinates}?z=${zoomLevel}(Google Australia)")