Icon Control
この章ではアイコンを地図上に表示し、制御するための方法を紹介します。
アイコンの表示方法
Map.addUserIcon()を呼び出すことで、アプリは任意のアイコンを地図上に表示することができます。
例えばユーザーが地図の特定の場所を長押した際にその場所にアイコンを表示したい場合は以下のようになります。
addOnMapLongClickListenerでOnMapLongClickListenerを登録します。OnMapLongClickListenerで長押しした場所の緯度経度を取得しMapIconオブジェクトを生成します。- 生成した
MapIconオブジェクトをMap.addUserIcon()に渡します。
map.addOnMapLongClickListener(new OnMapLongClickListener() {
@Override
public boolean onMapLongClick(GeoCoordinate point) {
MapIcon icon = new MapIcon();
icon.setImageResource(R.drawable.icon); // アプリで用意するアイコン用画像のリソース
icon.setID("icon_id");
icon.setPosition(point);
map.addUserIcon(icon);
return false;
}
});
アイコンのアンカーについて
アンカー(Anchor)とは、アイコンを地図上の特定の座標に正確に配置するための基準点のことです。
アンカーは、アイコンのどの部分を地図上の座標に合わせるかを決定します。 例えば、ピン型のアイコンを地図上に配置する場合、通常はピンの先端を座標に合わせます。 この場合、ピンの先端がアンカーポイントになります。
ピンの先端に限らずSDKでは、アイコンの中央、四隅、四辺の中央など合計9ヶ所のいずれかにアンカーを設定できます。これにより、用途に応じた柔軟なアイコン配置が可能になります。
アイコンの制御方法
Map.addUserIcon()含め、アイコンに関する主な制御関数は以下の通りです。
| 制御内容 | 関数 |
|---|---|
| アイコン追加 | Map.addUserIcon() |
| アイコン削除 | Map.deleteUserIcon()Map.deleteAllUserIcon() |
| アイコン更新 | Map.updateUserIcon() |
| アイコン取得 | Map.getUserIcon()Map.getAllUserIcon() |
交差点拡大図に対してアイコン制御する場合は、以下の制御関数を使用します。
交差点拡大図については、「交差点拡大図」を参照してください。
| 制御内容 | 関数 |
|---|---|
| アイコン追加 | Map.addIntersectionUserIcon() |
| アイコン削除 | Map.deleteIntersectionUserIcon()Map.deleteAllIntersectionUserIcon() |
| アイコン更新 | Map.updateIntersectionUserIcon() |
| アイコン取得 | Map.getIntersectionUserIcon()Map.getAllIntersectionUserIcon() |
アイコンの制御は追加時のMapIconオブジェクトのIDがキーとなるため、作成したアイコンのIDはアプリ内で保存する必要があります。
アイコンクリックイベント
アイコンに対するクリックは以下のOnIconClickListenerで検出することができます。
// アイコンクリック通知リスナー追加
map.addOnIconClickListener(new OnIconClickListener() {
@Override
public void onIconClick(IconKind kind, MapIcon icon) {
// クリック時の処理を書く
}
}
アイコン表示の更新
表示中のアイコンに対して、設定したMapIconの情報を更新することで、画像や表示位置などを更新することができます。 例えば、アイコンをタップして画像を更新する場合のサンプルコードは以下の通りです。
map.addOnIconClickListener(new OnIconClickListener() {
@Override
public void onIconClick(IconKind kind, MapIcon icon) {
icon.setImageResource(R.drawable.large_icon);
map.updateUserIcon(icon);
}
}
アイコンの地図回転追随
アイコンは指定がなければ地図の回転角度によらず常に一定方向を向きますが、地図の回転角度に合わせてアイコンを自動回転させることもできます。
地図回転追随なし
MapIcon icon = new MapIcon();
icon.setImageResource(R.drawable.MyFlag); // アプリで用意するアイコン用画像のリソース
icon.setIconAnchor(MapIcon.Icon_Anchor.ICON_ANCHOR_CENTER); // アイコンに合わせて設定してください
icon.setID("my flag");
icon.setPosition(point);
icon.setFollowMapRotation(false);
map.addUserIcon(icon);
地図回転追随あり
MapIcon icon = new MapIcon();
icon.setImageResource(R.drawable.MyFlag); // アプリで用意するアイコン用画像のリソース
icon.setIconAnchor(MapIcon.Icon_Anchor.ICON_ANCHOR_CENTER);
icon.setID("my follow map rotation flag");
icon.setPosition(point);
icon.setFollowMapRotation(true);
map.addUserIcon(icon);
地図回転に追随させる場合、アンカーをアイコンの中心に置けるようにしてください。
地図回転追随時はアンカーの設定によらずアイコン中心を軸に回転しますので、そのようになっていないアイコンを使用したときに意図した位置からズレて表示されてしまいます。
プリセットアイコン
地図上のアイコンにはユーザーが表示するアイコン以外にも予めSDKで用意(プリセット)されているアイコンがあり、Map.changePresetIcon()によりそれらのアイコンの画像を変更することができます。
立ち寄り地のアイコンを変更する際のサンプルコードは以下の通りです。
MapIcon wayPointIcon = new MapIcon();
wayPointIcon.setImageResource(R.drawable.myWayPointIcon); // 変更する画像のリソース
map.changePresetIcon(Map.IconKind.ROUTE_STOPOVER1, wayPointIcon);
変更可能なプリセットアイコンの一覧はMap.IconKindに定義されています。
ユーザーが追加するアイコンと異なりプリセットアイコンは追加、削除することができません。アイコン画像の変更のみ可能です。