Как установить местоположение по умолчанию и уровень масштабирования для API карты Google v2?

91

Когда моя карта показывает, это всегда начинается в фиксированном месте (около Африки).

Затем я использую следующий код, чтобы центрировать карту в нужном мне месте.

mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(loc.getLatitude(), loc.getLongitude()), 14.0f));

У меня вопрос: можно ли установить местоположение по умолчанию и уровень масштабирования до отображения карты?

Потому что я не хочу, чтобы мои пользователи видели анимацию в начале.

Спасибо.

дон221
источник
Этот запрос помог .... Даже если определение местоположения не включено ... animateCamera указывает где-то в Африке ... wiered! ... moveCameraлучшее решение для этого
Devrath
3
хахахахаха ....... +1 за этот вопрос, ты спросил мое сердце. : D ... "он всегда начинается в фиксированном месте (недалеко от Африки)" ........ rofll ..... хотя спасибо.
akash89
2
@ akash89 Как и ожидалось, начинается с LatLng (0.0,0.0): google.com/maps/@0,0,5z Я не уверен, что заставляет вас кататься по полу буквально от смеха (если не ошибаюсь), но Я счастлив, что вы счастливы :)
Навид Вафаэй

Ответы:

175

вы можете использовать это для масштабирования напрямую без анимации:

map.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(xxxx,xxxx) , 14.0f) );
Мох Саккиджа
источник
Спасибо, это как раз то, что мне нужно
:)
у меня есть минимальная широта / долгота и максимальная широта / долгота, тогда как установить ???
Pratik Butani
вы можете добавить для этого новый вопрос, чтобы я мог опубликовать для вас полный ответ, но вкратце вам придется использовать LatLngBounds.Builder, чтобы построить границы и использовать их.
Moh Sakkijha
1
@Saksak Моя проблема в том, что я жду, когда GPS захватит, MyLocationчтобы я мог перемещать и увеличивать карту до местоположения пользователя. Поскольку карта инициализируется в XML, я не могу понять, как предотвратить скачок. В идеале я бы спрятал карту, пока она не MyLocationбудет найдена, а затем покажу ее.
theblang
когда я разместил карту, я получил сообщение об ошибке и сказал мне создать переменную «карта». можно ли импортировать что ли?
Hanzawa Naoki
86

Взгляните на документацию здесь:

https://developers.google.com/maps/documentation/android-api/map#configure_initial_state

Способ сделать это немного отличается в зависимости от того, добавляете ли вы карту через XML или программно. Если вы используете XML, вы можете сделать это следующим образом:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:map="http://schemas.android.com/apk/res-auto"
  android:id="@+id/map"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  class="com.google.android.gms.maps.SupportMapFragment"
  map:cameraBearing="112.5"
  map:cameraTargetLat="-33.796923"
  map:cameraTargetLng="150.922433"
  map:cameraTilt="30"
  map:cameraZoom="13"/>

Если вы делаете это программно, вы можете сделать следующее:

CameraPosition cameraPosition = new CameraPosition.Builder()
    .target(new LatLng(-33, 150))
    .zoom(13)
    .build();
MapFragment.newInstance(new GoogleMapOptions()
    .camera(camera));
Энтони
источник
1
Хороший ответ. Собственно, этот больше подходит для этого вопроса.
MightySeal
2
в xml я получаю ошибку линтаUnexpected namespace prefix "map" found for tag fragment
Мухаммад Бабар
Если даже с xmlns: map = "schemas.android.com/apk/res-auto" у вас все равно будет та же ошибка. Попробуйте добавить этот xmlns: tools = " schemas.android.com/tools " и используйте "tools:" вместо "map:"
Гийом Ильич Чайковский
Ссылка на документацию со всеми параметрами: developers.google.com/maps/documentation/android-sdk/…
Альберт Вила Кальво
искал атрибуты макета, работают отлично. спасибо
Абхишек Гарг
5

На всякий случай, если вы хотите загрузить Google Mapв любой начальной Locationстадии программно, вы можете использовать этот фрагмент кода,

FragmentManager fm = getFragmentManager(); // getChildFragmentManager inside fragments.
CameraPosition cp = new CameraPosition.Builder()
                    .target(initialLatLng) // your initial co-ordinates here. like, LatLng initialLatLng
                    .zoom(zoom_level)
                    .build();
SupportMapFragment mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().camera(cp));
fm.beginTransaction().replace(R.id.rl_map, mapFragment).commit();

Добавьте этот фрагмент кода для layout

<RelativeLayout
       android:id="@+id/rl_map"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent" />

Это загрузит GoogleMapв частности , Locationнепосредственно т.е. initialLatLng.

Джайдипсин Зала
источник
3

Я создал дескриптор SupportMapFragmentи настроил его visibilityна View.INVISIBLEиспользование SupportMapFragment.getView().setVisibility(). Затем в onLocationChangedобратном вызове, который реализует мой класс, я проверяю, имеет ли INVISIBLEзначение VISIBLEtrue. Это избавляет от скачков, которые вы видите при загрузке, позволяя вам динамически инициализировать начальную позицию. В моем случае я центрирую камеру вокруг местоположения пользователя, поэтому onLocationChangedвызывается немедленно из-за setMyLocationEnabled(true).

Ваши требования могут быть разными, но в любом случае вам просто нужно установить видимость, INVISIBLEа затем найти хорошее место для установки VISIBLEпосле загрузки соответствующих данных.

пустышка
источник
2

вы можете использовать Directy CameraUpdate, используя статический latlong

 LatLong latlong = new LatLong(lat, long);
 CameraUpdate cameraPosition = CameraUpdateFactory.newLatLngZoom(latLong, 15);
                mGoogleMap.moveCamera(cameraPosition);
                mGoogleMap.animateCamera(cameraPosition);
Махеш Гавейн
источник