Android v1用のGoogleマップでは、MapViewには便利な方法がありました
getMapCenter()
。今、私はこのAPIのv2でマップセンターを取得する方法を理解できません。APIドキュメントを熟読しましたが、そのような機能については言及されていません。お知らせ下さい。
ありがとう、イゴール
Android v1用のGoogleマップでは、MapViewには便利な方法がありました
getMapCenter()
。今、私はこのAPIのv2でマップセンターを取得する方法を理解できません。APIドキュメントを熟読しましたが、そのような機能については言及されていません。お知らせ下さい。
ありがとう、イゴール
回答:
私も同じ問題を抱えていました。この方法で中心を取得できるようです:
mMap.getCameraPosition().target
ここで、mMapはアクティビティのGoogleMapインスタンスです。これにより、基本的にマップの中心を表すLatLngオブジェクトが返されます。
GeoPoint
クラスはもう利用できないことに注意してください。
http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.htmlによると
ターゲットは「カメラが向いている場所」です。(サンプルコードでテストしましたが、問題なく動作しました)
私はこれを行う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);
マップの中心を取得するには、アクティビティで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);
}
});
}
位置を1回だけ取得する場合(たとえば、ユーザーがマップのパンを停止した後)、次を使用しますsetOnCameraIdleListener
。
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回の頻度で呼び出される可能性があり、コストのかかる操作を実行するべきではありません。
cameraPositionを使用する最良の方法
java:
LatLng centerMap = googleMap.getCameraPosition().target;
kotlin:
googleMap?.cameraPosition?.target?.let {
// it is LatLng center
}