Как увеличить масштаб MapView, чтобы он всегда включал две геопоинта? - PullRequest
4 голосов
/ 22 сентября 2011

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

Ответы [ 3 ]

5 голосов
/ 12 апреля 2013

Проверьте его ответ в другом посте: Google Map V2, как установить ZoomToSpan?

Это решает это без особых хлопот.Обратите внимание, что эту функцию можно использовать только ПОСЛЕ того, как карта была загружена хотя бы один раз.Если не использовать функцию с указанным размером карты на экране

LatLngBounds bounds = new LatLngBounds.Builder()
                    .include(new LatLng(CURRENTSTOP.latitude, CURRENTSTOP.longitude))
                    .include(new LatLng(MYPOSITION.latitude, MYPOSITION.longitude)).build();

Point displaySize = new Point();
getWindowManager().getDefaultDisplay().getSize(displaySize);

map.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, displaySize.x, 250, 30));

Работает как шарм и очень динамично!

4 голосов
/ 22 сентября 2011

Попробуйте и посмотрите:

double latitudeSpan = Math.round(Math.abs(firstLat - 
                secLat));
double longitudeSpan = Math.round(Math.abs(firstLong - 
                secLong));

double currentLatitudeSpan = (double)mapView.getLatitudeSpan();
double currentLongitudeSpan = (double)mapView.getLongitudeSpan();

double ratio = currentLongitudeSpan/currentLatitudeSpan;
if(longitudeSpan < (double)(latitudeSpan+2E7) * ratio){
    longitudeSpan = ((double)(latitudeSpan+2E7) * ratio);
}

mapController.zoomToSpan((int)(latitudeSpan*2), (int)(longitudeSpan*2));                
mapView.invalidate();
0 голосов
/ 02 марта 2013

в новом API Карт (v2) вы можете сделать это следующим образом:

LatLng southwest = new LatLng(Math.min(laglng1.latitude, laglng2.latitude), Math.min(laglng1.longitude, laglng2.longitude));
LatLng northeast = new LatLng(Math.max(laglng1.latitude, laglng2.latitude), Math.max(laglng1.longitude, laglng2.longitude));
googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(new LatLngBounds(southwest, northeast),500,500, 0));
...