このデモは開発中の版(0.9.0)の内容です。npm で配っているのは 0.8.0 なので、ここで見た機能が、入れてもまだ使えないことがあります。

本文へ飛ぶ
MMJ

OSS · MIT · OpenStreetMap (ODbL)

ここの地図を、
手元に。

地球ぜんぶは要りません。必要な範囲だけ切り出せば、 写真 1 枚より小さくなります——舞浜一帯で 1.9 MB。 手元にあるので、つながらなくても出ます。 API キーも、従量課金も、地図サーバーもありません。

使い方を見る 動く画面を見る

この地図の全ソース
<mmj-map tiles="./tiles/demo.pmtiles"
         style-url="./styles/modern-dark.json"
         center="135.5023,34.6937" zoom="12"></mmj-map>

JavaScript は 1 行も書いていません。地図の操作は指 2 本 / Ctrl+ホイールです (この頁は読み物なので、指 1 本ではページが送れるようにしてあります)。

API キー
0
地図サーバー
0 台
舞浜一帯の地図
1.9 MB
会場ひとそろい
3.6 MB
手書きスタイル
6 枚

MMJ とは

MMJ は、API キーも地図サーバーも使わずに、自分のサイトに地図を置くためのオープンソースの部品です。 必要な範囲だけを切り出した地図のファイル(PMTiles)と手書きの配色を、静的な置き場に並べ、 HTML に <mmj-map> を書くだけで地図が出ます。 地図のデータは OpenStreetMap、描くのは MapLibre で、コードと配色は MIT ライセンスです。

できること

どれも実際に動いている画面です。押すと開きます。

なぜ

ウェブに出せる地図は、たいてい他人の地図を、他人の見た目で、他人のメーターで 使うことになります。商用 API は鍵と従量課金が要り、OSM の公式タイルサーバーは 利用方針で商用と大量アクセスを認めていません。 自前でタイルサーバーを立てれば動きますが、今度はタイルサーバーの運用が仕事に加わります。

MMJ は、データは借りて、表現だけを持ちます。

配る単位

地図というと「日本の地図」「世界の地図」を思い浮かべますが、 ほとんどの用途で必要なのは「ここ」だけです。 そして範囲を絞ると、大きさが桁で変わります。

範囲大きさ切り出し
舞浜一帯(会場ひとつ)1.9 MB31 リクエスト・9.5 秒
ハノイ中心部10.9 MB45 リクエスト・12.5 秒
大阪(広域 + 市街)62.8 MB—
日本全土2.6 GB—

惑星は端末に置けません。会場は置けます。

「世界中のタイルは持てない」は MMJ の制約でしたが、範囲を絞る用途では前提になります。 会場・駅・学校がそれぞれ自分の範囲だけを持てば、アクセスが 1 か所に集まりません。 混雑した場所で地図が出ないのは、たいてい全員が同じ配信元を見ているからです。

会場の地図は、通信を切っても出ます。 一度開けば、地図・ラベルの字・描く道具(合計 3.6 MB)が端末に残るためです。 これは会場ほどの範囲だからできることで、日本全土では同じことはできません。

現在地は衛星から測るので、通信が無くても出ます (locate を付けたときだけ。付けない限り位置情報は要求しません)。 ただし通信が無いと初回の測位に数十秒かかることがあります。

使い方

要るものは 3 つだけです。そのうち 2 つは MMJ が配っています。

  1. 部品を入れる

    pnpm add @mmj-map/elements

    素の ES モジュールで、ビルド工程はありません。コピーでも動きます。

  2. スタイルを選ぶ

    6 枚から 1 枚をページの隣へ置きます。 サイトのテーマカラーを 1 色渡すだけでも変わります。

  3. タイルを用意する

    pnpm tiles:extract -- demo

    ここだけは自分で置きます。配信されたタイルはありません。 上流 138 GB のうち必要な範囲だけを HTTP Range で取るので、 1 地域あたり数十秒・数十 MB です。

手順の詳細は 導入手順 に、 English / 日本語 / 繁體中文 / 简体中文 / Tiếng Việt で置いてあります。

Google マップから始めるなら、Chrome 拡張があります。 開いている場所で押すと、同じ中心と縮尺の地図を、そのまま貼れる HTML にします。 会社名・住所を入れればピンも立ち、AI に渡す形でも写せます。 読むのはタブの URL だけです。 Chrome ウェブストアで入れる

npm で部品を入れる Chrome 拡張を入れる

これまでの版と変わったことは npm の版の一覧と 変更の記録にあります。

ロードマップ

どこまでできていて、次に何をするか。続けるのをやめる条件も先に書いておきます。

次のどれかが起きたら、続ける前に企画を見直します。

作らないものは下の節にまとめてあります。

よくある質問

作らないもの