a-blog cmsにおけるマーカークラスターの作成(Mapbox)
*本記事は「a-blog cmsのカスタムフィールドとしてMapboxを使用する方法(IE11対応)」から続く内容となります。マーカークラスターの作成の際には先にそちらの記事をご参照ください。
マーカークラスターとは
マーカークラスター は、視覚的にマーカーを統合するのに便利なツールで、マップ上の近接するマーカーを組み合わせてクラスタ化することで、見る人がマップ全体を理解しやすくするものです。作業をすすめることで、「マップカテゴリ一の一覧画面」で以下のようなマーカークラスターを作成できるようになります。本実装では、マップカテゴリーのエントリーを作成する際に登録した、Mapboxカスタムフィールドのマーカーがクラスタ化されます。
モジュールIDの作成
管理画面でモジュールIDの作成を行います。
モジュールは「Entry_Summary」とし、モジュールIDは「mapbox_cluster」としてください。次に、引数のカテゴリーID(cid)にチェックをいれて保存します。
モジュールID作成後は、モジュール設定画面で表示件数の変更を行ってください。この表示件数によってマップカテゴリーの一覧画面で表示されるマーカーの数が変わります。
htmlの追加
/themes/利用中のテーマ/にmapディレクトリを追加し、index.htmlを追加します。
index.html
<!DOCTYPE html> <html class="no-js" lang="ja"> <head> @include("/include/head/meta.html") @include("/include/head/link.html") @include("/include/head/js.html") </head> <body> <!-- ヘッダー --> @include("/include/header.html") <!-- ページタイトル --> @include("/include/header/page-title.html") <!-- トピックパス --> @include("/include/header/topicpath.html") <div class="acms-container js-pretty-scroll-container"> <!-- ※管理用パーツ --> @include("/admin/action.html") <div class="acms-grid"> <main class="acms-col-lg-9 main"> <div class="main-inner is-space-right"> <!-- タグフィルター --> @include("/include/tag/filter.html") <!-- Mapboxクラスター --> @include("/include/entry/cluster.html") <!-- エントリーサマリー(画像メイン表示) --> @include("/include/entry/summary-image.html") <!-- 確認用テンプレート --> @include("/include/check-seo.html") </div> </main> <div class="acms-col-lg-3 side"> <div class="js-pretty-scroll"> <!-- エントリーリスト --> @include("/include/entry/list.html") <!-- カテゴリーリスト --> @include("/include/category/list.html") <!-- 検索フォーム --> @include("/include/parts/search.html") <!-- ピックアップリスト --> @include("/include/entry/summary-pickup.html") <!-- バナー --> @include("/include/siteparts/banner.html") <!-- リンクリスト --> @include("/include/siteparts/link-list.html") <div class="acms-hide-pc"> <!-- モバイル:ナビゲーションメニュー --> @include("/include/parts/mobile-nav.html") <!-- SNSアカウントへのリンク --> @include("/include/footer/sns-link.html") </div> </div> </div> </div> </div> <!-- お問い合わせ --> @include("/include/footer/suggest.html") <!-- フッター --> @include("/include/footer.html") </body> </html>
次に、/themes/利用中のテーマ/include/entry/にcluster.htmlを追加します。
cluster.html
<!-- BEGIN_MODULE Entry_Summary id="mapbox_cluster" --> <!-- Maboxライブラリ読み込み --> <script src='https://api.mapbox.com/mapbox-gl-js/v1.12.0/mapbox-gl.js'></script> <link href='https://api.mapbox.com/mapbox-gl-js/v1.12.0/mapbox-gl.css' rel='stylesheet' /> <script src="/js/mapboxcluster.js"></script> <!-- BEGIN unit:loop --> <!-- BEGIN entry:loop --> <!-- マップカテゴリのエントリーにおけるmapboxの値を取得するためのdivタグ --> <div class="owndata" data-title="{title}" data-url="{url}" data-lng="{fmapbox-lng}" data-lat="{fmapbox-lat}"> </div> <!-- END entry:loop --> <!-- END unit:loop --> <!-- BEGIN_MODULE Blog_Field --> <!-- 地図作成のためのアクセストークンとスタイルURL --> <div id="accesstoken_styleurl" data-accesstoken="{mapbox_accesstoken}" data-styleurl="{mapbox_styleurl}"></div> <!-- END_MODULE Blog_Field --> <div id='mapwrapper' style="width: 820px; height: 320px; max-width: 100% ;"> <div id='fmap' style='width: 100%; height: 100%; max-width: 100%;' data-lat="{fmapbox-lat}" data-lng="{fmapbox-lng}" data-zoom="{fmapbox-zoom}" data-styleurl="{fmapbox_styleurl}" data-comment='{fmapbox-comment}' data-mapsize="{fmapbox-mapsize}" data-maptype="show"> </div> </div> <!-- END_MODULE Entry_Summary -->
jsの追加
/themes/利用中のテーマ/js/ にmapboxcluster.jsを作成し、
以下のリンクのコードを貼り付けてください。
これで、カスタムフィールドで設定したMapboxの地図がエントリー一覧画面でマーカークラスターとして表示されます。
Mapboxを安全に使用する方法
本実装ではMapboxのアクセストークンが開発者ツールを通じて見られるようになっています。本番環境での使用の際には以下のリンクの内容に従い、URL制限の有効化を行ってください。URL制限を追加したトークンは指定URLから発信されたリクエストのみ処理をするため、Webアプリのアクセス・トークンをよりセキュアにする事が可能です。
https://docs.mapbox.com/jp/help/troubleshooting/how-to-use-mapbox-securely/