Android MapView - автоматически устанавливает масштаб до тех пор, пока все ItemizedOverlay не будут видны - PullRequest
52 голосов
/ 09 марта 2011

Жесткое кодирование setZoom () в onCreate () кажется очень устаревшим, и я хотел бы улучшить пользовательский опыт, изначально установив масштаб в MapView, пока все GeoPoints / OverlayItems не будут видны на карте.

Как это можно сделать автоматически с помощью магии?

Ответы [ 2 ]

128 голосов
/ 09 марта 2011

Вроде как

int minLat = Integer.MAX_VALUE;
int maxLat = Integer.MIN_VALUE;
int minLon = Integer.MAX_VALUE;
int maxLon = Integer.MIN_VALUE;

for (GeoPoint item : items) 
{ 

      int lat = item.getLatitudeE6();
      int lon = item.getLongitudeE6();

      maxLat = Math.max(lat, maxLat);
      minLat = Math.min(lat, minLat);
      maxLon = Math.max(lon, maxLon);
      minLon = Math.min(lon, minLon);
 }

mapController.zoomToSpan(Math.abs(maxLat - minLat), Math.abs(maxLon - minLon));
mapController.animateTo(new GeoPoint( (maxLat + minLat)/2, 
(maxLon + minLon)/2 )); 

edit: Райан сделал хорошее предложение: поставить отступ, чтобы некоторые точки не лежали по краям (спасибо Райан!)

double fitFactor = 1.5;
mapController.zoomToSpan((int) (Math.abs(maxLat - minLat) * fitFactor), (int)(Math.abs(maxLon - minLon) * fitFactor));
2 голосов
/ 09 марта 2011

Нет волшебного способа достичь этого.Я предлагаю перебрать все ваши оверлейные элементы, чтобы получить центр и охват всех этих элементов.Затем установите центр и диапазон соответственно для карты

...