Mapテンプレートを使用し様々な情報を表示させる

# 目次
1. はじめに
1. 完成イメージ
1. 実装方法
1. 動作チェック
1. 最後に

# はじめに
VisualizerではマップWidgetを使用し、地図を表示することができますが、
ピンをタップした際に表示される情報が、
デフォルトでは名前と詳細だけの限定的な情報しか表示されません。

デフォルト表示↓
![ezgif-4-5fc6e9c168.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/366bee0d-0145-dc8a-f642-438095ffc85f.gif)

マップ WidgetのTemplateを使うことで、
様々な情報を表示させることができるので、今回はその方法をご紹介します！

# 完成イメージ

今回の完成イメージは以下の通りです。
名前以外に、画像と詳細、評価を表示するようなイメージとなります。
![テンプレ使用.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/8880a994-75a3-aa9f-c205-fe6aa7ae5e66.png)

# 実装方法

早速実装方法の紹介をします！

## フォーム作成
まずMap Widgetをフォームに追加しましょう。
今回は画面いっぱいに地図が広がるよう、このように配置しました。
![スクリーンショット 0004-12-09 15.41.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/c3001a53-d200-89eb-610a-66913f9a6830.png)

## Map Template作成
次にMap Widgetを選択した状態でTemplatesタブをクリック後、
Mobile->Mapsを右クリックし、New Templateをクリックします。
![スクリーンショット 0004-12-09 14.00.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/bc5db57d-58c2-6c17-d486-56ba678d4649.png)

ここでは、
マップのピンをタップした時のテンプレートを作成することができます。

今回は、
タイトル、画像、詳細、評価の欄を表示したいので、
以下のような構成でテンプレートを作成しました。

![スクリーンショット 0004-12-09 16.17.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/ba9ec55e-f5c2-d4ca-829a-29794fdcf3b8.png)

背景の色は地図と被らないように、白色に設定しています。
![スクリーンショット 0004-12-09 15.45.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/9bbba1e6-0387-4e05-c8da-aa88e4e68e8b.png)

## テンプレート適用
作成したテンプレートをフォーム側で設定します。
Projectタブを開き、マップWidgetを配置しているフォームを開きます。
マップWidgetを選択した状態で、
PROPERTIES->Mapタブを開きCallout TemplateのEditをクリックします。
![スクリーンショット 0004-12-09 14.00.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/6d48b8d5-a0a0-d6fd-efe0-4c1cd26ea97d.png)


ポップアップが開くので、
先ほど作成したテンプレートの名前を選択し、OKをクリックします。
![スクリーンショット 0004-12-09 14.06.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/bc39d706-6216-f06f-597d-30449156a783.png)

テンプレートの作成・適用まで完了したので、
場所を表示するためのロケーションデータと、
ピンを地図に表示するためのロジックを作成していきます。

## ロジック作成
マップが配置されているフォームのControllerを開き、
以下のように入力します。

```frmMapController.js
define({ 
 //Type your controller code here 
  loadData : function(){
    var locationDatas = [
      {
        id: "pin1", 
        lat: "35.70678417763973",
        lon: "139.79013532331442",
        name: "バーガー喫茶 チルトコ",
        desc: "ハンバーガー店",
        showCallout: true,
        calloutData: {
          "name": "バーガー喫茶 チルトコ",
          "image" : "chilltoko.png",
          "desc" : "おしゃれなハンバーガーショップ！",
          "review" : "★★★★☆"
        }
      },
      {
        id: "pin2", 
        lat: "35.68942579227367",
        lon: "139.77288609129005",
        name: "Wagyu Burger",
        desc: "ハンバーガー店",
        showCallout: true,
        calloutData: {
          "name": "Wagyu Burger",
          "image" : "wagyu.png",
          "desc" : "和牛を使った美味しいハンバーガー！",
          "review" : "★★★☆☆"
        }
      },
      {
        id: "pin3", 
        lat: "35.73343382504281",
        lon: "139.71793555577986",
        name: "No.18ハンバーガー",
        desc: "ハンバーガー店",
        showCallout: true,
        calloutData: {
          "name": "No.18ハンバーガー",
          "image" : "no18.png",
          "desc" : "高品質のグルメバーガー",
          "review" : "★★★★★"
        }
      }
    ];
    this.view.mapMain.widgetDataMapForCallout = {lblLocationName : "name", imgLocation : "image", lblLocationDesc : "desc", lblReview : "review"};
    this.view.mapMain.addPins(locationDatas);
  }
 });
```
`locationDatas`に、
表示したい場所の情報を配列で記載しています。

`widgetDataMapForCallout`では、
テンプレートで作成したWidget名と
locationDatasのデータとの紐付けをおこなっています。
こうすることで、
locationDatasのcalloutDataの中に入っているデータが、
テンプレートで作成したWidgetに表示されるようになります。

`addPins`は、
地図にピンを複数追加するためのメソッドとなります。
詳細は、以下の記事にもありますのでご参考ください。

https://qiita.com/Kony_Team/items/5b2fc9384801e0ae70c7

これでロジックの作成も完了です！

# 動作チェック

早速プレビューで動作を確認してみましょう。

Controllerで書いたマップの情報が表示され、
画像も追加されたことでわかりやすい地図表示になりました！

![ezgif-4-1d3db581f1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/54fe8e31-9738-17e7-dd96-8e7455d5b37d.gif)


# 最後に
テンプレートを使用することで、
伝えたい情報を複数表示することができるので、ぜひ活用してみてくださいね！

# 参考
https://docs.kony.com/konylibrary/visualizer/viz_widget_prog_guide/Content/Map_Properties.htm#calloutT