Увеличить ЗДЕСЬ карты, чтобы показать все маркеры Android - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть несколько мест, которые я показываю на картах ЗДЕСЬ в моем приложении для Android.Всего имеется 4 маркера, из которых 3 маркера находятся в одном городе, а 1 - в другом городе.В настоящее время моя карта приближается к уровню, где видны только 3 маркера в одном городе, а 4-й не виден.Чтобы увидеть этот маркер, мне нужно уменьшить значительный уровень.

Есть ли способ, которым я могу показать все маркеры в пределах карты?

Вот мой код: -

 m_map = mapFragment.getMap();
                m_map.setZoomLevel((m_map.getMaxZoomLevel() + m_map.getMinZoomLevel()) / 2);
                m_map.setMapScheme(Map.Scheme.NORMAL_DAY);

  final GeoCoordinate finalZoomLatLng = m_map.getCenter();
        new Handler().postDelayed(() -> {
            m_map.setCenter(finalZoomLatLng, Map.Animation.NONE);
            m_map.zoomTo(m_map.getBoundingBox(), Map.Animation.NONE, Map.MOVE_PRESERVE_ORIENTATION);
        }, 1000); 

РЕДАКТИРОВАТЬ

С помощью ответа Рахула я достиг чего-то вроде этого: -

for (int i = 0; i < tasks.size(); i++)
{
final GeoCoordinate latLng = m_getPosition(tasks[i]);
LatLng mLatLng = new LatLng(latLng.getLatitude(), latLng.getLongitude());
mLatLngBounds.include(mLatLng);
}

GeoCoordinate finalZoomLatLng = new GeoCoordinate(mLatLngBounds.build().getCenter().latitude, mLatLngBounds.build().getCenter().longitude);
            new Handler().postDelayed(() -> {
                m_map.setCenter(finalZoomLatLng, Map.Animation.NONE);
                m_map.zoomTo(new GeoBoundingBox(finalZoomLatLng, 0.0f, 200000.0f), Map.Animation.NONE, Map.MOVE_PRESERVE_ORIENTATION);
            }, 1000);

Теперь с этим, карта увеличена в центре карты со всеми местами вокруг нее.Однако в этом месте нет маркера, поэтому мне нужно немного уменьшить масштаб, чтобы увидеть все маркеры.Как я могу решить эту проблему?

Любая помощь высоко ценится.

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Вы можете использовать LatLngBounds.Builder () , чтобы сделать несколько маркеров для просмотра под картой.

У него есть метод include , который позволяет добавлять несколькоLAT LNG location.

val bounds: LatLngBounds = locatebuilder.build() // locatebuilder is LatLngBounds.Builder
val padding = 200 // offset from edges of the map in pixels
val cu = CameraUpdateFactory.newLatLngBounds(bounds, padding)
mMap!!.animateCamera(cu)

EDIT

Создание нового списка маркеров при добавлении его в карту

for (mark in markers) { // markers is a list of markers added in the map
    locatebuilder.include(mark.position)
}
1 голос
/ 23 сентября 2019

Вы должны использовать класс CameraUpdate для выполнения (возможно) всех программных перемещений карты.

Для этого сначала рассчитайте границы всех маркеров, как показано ниже:

LatLngBounds.Builder builder = new LatLngBounds.Builder();
//All Marker List to get Position
for (Marker marker : markers) {
 builder.include(marker.getPosition());
}
//Create Latlong Bounds.
LatLngBounds bounds = builder.build();

Затем получите объект описания движения с помощью фабрики: CameraUpdateFactory lime ниже:

int padding = 0; // offset from edges of the map in pixels


CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);

Теперь мы можем использовать это в Map, как показано ниже:

googleMap.moveCamera(cu);
...