Bubbleで地図アプリを作る第2回。
今回は「登録したデータを地図に表示する」ところまで進めます。
第2回(今回):登録データをリスト表示+ピン表示
前提条件
第1回で作ったDB「行き先」にデータが登録できる状態であること
Mapエレメントがページに配置済みであること
ヘッダーにハンバーガーメニューのアイコンが設置してあること
この記事でできること
地図に複数のピンが立つ
マーカー及び、リストをクリックしたら詳細の地図がPOPUPで表示される
登録された行き先を「リスト」として確認できる

地図に複数マーカーを表示しよう
1. 複数マーカーは「住所(geographic address)」でしか表示できない
Bubble標準のMapエレメントでは、複数ピン表示のときに指定できるのは 住所(geographic address) です。
注意点
GoogleMapに未登録な住所や曖昧な住所だとズレてしまうことがあります。
例:「〇〇町」だけでは正しく解釈されず、別の場所に表示される可能性がある。
2. 複数マーカーを表示する設定手順
Mapエレメントを選択
Number of markers → List
Type of markers → 行き先

行き先のtypesの中の住所fieldを使用します。

データベースに保存してある行き先をData souceからDo Search for で検索して指定します。

これで、データベースに登録された住所にピンが複数立ちます。
3. 詳細な場所を表示したいときは「シングルマーカー」
1つのマーカーを表示する場合は 緯度・経度 でピンを立てられます。
例えば「マーカーをクリック → 詳細をポップアップ表示」といったUIに向いています。
👉 複数表示=住所、詳細表示=緯度経度、と使い分けましょう。
4. シングルマーカーをポップアップで表示する手順
Popup 要素をページに追加
Type of contentを「行き先」にしておきます

Popup の中に Mapエレメントを配置とTextエレメントを配置。
Textエレメントは「Parent group's行き先's名称」
MapエレメントのNumber of markersは「Single」にしておきます

この Map の Data source の設定が大事です。

Calculate formulaを選択します。


Coordinates to Addressを選択し、
latitudeはParent group's行き先緯度、
longitudeはParent group's行き先経度を選択します。
補足. 複数マーカーを緯度経度で表示したいとき
Bubble標準ではできません。
Google Maps Extended などのプラグインを使えば、緯度経度ベースで複数ピン表示が可能になります。
こちらに関してはまた機会がありました、
使用方法を解説しようと思います。
https://bubble.io/plugin/google-maps-extended-1479901297703x967536405834891300
Group Focusにリストを表示しよう
地図にピンを立てただけでは「どんな場所が登録されているのか」一覧で確認するのは難しいですよね。
そこで役立つのが Group Focus です。ハンバーガーメニューに合わせて小さなリストを表示でき、登録済みの行き先をサッと選べるようになります。

1. Group Focusを設置する
Elements → Group Focus を配置
Reference elementを対象のアイコンに指定します
👉 こうすることで、対象のエレメントの近くにGroup Focusが寄ります。Offset top,Offset leftを数値を入れて微調整します。
👉キーボードの上下キーで入力すると調整しやすいです。
※shiftを押しながらだと5pxづつ動きます。

2. Group Focusの仕組みを理解しよう
Group Focusは「基準要素の近くに表示されるミニウィンドウ」です。
ポップアップとの違いは ページ中央ではなく、ボタンの近くに表示できる こと。
これにより、スマホアプリのような直感的なメニューUIが作れます。
3. RepeatingGroupを設置する
Group Focusの中に RepeatingGroup を配置
Type:行き先
Data source:Do a search for 行き先
👉 登録されている行き先データを自動的に一覧表示します。Set fixed number of rowのチェックを外す
Min height of rowを0pxに
👉 実際の高さは セルの中に配置したグループやテキストの高さ によって決まります。
つまり「内容に応じて伸縮する」ようになります。Set fixed number of columns(列数固定)
チェックを入れて
1に設定
👉 一覧は縦方向に流すので、1列表示にします。

Set fixed number of rows とは?
➡️ RepeatingGroupの行数を強制的に固定する設定
行数固定の違い(簡単まとめ)
固定する
→ 決めた行数ぶんの枠が必ず出る
→ データが少ないと空白が並ぶ
→ 多いとそれ以上表示できずに切れる固定しない
→ データ件数に合わせて行が自動で増減する
→ リスト表示に向いている
4. RepeatingGroupの中にグループを設置する
Container layoutをRowで作成
Type of contentを行き先、Data sourceをCurrent cell's行き先にしておきます。

Layoutについては
・Contaier layoutwをRow
・Make this element fixed-heightにチェックを入れて高さを56pxに固定

グループにアイコンとテキストエレメントを配置して
テキストエレメントにはParent group's行き先'名称を選択します。

これでグループフォーカスの中のリストの設定が完了しました。
5. ハンバーガーメニューのワークフローを設定
対象のアイコンを選択してEdit workflowをクリックします。

Element ActionsからAnimeite an elementを選択
対象のElementは先程作成した「Group FocusA」を選択します。
Animationについては色々とあるので、試してみてください。
inとついているものは動きながら表示されるもの、
Outとついてるものは動きながら非表示になるものです。

6. リストのグループにワークフローを設定
対象のGroupを選択→Edit workflowをクリック

Display dataを選択
👉対象のエレメント(今回はPopup)にデータを飛ばすことができます。
Element:Popup行き先
Data to display:Current cell's 行き先

Show Popup:行き先
👉作成したPopUPを表示しますHide GroupFocusA
👉表示していたグループフォーカスを非表示にします。

注意点
行き先データが0件だとピンが出ないので、必ずテストデータを登録しておきましょう
GroupFocusは非表示にしてあげないとPopupと重なって表示されてしまいます。workflowでHideを忘れないようにしましょう。
まとめ
ここまでで、Bubbleで地図アプリを作る第2回として、次のことができるようになりました。
データベースに登録した行き先を地図上に複数ピン表示できる
マーカーやリストから選んだ1件をポップアップで詳細表示できる
Group Focusを使って、ハンバーガーメニューから行き先リストを呼び出せる
これで「行き先を登録 → 地図で確認 → リストから詳細を見る」という基本的なUIが完成しました。
次回(第3回)は、登録した行き先を Googleマップに連携してナビゲーションを開く方法 を解説します。アプリの実用度が一気に上がるのでお楽しみに!
次回予告
次回は、詳細ポップアップの「この場所へ行く」ボタンから Googleマップ(アプリ/Web)を自動で開き、現在地から目的地までのルート案内 を表示する仕組みを作ります。

関連記事
第2回(今回):登録データをリスト表示+ピン表示
