9
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google Maps API v2 のマーカーの Anchor を探る

Posted at

Google Maps API の Marker には、[Anchor](https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/model/MarkerOptions#anchor(float, float) というプロパティがあり、緯度経度と、画像のどの位置をマッピングさせるかを設定する事ができます。

Marker の既定の画像は、よく見るピンみたいなやつですが、既定の Anchor は、0.5f/1.0f になっています。設定値は、画像に対する「x軸の割合」と「y軸の割合」で、言わんとすることは、「緯度経度の位置を画像の、横方向はちょうど真ん中、縦方向は最下部に合わせる」という事です。

Marker.anchor の設定値

以下のように、設定値を変更すると、それぞれマーカーの表示位置が変わります。(Android SDK に同梱される Google Maps API v2 のサンプルをベースにしています)

anchor_center_bottom.java
mAdelaide = mMap.addMarker(new MarkerOptions()
	.position(ADELAIDE)
    .title("Adelaide")
    .snippet("Population: 1,213,000")
    .anchor(0.5f, 1.0f)); // 既定値と同じ
anchor_left_top.java
mAdelaide = mMap.addMarker(new MarkerOptions()
	.position(ADELAIDE)
    .title("Adelaide")
    .snippet("Population: 1,213,000")
    .anchor(0.0f, 0.0f)); // 左上
anchor_right_middle.java
mAdelaide = mMap.addMarker(new MarkerOptions()
	.position(ADELAIDE)
    .title("Adelaide")
    .snippet("Population: 1,213,000")
    .anchor(1.0f, 0.5f)); // 右中

Marker.anchor examples

v1 ではどうだったっけ?

Google Maps API v1 では、ItemizedOverlayboundCenterboundCenterBottom に相当する機能ですね。こちらはメソッド名の通り、「中央/中心」と「中央/下部」しか対応してなかったので、より柔軟になったと言えます。

ハマりどころ

  • 最初、anchor はピクセル指定だ、と勝手に勘違いして、画像のサイズを取得してゴニョゴニョやってたのは内緒。
  • 0.0〜1.0 の範囲であることを忘れて、0〜100 の値を設定すると、「マーカーが全部消えます」
9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?