5

で使用com.google.android.gms.maps.GoogleMapしていSherlockFragmentActivityます。

XML コードは次のとおりです。

            <fragment
                android:id="@+id/map"
                android:name="com.google.android.gms.maps.SupportMapFragment"
                android:layout_width="fill_parent"
                android:layout_height="150dip" />

int zoomLevel =? // Android マップ v3 はズーム レベルを int として伝える必要があるため、2 つの異なる緯度経度値のズーム レベルを計算する方法

map.setZoom(zoomLevel);

開始値と宛先値を次のように持っていますcom.google.android.gms.maps.model.LatLng

LatLng 開始、終了。

私は次のようなpligonを追加していますGoogleLocation.addPolyLineOnGMap(mMap, startPoint, endPoint, startMarker, endMarker)

私の問題は、Googleマップのズームレベルを計算して、両方のマーカーをマップに適切に表示できるようにする方法です。

4

3 に答える 3

4

私にとっては、初期マップ設定のズームを で計算する必要があるGoogleMapOptionsため、使用してLatLngBounds.Builder も機能せず、最適化されません。これは、都市の北東と南西の座標に基づいてズームを計算する方法です

herethis answerを参照しています。以下のコードをヘルパー クラスに追加するだけです。

final static int GLOBE_WIDTH = 256; // a constant in Google's map projection
final static int ZOOM_MAX = 21;

public static int getBoundsZoomLevel(LatLng northeast,LatLng southwest,
                                     int width, int height) {
    double latFraction = (latRad(northeast.latitude) - latRad(southwest.latitude)) / Math.PI;
    double lngDiff = northeast.longitude - southwest.longitude;
    double lngFraction = ((lngDiff < 0) ? (lngDiff + 360) : lngDiff) / 360;
    double latZoom = zoom(height, GLOBE_WIDTH, latFraction);
    double lngZoom = zoom(width, GLOBE_WIDTH, lngFraction);
    double zoom = Math.min(Math.min(latZoom, lngZoom),ZOOM_MAX);
    return (int)(zoom);
}
private static double latRad(double lat) {
    double sin = Math.sin(lat * Math.PI / 180);
    double radX2 = Math.log((1 + sin) / (1 - sin)) / 2;
    return Math.max(Math.min(radX2, Math.PI), -Math.PI) / 2;
}
private static double zoom(double mapPx, double worldPx, double fraction) {
    final double LN2 = .693147180559945309417;
    return (Math.log(mapPx / worldPx / fraction) / LN2);
}

LatLng簡単に作成するnew LatLng(lat-double, lng-double)

widthピクセル単位のheightマップ レイアウト サイズ

于 2015-07-25T12:33:08.467 に答える