v2 androidマップのマップの中心を取得する方法は?


83

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

ありがとう、イゴール

回答:


196

私も同じ問題を抱えていました。この方法で中心を取得できるようです:

mMap.getCameraPosition().target

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

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

http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.htmlによると

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


1
おかげで、GeoPointがv2で利用できないことに気づきませんでした。VisibleRegionオブジェクトを使用して、マップ表示の4つのコーナーの間の中間点を計算しました。
IgorGanapolsky 2012

@Radu Comaneci html javascriptで同じことを行う方法は?任意のアイデア
Ankesh kumar Jaisansaria 2016年

良い答えですが、たとえば著作権のグーグルサインを移動するためにパディングを使用している場合、これは影響を受けるため、マップの中央にもこのパディング値が取得されます
sdelvalle57 2018年

34

私はこれを行う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);

1
オプション2は、オプション1とはまったく異なる答えを示します。透明なツールバーがあるためか。ヒントをありがとう!
フライングキウイ2015年

3
では、どちらの方法が正確ですか?
Abdullah Shoaib 2015年

@shontauro html javascriptで同じことをする方法は?任意のアイデア
Ankesh kumar Jaisansaria 2016年

1
javascriptはわかりません。
shontauro 2016年

15

あなたが使用することができます:

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

この溶液を用いて精度ゲット
VVB

6

マップの中心を取得するには、アクティビティで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);

        }
    });
}

5

位置を1回だけ取得する場合(たとえば、ユーザーがマップのパンを停止した後)、次を使用します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);
    }
});

またはJava8ラムダを使用します。

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

に登録されているリスナーsetOnCameraChangeListenerは何度も呼び出され、ドキュメントに次のように記載されていることに注意してください。

これは、フレームごとに1回の頻度で呼び出される可能性があり、コストのかかる操作を実行するべきではありません。


3

cameraPositionを使用する最良の方法

java:

LatLng centerMap = googleMap.getCameraPosition().target;

kotlin:

googleMap?.cameraPosition?.target?.let {
    // it is LatLng center
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.