7

マーカーのグループを含む境界矩形を定義するクラスターマーカーがあります。クラスターには、境界を計算するための中心(lat、lon)、マーカーカウント、および緯度と経度のスパンがあります。

Google Maps API(JS)には「getBoundsZoomLevel(bounds)」という関数がありますが、Android用のGoogleMapsSDKで同等のメソッドが見つかりません。特定の境界のズームレベルをどのように推定できますか(特に、解像度/密度が異なるさまざまなデバイスで)?

ユーザーがクラスターマーカーに触れることができ、マップビューがそのクラスターの中心と境界の中央に配置されるように計画しました。

誰かが実用的なコードスニペットまたは私のためのいくつかの提案がありますか?

よろしくThorstenよろしくお願いします。

4

3 に答える 3

11

Solvekさん、ご回答ありがとうございます。その間、私は少し適応した解決策を見つけましたが、それは機能します。このメソッドは、一連のジオ ポイントの境界を計算し、これらのポイントのスパンを計算し、最後に zoomToSpan と animateTo を使用して、指定された領域を拡大および中央揃えします。

 public static void zoomInBounds(final MapView view, final GeoPoint.. bounds) {

    int minLat = Integer.MAX_VALUE;
    int minLong = Integer.MAX_VALUE;
    int maxLat = Integer.MIN_VALUE;
    int maxLong = Integer.MIN_VALUE;

    for (GeoPoint point : bounds) {
        minLat = Math.min(point.getLatitudeE6(), minLat);
        minLong = Math.min(point.getLongitudeE6(), minLong);
        maxLat = Math.max(point.getLatitudeE6(), maxLat);
        maxLong = Math.max(point.getLongitudeE6(), maxLong);
    }

    final MapController controller = view.getController();
    controller.zoomToSpan(
                       Math.abs(minLat - maxLat), Math.abs(minLong - maxLong));
    controller.animateTo(new GeoPoint((maxLat + minLat) / 2,
        (maxLong + minLong) / 2));
}
于 2011-03-02T06:44:41.153 に答える
0

私はこれを試していませんが、おそらくうまくいくでしょう。長方形 (x1,y1)-(x2,y2) があるとします。

    MapController c = mapView.getController();
    c.setCenter(new GeoPoint((x1+x2)/2,(y1+y2)/2));
    c.zoomToSpan(x2, y2);
于 2011-03-01T13:06:04.907 に答える