sos の 作業メモ

プログラミングや英会話学習、マイルや旅行、日常生活など。最近はWebFormなASP.NETのお守りがお仕事です。

日々の生活にhappyをプラスする|ハピタス Gポイント

Google Maps Android API v2 その5 Changing the View

前回の続き

カメラを操作して視界を変えよう。

Google Maps Android API v2は、簡単なジェスチャや操作で、ズームや地図のスクロール、視点の変更を軽快に行える。これは"vector-based map tiles"のおかげ。また、多くの都市で建造物の3D表示が可能となっている。

カメラの向きの変更は、マーカーやオーバーレイ、その他の地図に追加されたグラフィックに影響を与えない。

Changing a Map's View

Google Maps Android API v2の地図は、WebのGoogleMapsと同様に、東西は継ぎ目なく連続し、南北は北緯85度から南緯85度までに制限されたメルカトル図法の地図となっている。

経度方向を無限に、緯度方向を85度でカットしたのは、タイルの選定処理を簡単にするため

The Camera Position

Mapのカメラは、平坦な面を見下ろす形となっている。これらは、target(経緯度)、zoom、bearing、tiltのプロパティで個別に設定できる

  • Target - 地図の中心座標
  • Zoom - 地図の表示倍率。 zoom levelが0のとき、世界地図の横幅が256dpの大きさとなるり、leveが1あがる毎に、256 * 2N [dp]の大きさとなる。 zoom levelは整数でなくても構わない。地図の種類やスクリーンのサイズによって、zoom levelの範囲は変わる
  • Bearing - 向き。真北を0°とする時計回りの角度
  • Tilt - 対象座標の真上から円弧上を移動した際に、真上と対象座標と視点のなす角度

Moving the camera

カメラの位置を変更する際にアニメーションをさせられる。

操作は、CameraUpdateFactoryを利用して生成したCameraUpdateオブジェクトで行う。

Changing zoom level

ズームを変更する

  • CameraUpdateFactory.zoomIn() - zoom levelを+1.0
  • CameraUpdateFactory.zoomOut() - zoom levelを-1.0
  • CameraUpdateFactory.zoomTo(float) - 現在のlevelから引数で指定されたlevelへ変更
  • CameraUpdateFactory.zoomBy(float) - 現在のlevelから引数で指定された量だけ変更
  • CameraUpdateFactory.zoomBy(float, Point) - zoomByと一緒だが、画面の指定されたXY座標の経緯度が変更されないように、カメラの位置を修正する

Changing camera position

  • CameraUpdateFactory.newLatLng(LatLng) - 指定された座標へ変更
  • CameraUpdateFactory.newLatLngZoom(LatLng, float) - 指定された座標とzoom levelへ変更
  • CameraUpdateFactory.newCameraPosition(CameraPosition) - targetやzoom,tilt等、全てを一括で変更する。CameraPosionはコンストラクタで直に生成するか、CameraPosition.Builder()を使って生成する

Setting boundaries

ある範囲の区域を、スクリーンにおさまる最大のズームレベルで表示するには、 CameraUpdateFactory.newLatLngBounds(LatLngBounds bounds, int padding) で、その区域とパティングをピクセルで指定して、戻り値のCameraUpdateを使ってカメラの位置を変更すると良い。 newLatLngBounds(boundary, width, height, padding) のほうは、ピクセルでの縦横のサイズを指定できる。前者がマップがレイアウトされた後でしか使えないのに対し、後者のメソッドはいつでも呼び出せる

Panning (scrolling)

CameraUpdateFactory.scrollBy(float, float) は、指定されたピクセル分だけ対象座標を変更する

Updating the Camera View

CameraUpdateオブジェクトをmapにセットすれば、カメラの位置を、即時もしくはアニメーションで変えられる。

すぐに変更するなら GoogleMap.moveCamera(CameraUpdate)、アニメーションを使用した、より素敵な表現にするなら GoogleMap.animateCamera(cameraUpdate, duration, callback)を使う。

callbackには終了時とキャンセル時のイベントハンドラであるGoogleMap.CancellableCallback、durationにはアニメーションを行う時間をミリ秒で指定する。

以下、mountain viewから弊社までカメラをアニメーションで切り替える例

private static final LatLng MOUNTAIN_VIEW = new LatLng(37.4, -122.1);
private static final LatLng MY_PLACE = new LatLng(34.994927, 135.738935);
GoogleMap map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
map.moveCamera(CameraUpdateFactory.newLatLngZoom(MOUNTAIN_VIEW, 15));
map.animateCamera(CameraUpdateFactory.zoomIn());
map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
CameraPosition cameraPosition = new CameraPosition.Builder()
    .target(MY_PLACE)
    .zoom(17)
    .bearing(90)
    .tilt(30)
    .build();
map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

ということで、ドキュメントを一通り読み終わりました。ちゃんと読んでみると、 結構見落としてることが多いです。もっとスラスラ読めるように英語力も磨かないといけないですね…

さて、飯でも食いながらAPI Referenceにざっと目を通して、次からはAPI Demoアプリのソースを見て行くことにします。

次回へ続く