mockmockの位置ジェネレーターを使ってみる

この記事は、[mockmockアドベントカレンダー](https://qiita.com/advent-calendar/2019/mockmock)13日目の記事です。

今回は移動体IoTの強い味方、位置ジェネレーターを使ってみます。

## 位置ジェネレーターとは
地図上に描いた経路に沿って移動をシミュレートし、緯度経度、速度を生成するジェネレーターです。
また、アドバンスドオプション「High-end mock」を適用することで、
地図上に設定できる地点が無制限になり、標高の取得も可能になります。

<img width="844" alt="スクリーンショット 2019-11-27 6.22.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39565/450a6556-c822-bbf8-09e8-5ee1d2e0900f.png">

## 編集画面
編集画面は、下図左側の[経路編集ペイン]と右側の[操作ペイン]から成ります。 また、経路編集ペインでは、経路や地点をクリックすることで編集モーダルが開きます。

### 経路編集ペイン
操作ペインの[編集モード]によって挙動が変わります。

#### 編集モード[経路]
経路情報を編集するためのモードです。

|操作|結果|
|:--|:--|
|何もない場所をドラッグ|地図上の可視範囲を移動|
|地図右下の虫眼鏡アイコンをクリック|地図の拡大・縮小|
|何もない場所をクリック|地点を追加|
|地点からドラッグし何もない場所でドロップ|地点と経路を追加|
|地点からドラッグし他の地点でドロップ|地点間の経路を追加|
|地点を左クリック|地点情報編集モーダルを開く|
|地点を右クリック|地点情報の削除|
|経路を左クリック|経路情報編集モーダルを開く|
|経路を右クリック|経路情報の削除|

#### 編集モード[地点]
すでに設置した地点を移動させるためのモードです。

|操作|結果|
|:--|:--|
|何もない場所をドラッグ|地図上の可視範囲を移動|
|地図右下の虫眼鏡アイコンをクリック|地図の拡大・縮小|
|地点をドラッグ|地点を移動|

### 操作ペイン
操作ペインでは、編集モードの選択や、経路・地点を追加する際のパラメーターの設定などを行います。

|項目|説明|
|:--|:--|
|編集モード|経路編集ペインの編集モードを選択します。|
|地点検索|選択した地点が地図の中心になるよう移動します。地点情報編集モーダルで地点にラベルを設定するとラベル名でも検索できます。広範囲に渡る経路編集を行う際などに便利です。|
|双方向経路|新しく追加する経路の双方向性を設定します。双方向経路として設置した経路は、単方向にすることができません。単方向にする際は一度経路を削除して引き直してください。|
|速度 (m/s)|新しく追加する経路の移動速度を設定します。フォームの下の青から赤のグラデーションは、経路を表す矢印の色と速度との対応を表しています。|
|初期地点|新しく追加する地点を初期地点にするか設定します。初期地点に設定した場合、mock起動時に移動開始地点の候補になります。初期地点が一つも設定されていない場合、移動開始地点は全地点からランダムに選択されます。|
|滞在時間 (s)|新しく追加する地点の滞在時間を設定します。滞在時間は、その地点に達したときに移動を止める時間です。|

### 地点情報編集モーダル
編集モード[経路]モードで地点を左クリックすると、地点情報編集モーダルが開きます。
<img width="597" alt="スクリーンショット 2019-11-27 6.43.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39565/edc7e775-6469-b476-820f-1f901d4c79ba.png">

|項目|説明|
|:--|:--|
|地点コード|自動で付与される地点コードと地点の緯度経度です。|
|ラベル|地点に設定できる任意の名前です。ラベルを設定すると、操作ペインの[地点選択]で検索できます。|
|初期地点|mock起動時にこの地点を移動開始地点の候補とするかの設定です。|
|滞在時間 (s)|この地点に達したときに移動を止める時間です。|

### 経路情報編集モーダル
編集モード[経路]モードで経路を左クリックすると、経路情報編集モーダルが開きます。
<img width="596" alt="スクリーンショット 2019-11-27 6.43.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39565/b6f8afa2-8caf-369b-13b7-2f0569c184ee.png">

|項目|説明|
|:--|:--|
|始点(終点), 終点(始点)|経路の両端の地点の地点コード(ラベルが設定されている場合はラベル)と緯度経度です。|
|距離 (m)|地点間の距離です|
|速度 (m/s)|この経路を移動する際の移動速度です。|
|双方向経路|チェックすると、この経路は双方向に移動可能になります。双方向経路として設置した経路は、単方向にすることができません。単方向にする際は一度経路を削除して引き直してください。|

## 入力例
### 単一経路
決められた経路を移動する場合の例です。 
赤く表示されている地点は初期地点なので、すべてのmockが同じ経路に沿って移動します。
![location_example_single_route-b401f8d788511326d182308311d21cc678d96778fa8d138ddd4715a9be68b8e0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39565/fc6189db-4eb1-021d-8c50-891768f560b1.png)

### ランダム移動
区域内を複数の移動体がランダムに移動するのをシミュレートする場合の例です。
初期地点(赤い点)を複数設定しているため、各mockは起動時にこの中からランダムに初期地点を決定します。 次の経路が2つ以上に分岐している地点に達した場合、次の経路はランダムに選択されます。ただし、後戻りは行いません。
また、経路の矢印が赤〜青になっていますが、相対的に速度が速いほど赤く、遅いほど青くなります。
![location_example_random_walk-434a48b09b8725a61f2d17f8322c44767943378a62d73b2164a060d8bb5bef33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39565/3b5ac96a-dbf7-893a-48dd-87a0f425d5f5.png)

### 世界にまたがる移動
飛行機や船など、世界にまたがる移動を行う場合の例です。
ちゃんと球体上の最短経路を移動してくれるのですが、表示はメルカトル図法のため線がカーブします。
これで飛行機や船のIoTもバッチリですね！
<img width="819" alt="スクリーンショット 2019-11-27 6.58.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39565/af2113ea-f9b8-8719-eaaf-458aca64c1e8.png">

## データテンプレートで設定する
生成タイプ[位置(coordinate)]を選択して、ジェネレーター名と要素名を選択すればOKです。
<img width="1130" alt="スクリーンショット 2019-11-27 7.04.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39565/1e146b73-1a99-58ed-8069-c062fef5a828.png">

明日は@yukabeokaです。
データテンプレートのHTTP Request Headerについてです！