2022-12-23

Craft CMS の Maps プラグインで位置情報をデータとしてもつ

これは Craft CMS Advent Calendar 2022 23日目の記事です。


Craft CMS でエントリのデータとして地図情報を持たせたい場合があるとする。

Google Map の Embed Code を貼るので解決するのであればいいのかもしれないが、、、
緯度経度とか住所情報とかを持たせておくために、管理画面で検索して値を保持する時には Maps プラグインを使うと後々便利になるかもしれない。

Maps
https://plugins.craftcms.com/s...

無料の Lite Edition。有償の Pro Edition がある。

Editions - Maps
https://plugins.craftcms.com/s...

違いはいくつかあるが、今回はひとまず管理画面でデータを持つ想定ということで、 Lite Edition で試してみる。

プラグインのインストールとフィールド設定

プラグインをインストールして、 Map フィールドを作成する。

20221223 153926

プラグインの設定で、 OpenStreetMap とか選べる。

20221223 140712

Google Map の場合はAPIキーが必要なのだが、ここで入力してもうまいこと保存されないのか、挙動がよくわからず。
Google Map を使う場合は後述。

エントリで名前から検索

マリーナベイサンズを検索してみる

20221223 142829

とりあえずざっと情報は入ってきている様子。

この内容をいくつか取り出してみる。

Usage - Maps
https://docs.ethercreative.co....
<h1 class="text-4xl text-black font-display my-4">エントリタイトル:{{entry.title}}</h1>
<div>
<p>address : {{ entry.map.address }}</p>
<p>lat : {{ entry.map.lat }}</p>
<p>lng : {{ entry.map.lng }}</p>
<p>streetAddress : {{ entry.map.streetAddress }}</p>
<p>zoom : {{ entry.map.zoom }}</p>
<p>parts.country : {{ entry.map.parts.country }}</p>
<p>parts.state : {{ entry.map.parts.state }}</p>
<p>parts.county : {{ entry.map.parts.county }}</p>
<p>parts.city : {{ entry.map.parts.city }}</p>
<p>parts.postcode : {{ entry.map.parts.postcode }}</p>
</div>
20221223 154443

必要そうな物はとれてそうな気がする。
地図上のアイコンをD&Dすると位置を変更したりできる。

日本の場合どうだろう?ということで、東京タワーを検索してみる。

20221223 143155

日本も特に問題なさそう。
日本語になるのはどこかで判定してるのかどうなのか。

同様に内容を出力してみる。

20221223 143300

都道府県的な情報がはいっていなさそう。
確かに一つ前の画像で、都道府県的な値がない。

State の所に手動で値を入れれば使えるとは思うが、若干手間ではある。。

Google Map を利用する例

Google Map を使ってみる。
ドキュメントにあるように、Google Map のAPIキーが必要になる。

Google Maps Platform - Location and Mapping Solutions
https://mapsplatform.google.co...

なので、「Maps JavaScript API」「Places API」を有効にして、APIキーを取得しておく。
プラグイン設定でAPIキーを入れるっぽい所に入れても保存されてなさそうなので、設定ファイルを用意する。

config/simplemap.php を用意して、以下のようなかんじで記載する

<?php
use ether\simplemap\enums\MapTiles;
return [
    'mapTiles' => MapTiles::GoogleRoadmap,
    'mapToken' => 'YOUR API KEY',
];
?>

これで管理画面で Google Map を使って位置情報等がとれるようになる。

スカイツリーを検索してみた。

20221223 152631

問題なさそう。
State の所に都道府県が入ってきている。

20221223 152949

ただ、表記が英語になっている。。。
これは何を見て判定しているんだろうか。これは後で調べてみよう。

State のフィールドとかは検索したときにデータとして持つようで、例えば OpenStreetMap で検索した状態で持っているデータがあるときに、その後地図を Google Map に切り替えても State に値が入る訳ではない。

そうそう変えるものでは無いと思うが意識しておいた方がよさそう。


地図系のサービスとかも色々あるんだなぁ

  • HERE | グローバルな位置情報・地図データサービス
    https://www.here.com/jp
  • 高速・軽量・安価で、カスタマイズ性が高い、オリジナル地図が作れるサービス「Geolonia Maps」 - 株式会社 Geolonia (ジオロニア)
    https://geolonia.com/maps/