web-dev-qa-db-ja.com

v2 Android maps?

Android v1のGoogleマップでは、MapViewにはgetMapCenter()。という便利なメソッドがありました。今ではマップセンターを取得する方法がわかりません- v2このAPIのAPIドキュメントを熟読しましたが、そのような機能については言及されていません。

ありがとう、イゴール

71
IgorGanapolsky

同じ問題がありました。この方法でセンターを取得できるようです:

mMap.getCameraPosition().target

ここで、mMapはアクティビティのGoogleMapインスタンスです。これは、基本的にマップの中心を表すLatLngオブジェクトを返します。

GeoPointクラスはもう利用できないことに注意してください。

http://developer.Android.com/reference/com/google/Android/gms/maps/model/CameraPosition.html

ターゲットは「カメラが指している場所」です。 (サンプルコードでテストしましたが、問題なく動作しました)

178
Radu Comaneci

これを行う2つの方法を見つけました。

1)最も簡単な方法は、マップのCameraPositionオブジェクトでターゲットプロパティを使用することです。

 LatLng center = mMap.getCameraPosition().target;

2)2番目はVisibleRegionオブジェクトを使用しています:

VisibleRegion visibleRegion = mMap.getProjection()
                    .getVisibleRegion();

Point x = mMap.getProjection().toScreenLocation(
                    visibleRegion.farRight);

Point y = mMap.getProjection().toScreenLocation(
                    visibleRegion.nearLeft);

Point centerPoint = new Point(x.x / 2, y.y / 2);

LatLng centerFromPoint = mMap.getProjection().fromScreenLocation(
                    centerPoint);

私は両方の答えを比較しました:

Log.d("MapFragment: ", "Center From camera: Long: " + center.longitude
                        + " Lat" + center.latitude);

Log.d("Punto x", "x:" + x.x + "y:" + x.y);
Log.d("Punto y", "y:" + y.x + "y:" + y.y);

Log.d("MapFragment: ", "Center From Point: Long: "
                    + centerFromPoint.longitude + " Lat"
                    + centerFromPoint.latitude);
32
shontauro

以下を使用できます。

latlng=map.getProjection().getVisibleRegion().latLngBounds.getCenter();
13
AAP

マップの中心を取得するには、アクティビティでonMapReady()メソッドを使用し、googleMap.setOnCameraChangeListener() method to get position of Cameを使用しました。

@Override
public void onMapReady(GoogleMap googMap) {
    googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
        @Override
        public void onCameraChange(CameraPosition cameraPosition) {

       Log.i("centerLat",cameraPosition.target.latitude);

       Log.i("centerLong",cameraPosition.target.longitude);

        }
    });
}
6
CommonSenseCode

位置onceのみを取得する場合(たとえば、ユーザーがマップのパンを停止した後)、setOnCameraIdleListenerを使用します。

https://developers.google.com/Android/reference/com/google/Android/gms/maps/GoogleMap.OnCameraIdleListener

mMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
    @Override
    public void onCameraIdle() {
        LatLng position = mMap.getCameraPosition().target;
        Log.d("MapActivity", "Position: " + position);
    }
});

またはJava 8 lambda:

mMap.setOnCameraIdleListener(() -> {
    LatLng position = mMap.getCameraPosition().target;
    Log.d("MapActivity", "Position: " + position);
});

setOnCameraChangeListenerで登録されたリスナーは何度も呼び出され、 documentation が示すように:

これは、フレームごとに1回呼び出される可能性があり、高価な操作を実行しないでください。

2
friederbluemle

cameraPositionを使用する最良の方法

Java:

LatLng centerMap = googleMap.getCameraPosition().target;

kotlin:

googleMap?.cameraPosition?.target?.let {
    // it is LatLng center
}
1
Rasoul Miri