2011-10-24 6 views
1

私はMapViewをポイントPの中央に配置しました。ユーザーはMapViewの中心を変更することはできませんが、ポイントPの周りに表示する円の半径を選択し、新しいサークルを示すために、各変更時に地図が再描画されます。 問題は、表示可能な領域にサークル全体を表示するために、地図を必要に応じて拡大または縮小したいと思うことです。私はこの試みた:Google MapViewのズームアウトが円になる

Projection proj = m_Map.getProjection(); 
Point mapCenterPixles = new Point(); 
proj.toMapPixels(center, mapCenterPixles); 
float radiusPixels = proj.metersToEquatorPixels(newRadius); 

IGeoPoint topLeft = proj.fromPixels(mapCenterPixles.x - radiusPixels, 
     mapCenterPixles.y - radiusPixels); 
IGeoPoint bottomRight = proj.fromPixels(mapCenterPixles.x 
     + radiusPixels, mapCenterPixles.y + radiusPixels); 

m_Map.getController().zoomToSpan(
     topLeft.getLatitudeE6() - bottomRight.getLatitudeE6(), 
     topLeft.getLongitudeE6() - bottomRight.getLongitudeE6()); 

をしかし、値が()、私は一種のここで迷ってしまいました、何のchnageを起こさない、誰かがどのようにいくつかの光を当てるしてくださいすることができzoomToSpanに渡されたとして、私は、何かが欠けているようです半径をメートルで指定した円の境界ボックスとその中心点にまたがるようにマップをズームするには?

答えて

0

Googleマップのズームレベルは2の累乗で定義されているため、MapController#zoomToSpan()は2の累乗でもズームします。

Ergo、あなたが上で計算したスパンが既に現在のズームレベル内に表示可能な場合、次のより大きい、またはより小さいズームレベルに移動する必要があるまで、マップ内で実際には視覚的に変化しません。

この動作はやや漠然とMapController#zoomToSpan

+0

のドキュメントに記述されているが、マイケルをありがとう。あいまいな行動とは別に、私の計算は正しいのでしょうか?私はスパンの意味を完全に理解していませんでしたが、私が見つけた例はほとんどありませんでした。たぶん私は誤算しているので、すでに画面にスパンが表示されていますか? –

+0

'bottomRight'の経度がおそらく' topLeft'の経度よりも大きいことを除いて、ほとんど正しいと思いますので、代わりに 'bottomRight.getLongitudeE6() - topLeft.getLongitudeE6()'を使用してください。そして、あなたのコードは[180番目の子午線](http://en.wikipedia.org/wiki/180th_meridian)の近くで分解されるかもしれないことに注意してください。 –

関連する問題