1

私の問題を説明するのは簡単ではありませんが、試してみます。

私はAndroidのGoogleMapを持っています。その上に、ImageViewを常にその中心に配置しています。マップをドラッグ/パンすると、ピンは常に GoogleMap の中心になります。

ここで、マップ上のどこかにマーカーを追加します。中心点がマップの中心に留まり、マーカーがマップ内に表示され、最高のズーム レベルになるようにズームしたいと考えています。

問題は、マーカーがマップの境界内にあるかどうかを確認し、それまでズームイン/アウトし続けると、このプロセスが常に繰り返されます。つまり、ズームインしようとして、マーカーが外側になった場合、ズームアウトする。

問題は、ズームインまたはズームアウトするたびに自分自身を呼び出し続ける OnCameraChange リスナーに依存しているため、ズームイン/ズームアウトのプロセスが無期限に発生し続けることです。

journeyGoogleMap.setOnCameraChangeListener(new OnCameraChangeListener()
{
   @Override
   public void onCameraChange(final CameraPosition position)
   {

基本的に、私が必要としているのは、中心の LatLng と markerLatLng を提供できる関数であり、LatLngBounds を自動的に計算して、私の中心が LatLng 境界の中心内にあることを確認してから、単純に使用できます

public static CameraUpdate newLatLngBounds (LatLngBounds bounds, int width, int height, int padding)

以下のリンクに示すように https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/CameraUpdateFactory#newLatLngBounds(com.google.android.gms.maps.model. LatLngBounds,int , int,int)

さらに明確にする必要がある場合は、教えてください

4

2 に答える 2

2

googleMap.getProjection().getVisibleRegion()画面の四隅すべてLatLngを台形を形成する値として取得するために使用します。台形が中心とマーカーを通る線と交差する場所を計算します。倍率は (中心からマーカーまでの距離 / 中心から交点までの距離) です。次に、中心に対してこの倍率で台形をスケーリングします。これは新しい可視領域です。

を使用して計算を簡略化することもできますがgetVisibleRegion().latLngBounds、返された長方形の一部の領域は実際には表示されないことに注意してください。

于 2013-08-20T02:37:50.670 に答える
2

LatLngBounds次の 2 点から計算する必要があります。

  1. マーカーの位置と
  2. 現在のセンターの反対側に配置します。

2番目は次のように計算されます。

LatLng other = new LatLng(2 * center.latitude - position.latitude, 2 * center.longitude - position.longitude);

一般的な解決策については、 LatLngBoundsUtils.fromCenterAndPositionsを参照してください。

于 2013-08-20T07:43:39.073 に答える