Maplatを使ってみたよ！

# Maplatとは？
　現代の地図と古地図を重ねて表示の出来るライブラリです。

https://github.com/code4history/Maplat/wiki

　私の知恵では技術的なご説明はカケラも分からず、真のすごさを十分には分かってないものと思われますが、とにかくこれは良い物です。遊べそう！

　Qiitaに、[作者さま](https://qiita.com/kochizufan)による使い方説明記事があったので、それを見ながらやってみます！！
（記事は2019年のアドベントカレンダーで書かれており、現在は状況が異なる部分もあったので、私自身の記録も兼ねて、そうゆうことも補記していきます）

# とりあえず地図作る
　記事とは順番が違いますけど、とりあえず表示する地図がなきゃ始まりませんからね。
　やっぱ、こうゆうのは、自前の地図でやるのが楽しいよね！
　現代の地図との対応点をマウスで編集出来て、タイルにして保存してくれるエディタが用意されています。素晴らしい☆
　折角なので、最新版をダウンロードしてきます。現在の[パッケージ版の最新は0.4.1](https://github.com/code4history/MaplatEditor/wiki)でした。
　MaplatEditor関連の記事は三部作になっていましたが、使用に難しいところはありませんでした。

> [MaplatEditorで不正確な古地図をマッピングする（１）インストール](https://qiita.com/kochizufan/items/2aaf43e0b09708f92a9d)
> [MaplatEditorで不正確な古地図をマッピングする（２）画像登録](https://qiita.com/kochizufan/items/a1bea03b6f4304af1b77)
> [MaplatEditorで不正確な古地図をマッピングする（３）マッピング作業](https://qiita.com/kochizufan/items/afffdfcdc9dcaa21e38f)

　というわけで、超簡単なやつをマッピングしてみます！
　古地図側がかなり正確で、ふつーに重ねても重なるので、Maplatのしゅごさが全く伝わらないかもしれずスミマセンが、なんかこんな感じ？
![Maplatスクショ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/561177/70a0d0f3-eb19-bb52-eedb-a9a358c9f0fa.jpeg)


# とりあえず重ねる
## とりあえずcore
　ではでは、ここでようやく最初に戻って、ここのとうりにやっていきますです。

> [Maplat Core（UIなし版）をCDNから設定](https://qiita.com/kochizufan/items/c10e7b7468288d4660b5)

　ふんふん。HTMLもCSSも、じゃばすくりぷとすら簡単ですね＾＾

## マッピングした地図を使う
> [MaplatEditorでマッピングした地図をMaplat Coreに取り込む](https://qiita.com/kochizufan/items/763396cfc45c476e60b2)

- まず、MaplatEditorで作成された`compiled`フォルダの中身のJSONさんをindex.html直下の`maps`フォルダに入れる。（ややこしいけど、`maps`の中身でも動くけど`compiled`のやつのほうが早いんだそうです）
- ローカルでやるなら、`tiles`フォルダをそのままindex.htmlと同じ所へコピーするだけでいいっぽい。

## 画像パーツの罠
　・・・と、楽勝な感じでしたが・・・最後の`parts`です。
　おそらく当時と現在とでは、フォルダ構成が変わったっぽく、ダウンロードしてきた`distribution.zip`の中に`parts`とゆうフォルダはなく、代わりにあった`images`の中のファイル名も違っており、フォルダ名をリネームしただけでは出来ませんでした。
　捜索の結果、当時の0.6.2をダウンロードしてきて、記事の通りで出来ました！
　・・・が、いやいや、むしろ取り込むスクリプトの方を新しくしろって話ですよねｗ

## 折角なので最新版を使う
　リリースとなっているMaplat Coreの最新が0.8.4なので、そこだけ変えて、こんな感じ？

```html
<script src="https://unpkg.com/@maplat/core@0.8.4/dist/maplat_core.js"></script>
```

　これで、`images`をindex.htmlと同じトコに置けば良くなりました。
　でも、本当の最新は、0.9.0なんだよねー。でもでも、普通にバージョンの部分だけ変えても動かないよ・・・と思っていたら、こうでした。

```html
<script src="https://unpkg.com/@maplat/core@0.9.0/dist/assets/maplat_core.js"></script>
```

　「assets」というフォルダが追加されています。
　これにより、パーツ画像置き場は、index.htmlと同じ所に`assets`を置き、その中に`images`を入れる、ということになっていました。

## できました！

　というわけで、最新版を取り込むHTML。
　maplat_core.cssの方のURLも変えるのを忘れず。

```html:index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Maplat coreのテスト</title>
    <link
      rel="stylesheet"
      href="https://unpkg.com/@maplat/core@0.9.0/dist/assets/maplat_core.css"
    />
    <link rel="stylesheet" href="app.css" />
  </head>
  <body>
    <div class="mainview">
      <div id="map_div"></div>
    </div>
  </body>
  <script src="https://unpkg.com/@maplat/core@0.9.0/dist/assets/maplat_core.js"></script>
  <script src="app.js"></script>
</html>
```
　「app.css」の中身は変わらず。無ければ無いで普通に全画面表示になります。
　そして、設定のJSONさんは外出しにしたので、Javascriptは超短くなってよきー♪

> [Maplat Coreの設定を設定ファイルから行う](https://qiita.com/kochizufan/items/763d4f4f060edf300319)

```json:apps/Maplat_test_core.json
{
  "home_position": [140.75680304835672, 41.79692727057318],
  "default_zoom": 17,
  "start_from": "goryokaku",
  "sources": [
    {
      "mapID": "goryokaku",
      "label": "五稜郭三分十間図"
    },
    "osm"
  ]
}
```

```Javascript:app.js
var option = {
  appid: "Maplat_test_core",
};
Maplat.createObject(option).then(function(app) {
});
```

　フォルダ構成はこんな感じです。

```
test_core
 |  app.css
 |  app.js
 |  index.html
 +--apps
 |    Maplat_test_core.json
 \--assets
    +--images
    |    0beac2cb41dfab43ddfd9df80b32b85d.png
    |     (略)パーツ画像
 +--maps
 |   goryokaku.json
 \--tiles
    \--goryokaku
       +---0
      (略)地図のタイル画像
```

　サーバーにアップロードしないでお試しするにはlocalhostです。
　できました！


# APIを使う

> [Maplat CoreでAPIから地図表示を切り替える](https://qiita.com/kochizufan/items/b6e6b6a88ad27aa14371)

　まあ、地図はまだ一枚しか作っていませんが、古地図とOSMを切り替えることに関しては、記事のとうりですぐ出来ました☆
　が！
　前章で重ね合わせの表示、できました！　て思ったんですけれどね、どうしても、古地図が一番小さく縮小された状態からスタートしてしまうのでした。マウスで拡大出来るけど、ちょっと見栄えがよろしくない。

　設定ファイルの`default_zoom`の価は、`start_from`で現代の地図を指定した際には有効ですが、古地図を指定した際には無効となってしまうようで、一体どうしたら・・・？（＠＿＠）
　と、なにぶんJavascriptにもJSONさんにも明るくないので、恐る恐る質問させて頂いたところ、すぐに丁寧なご回答を頂き、今のところ設定項目はまだ無いけど、APIから制御できますとのことで、`setViewpoint`のAPIと、ついでに半透明の重ね合わせができる`setTransparency`のAPIを教えていただけたので、ここに書き残しておきます。

```Javascript:app.jp
var option = {
  appid: "Maplat_test_core",
};

Maplat.createObject(option).then(function(app) {
  const viewpoint = {
    zoom: 3  //古地図倍率
  }
  const ratio = 20;  //透明度(うっすらベース地図が透けるくらい)

  window.setTimeout(function(){
    app.setViewpoint(viewpoint);
    app.setTransparency(ratio);
  }, 1);

//ボタンで地図を切り替え
  document.getElementById("osm").addEventListener("click", function(e) {
    app.changeMap("osm");
  });
  document.getElementById("kochizu").addEventListener("click", function(e) {
    app.changeMap("goryokaku");
  });
});
```

　注意点としては、ボタンのイベントのような場合はいいんですが、マップを開いた時に反映させたいやつは、`setTimeout`を噛ませないと、うまく作動しないようでした。価は１とかで大丈夫☆　動作上は全く問題ありません。

### API
<dl>
  <dt>● setViewpoint(viewpoint)</dt>
  <dd>引数<B>viewpoint</B>はオブジェクト</dd>
  <dd><B>x, y:</B> 古地図の座標上でのx, y座標に移動します。左上が0,0原点の、元画像サイズでのピクセル座標です。</dd>
  <dd><B>longitude, latitude:</B> 地球上での経緯度(WGS84)です。</dd>
  <dd><B>zoom:</B> 古地図の座標上でのズームです。ズーム0は、古地図全体が256x256ピクセル以内に収まる大きさです。ズーム1はズーム0の縦横2倍（面積4倍）の大きさ、ズーム2はズーム0の縦横4倍（面積16倍）の大きさ...と倍々の大きさになっていって、元画像サイズになるズームサイズまで存在します。</dd>
  <dd><B>mercZoom:</B> メルカトル座標上でのズームです。世界全体が256x256ピクセルに収まるのをズーム0、ズームが2上がるごとに倍々になる、Googleマップのズームと同じです。</dd>
  <dd><B>rotation:</B> 古地図の正位置を角度0としての、回転量を指定します。</dd>
  <dd><B>direction:</B> 北が上になるのを角度0としての、回転量(方角)を指定します。</dd>
</dl>

<dl>
  <dt>● setTransparency(ratio)</dt>
  <dd>引数<B>ratio</B>は数値(0-100)</dd>
  <dd>・
価はベースの地図側の透明度
（100で古地図が不可視となり、ベース地図のみの表示となる）
  <dd>　色々お試しした結果、表示状態の地図を何％透過させて表示するかということでした。コレを設定した状態でベース側の地図を表示したら、単に薄く表示されます。</dd>
</dd>
</dl>

<dl>
  <dt>● changeMap(mapID)</dt>
  <dd>引数<B>mapID</B>は文字列</dd>
  <dd>・設定のsourcesのmapIDで指定したもの。</dd>
</dl>

# 動作確認

> https://snowdrops89.github.io/Maplat_test/test_core/index.html

　できました！　やったね！！

# つづきます
　今回は、とりあえずUIのないMaplatCoreでお試ししましたが、やっぱりかっこいいUIありを試したいよね☆
　地図も増やして、マーカー表示させたりして、色々遊ぼう♪
　そして・・・
　やっぱり、じゃばすくりぷとはツラいから、なでしこさんで使えるようにしたいなぁ。
　プログラムが出来れば、coreはcoreで、UIに縛られずに面白い使い方が出来るんじゃないかという気もしている。
　というわけで・・・プラグインを作ることにしよう、そうしよう。
　今回、なでしこのなの字もないのにタグ付けてましたが、そうゆうわけです。がんばる！