web-dev-qa-db-ja.com

Android MapView-すべてのItemizedOverlayが表示されるまで自動的にズームを設定する

onCreate()内のsetZoom()のハードコーディングは非常に時代遅れに感じられ、すべてのGeoPoints/OverlayItemsが地図上に表示されるまでMapViewにズームを設定させることにより、ユーザーエクスペリエンスを強化したいと思います。

これはどのようにして自動的に魔法のように行うことができますか?

52

ちょっとこのような

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));
128
Reno

これを実現する魔法の方法はありません。これらすべてのアイテムの中心とスパンを取得するために、すべてのoverlayitemを反復処理することをお勧めします。次に、マップに合わせて中心とスパンを設定します

2
pankajagarwal