MaplatEditorでマッピングした地図をMaplat Coreに取り込む

すみません、1日遅れのMaplat Advent Calendar 19日目投稿です。
今日は、昨日マッピングした地図をMaplat Coreに取り込んでみます。
久々にCodeSandboxの登場です。動くものはこちらです。=> [CodeSandBox Maplat Advent Calendar day 19](https://codesandbox.io/s/maplat-advent-calendar-day-19-81mp4)

今日の作業に移る前に、もう一度だけMaplatEditorを立ち上げましょう。
その上で、地図編集画面に移り、「メタデータ」タブの下の方、「地図タイルURL」の設定に、`https://t.tilemap.jp/maplat/tiles/tomowarkar_map/{x}/{y}/{z}.png`というURLを入力してください。
そして、セーブします。
これで追加作業は終了です。
<img width="799" alt="スクリーンショット 2019-12-20 7.54.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10108/9502b1e2-aabc-f36e-653e-e1dc304a6d36.png">
これは何をやったかというと、この地図設定で使う地図の画像ファイルを上記URLから取得する、という定義を行っています。
Maplatは外部URLからでなくても、サイトのローカルからでも地図の画像ファイルを取得できるので、今回は地図の画像ファイルをCodeSandboxにアップロードして動作させるつもりでいたのですが、CodeSandboxの方が、このローカルから画像を読み込ませる方式だと必須である「`0`」という名前のフォルダを作ることができなかったので、急遽外部URLの指定にした形です。

さて、それではマッピングした地図を動作させてみます。
MaplatEditorのデータ保存領域である、`[OSのドキュメントフォルダ]/MaplatEditor`のフォルダを開いてみましょう。
<img width="563" alt="スクリーンショット 2019-12-20 8.41.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10108/09463250-1d6b-ff44-56e0-cdfe56c5805e.png">
`maps`、`compiled`、`originals`、`tiles`の4つのフォルダがあり、それぞれの下に設定ファイルや画像フォルダができています。

このうち、今回使うのは`compiled/tomowarkar_map.json`の設定ファイルです[^1]。
これを、CodeSandbox側の`maps/tomowarkar_map.json`としてアップロードします。
あ、そうそう、今日のソースコードのベースは[5日目のもの](https://codesandbox.io/s/maplat-advent-calendar-day5-u2lio)を使います。
<img width="263" alt="スクリーンショット 2019-12-20 8.47.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10108/f0cd5d34-04d9-9ed1-d51e-05968cf47e02.png">
上記のようにアップロードします。

その上で、設定ファイルやJavascriptファイルを次のように修正します。

```maplat_ac_day19.json
{
  "home_position": [135.0, 35.0],
  "default_zoom": 10,
  "start_from": "tomowarkar_map",
  "sources": [
    {
      "mapID": "tomowarkar_map"
    },
    "osm"
  ]
}
```
これは、地図のデータソースをこれまでの既製の地図設定ファイルから、MaplatEditorで作成した地図設定を読むように変更しているだけですね。
これまでは設定されていた`setting_file`という設定がなくなっていますが、これは地図の設定ファイルをローカルから読み込んでいるためです。
`setting_file`設定がないと、Maplat Coreは地図設定を`./maps/[地図ID],json`から読み込もうとします。

```index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Maplat Advent Calendar Day19</title>
    <link rel="stylesheet" href="app.css" />
  </head>
  <body>
    <div class="mainview">
      <div id="map_div"></div>
    </div>
    <div class="button">
      <button id="osm">OSM</button>
      <button id="tom">マップ</button>
    </div>
  </body>
  <script src="app.js"></script>
</html>
```

```app.js
import "@maplat/core/dist/maplat_core.css";
import { MaplatApp } from "@maplat/core";

var option = {
  appid: "maplat_ac_day19"
};

var app = new MaplatApp(option);
app.waitReady.then(function() {
  document.getElementById("osm").addEventListener("click", function(e) {
    app.changeMap("osm");
  });
  document.getElementById("tom").addEventListener("click", function(e) {
    app.changeMap("tomowarkar_map");
  });
});
```

以上の設定を行ってアプリを起動させると、以下のような感じになります。
![動作確認](https://t.tilemap.jp/maplat/funny_map_moving.gif)
ちゃんと、でたらめな地図なのに、当初設定した日本、南米、ハワイなどの設定した場所と連動して動いているのがわかります。
このように、でたらめな地図に対してでも対応づけした場所と連動して動くように設定することができるので、歪んだ古地図や絵地図でも、対応した現代地図と連動して動くようにできるライブラリがMaplat、ということになります。

余談ですが、今回CodeSandboxの仕様上の問題で、地図画像を外部から読み込むようにしましたが、もしローカルから地図画像を読み込ませたい場合、`[OSのドキュメントフォルダ]/MaplatEditor/tiles/tomowarkar_map`のフォルダを、Webサイトの`tiles/tomowarkar_map`フォルダとしてアップロードすれば、動作します。
ただしその際は、地図データの設定で、`地図タイルURL`の設定を空にしておかないといけません。

さて、明日20日目（というか実際には今日ですが）の話題は何にしよう...いよいよ、UI付きのMaplat、Maplat UIを説明するしかないかな...？

[^1]: `maps/tomowarkar_map.json`のファイルでも動作するのですが、これはMaplatの起動時に地図設定の解釈プロセスが走るので、起動が若干遅くなります。