43

リスト内のすべてのポイントが含まれるように、Androidでマップのズームレベルを設定しようとしています。私は次のコードを使用しています。

int minLatitude = Integer.MAX_VALUE;
int maxLatitude = Integer.MIN_VALUE;
int minLongitude = Integer.MAX_VALUE;
int maxLongitude = Integer.MIN_VALUE;

// Find the boundaries of the item set
// item contains a list of GeoPoints
for (GeoPoint item : items) { 
    int lat = item.getLatitudeE6();
    int lon = item.getLongitudeE6();

    maxLatitude = Math.max(lat, maxLatitude);
    minLatitude = Math.min(lat, minLatitude);
    maxLongitude = Math.max(lon, maxLongitude);
    minLongitude = Math.min(lon, minLongitude);
}
objMapController.zoomToSpan(
    Math.abs(maxLatitude - minLatitude), 
    Math.abs(maxLongitude - minLongitude));

これは時々動作します。ただし、一部のポイントが表示されない場合があり、それらのポイントを表示するにはズームアウトする必要があります。この問題を解決する方法はありますか?

4

3 に答える 3

69

Android Map API v2を使用したさらに別のアプローチ:

private void fixZoom() {
    List<LatLng> points = route.getPoints(); // route is instance of PolylineOptions 

    LatLngBounds.Builder bc = new LatLngBounds.Builder();

    for (LatLng item : points) {
        bc.include(item);
    }

    map.moveCamera(CameraUpdateFactory.newLatLngBounds(bc.build(), 50));
}
于 2012-12-26T02:05:24.717 に答える
31

私は自分で答えを見つけました、ズームレベルは正しかったです。画面にすべてのポイントを表示するには、次のコードを追加する必要があります。

objMapController.animateTo(new GeoPoint( 
    (maxLatitude + minLatitude)/2, 
    (maxLongitude + minLongitude)/2 )); 

中心点が適切に位置合わせされていなかったため、問題が発生しました。これは機能します。

于 2011-02-25T10:44:50.140 に答える
0

問題の一部は、MIN_VALUEがまだ正の数である可能性がありますが、緯度と経度は負の数である可能性があります。MIN_VALUEの代わりにNEGATIVE_INFINITYを使用してみてください。

于 2011-10-12T18:29:49.060 に答える