10

半径を指定して地図上に円を描いていますが、円がうまく描画されます。しかし、シークバーを使用して円のサイズを変更すると、円を画面に表示し、そのレベルのマップをズームする必要があります。これについてはわかりません。ガイドラインが必要です。

4

5 に答える 5

23

描かれた円から地図のズームレベルを取得することもできます

Circle circle = googleMap.addCircle(circleOptions);

googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
                        circleOptions.getCenter(), getZoomLevel(circle)

// zoomlevel のメソッド

public int getZoomLevel(Circle circle) {
    int zoomLevel = 11;
    if (circle != null) {
        double radius = circle.getRadius() + circle.getRadius() / 2;
        double scale = radius / 500;
        zoomLevel = (int) (16 - Math.log(scale) / Math.log(2));
    }
    return zoomLevel;
}
于 2014-12-26T08:16:55.570 に答える
1

長い間、どこかから解決策を見つけました。

これは、最小緯度/経度と最大緯度/経度を私に与えていた方法です。これに基づいて、latspan と longspan を取得しました。

public void boundingCoordinates(double distance, double radius) {

    if (radius < 0d || distance < 0d)
        throw new IllegalArgumentException();

    // angular distance in radians on a great circle
    double radDist = distance / radius;

    double radLat = Math.toRadians(gp.getLatitudeE6()/1e6); // here is your single point latitude gp.getLatitude
    double radLon = Math.toRadians(gp.getLongitudeE6()/1e6); // here is your single point longitude gp.getlongitude

    double minLat = radLat - radDist;
    double maxLat = radLat + radDist;

    double minLon, maxLon;
    if (minLat > MIN_LAT && maxLat < MAX_LAT) {
        double deltaLon = Math.asin(Math.sin(radDist) /Math.cos(radLat));
        minLon = radLon - deltaLon;

        if (minLon < MIN_LON) 
            minLon += 2d * Math.PI;

        maxLon = radLon + deltaLon;

        if (maxLon > MAX_LON) 
            maxLon -= 2d * Math.PI;
    } else {
        // a pole is within the distance
        minLat = Math.max(minLat, MIN_LAT);
        maxLat = Math.min(maxLat, MAX_LAT);
        minLon = MIN_LON;
        maxLon = MAX_LON;
    }

    minLat = Math.toDegrees(minLat);
    minLon = Math.toDegrees(minLon);
    maxLat = Math.toDegrees(maxLat);
    maxLon = Math.toDegrees(maxLon);

    minGeo = new GeoPoint((int)(minLat*1e6),(int)(minLon*1e6));
    maxGeo = new GeoPoint((int)(maxLat*1e6),(int)(maxLon*1e6));
}

今度は、地球の半径を通過する必要があるため、任意の単位で距離を通過します。たとえば、通過する場合、2 km地球の半径は km6370.997です。

あなたはそれを試すことができます、そのクールなこと

于 2012-08-03T11:32:02.980 に答える