Skip to main content
ドットマップとは?定義、事例、作り方
Guides

ドットマップとは?定義、事例、作り方

ドットマップは1ドットが一定数を表す点を地域内に配置する地図です。仕組み、ドット値の決め方、Web地図での作り方を解説します。

Brent van der Heiden15 min read
#ドットマップ#点密度図#主題図#コロプレス図#データ可視化#maplibre

ドットマップは、どれだけあるかと、地域のどこにあるかを同時に示します。100人につき1点を国全体に散らせば、境界線を1本も引かずに都市が浮かび上がります。

この記事では、ドットマップとは何か、ドット値の決め方、地図が誠実かどうかを左右する配置の問題、そしてWeb地図での作り方を解説します。

ドットマップとは

ドットマップ(点密度図、dot distribution map)は、決まった単位数ごとに1点を、その単位が属する地域の中に配置して量を示す地図です。

定義するのは3つの要素です。

  • ドット値。 1点が何単位を表すか。1点=住民100人、ブドウ畑50ヘクタール、配送10件など。
  • ドットサイズ。 各点をピクセルやミリ単位でどの大きさで描くか。
  • 配置ルール。 地域内のどこに点を置くか。

読み手は個々の点を数えません。読むのは質感です。量が集中していれば黒く詰まり、薄ければまばらな斑点になります。これがこの形式の強みであり、紙の時代の製図者が手作業で点を打っていた頃から一世紀を経ても残っている理由です。

一対一のドットマップは特別なケースで、各点が実際の座標を持つ1件の観測値になります。風力タービン1基ごと、薬局1軒ごと、記録された発生1件ごとです。これらは純粋な点地図であり、集計型と違って位置を信頼できます。

ドットマップ、コロプレス図、ヒートマップの比較

3つの形式に、3つの役割があります。

コロプレス図は各地域を1色で塗ります。最も速く読め、最も作りやすく、そして地域内部が一様であるかのように見せます。農村部の郡を塗ったコロプレス図は人口が郡全体に均等に散らばっているかのように語りますが、実際はほとんどが1つの町に住んでいます。

ドットマップは実数を保ったまま内部の広がりを示します。広くて人のいない地域は視覚的にも空いたままなので、コロプレス図を悩ませる面積バイアスが解消されます。代わりに失うのは精度で、目で見て地域の正確な値を取り出すことはできません。

ヒートマップは点を連続した面に平滑化します。集中箇所の発見は得意で、数量は隠します。ある色が何を意味するのかを、地図の上の何も宣言しないからです。

実務上の指針は、比率はコロプレス図、実数は点、集中箇所探しはヒートマップです。面積バイアスが主な問題で内部の細部が重要でないときは、カルトグラムがもう一つの解決策になります。

ドットマップの事例

この形式が力を発揮する場面です。

  • 国勢調査区ごとの人口。 最もよく知られた用途で、点の色で人口を分類すると、境界線を一切見せずに居住の分かれ方が現れます。
  • 農業生産。 牛1,000頭につき1点、作付面積100ヘクタールにつき1点といった、国勢地図帳の定番の使い方です。
  • 郵便番号ごとの顧客や注文。プライバシーのために集計してあるため、どの点も特定の世帯には対応しません。
  • 住宅ストックの種類別。集合住宅を1色、戸建てを別の色にします。
  • 小売や競合の展開状況。集中の仕方そのものが示唆になります。
  • 疾病の症例数。人口あたりのリスクではなく集中の度合いを示したいときに使います。

複数カテゴリ版は、コロプレス図には本当にできないことです。1つのポリゴンを2色で塗ることはできませんが、2色の点なら1つの地域を共有し、その混ざり具合を示せます。

配置の問題

ドットマップの多くはここでつまずきます。

点は通常、地域ポリゴンの内部にランダムに散らされます。地域についての記述としては問題ありませんが、その中の特定地点についての記述としては誤解を招きます。ランダムな散布は、湖の上にも、工業団地にも、飛行場にも、誰も住まない山腹にも点を置いてしまうからです。

ダジメトリック配置がその解決策です。ポリゴン全体ではなく、対象が実際に存在しうる部分だけに点を限定します。使うマスクは住宅用途の土地利用、建物フットプリント、土地被覆レイヤーなどです。地域ごとの合計は変わらず、点はもっともらしい場所に落ちます。人口の作業ではオープンな地図データの建物フットプリントが定番のマスクで、国スケールの地図なら粗い土地被覆マスクで十分です。

もう1つのルールが、再訪時の信頼を守ります。乱数にシードを与えることです。シードなしの地図は読み込むたびに描画が変わり、それに気づいた読み手は信用しなくなります。点は一度生成して保存し、毎回同じものを配信してください。

ドット値の決め方

ドット値は地図が読めるかどうかを左右します。失敗は2通りです。

ドット値が小さすぎると点が多すぎて、密な場所が真っ黒に飽和します。インクが埋まってしまえば、それ以上データが増えても何も変わらず、地図はピークを過小評価します。

ドット値が大きすぎると、薄い地域の点が0個か1個になり、薄い地域どうしの実際の差が消えてしまいます。

まずは既定のズームで地図全体がおよそ2,000ドットになる値を目安に、描画して調整します。目標は、最も密なかたまりが塗りつぶしではなく質感として見えること、そして意味のあるデータを持つ最も薄い地域にも点がいくつか残ることです。

ドット値は読まれるズームレベルに依存し、そこがWeb地図に載せるときの厄介な点です。全国表示に合わせたドット値は、都市ズームでは飽和します。よくある答えは2つ。地図を1つのズームに固定してそこに合わせるか、ズーム範囲ごとに別のドットセットを生成して差し替えるかです。いずれの場合も、宣言したドット値を凡例に常に表示してください。

ドットマップの作り方

手順は4段階です。

  1. 安定したIDを持つ地域ポリゴンを用意する。
  2. 地域ごとの実数をそのIDに紐づける。
  3. 点を生成する。地域ごとに count / dotValue 個の点を、ポリゴン内、できればマスク内に配置します。
  4. 点を描画する。円レイヤーとして表示します。

点の生成はTurfで行えます。

import randomPoint from '@turf/random';
import booleanPointInPolygon from '@turf/boolean-point-in-polygon';
import bbox from '@turf/bbox';

const DOT_VALUE = 100;

function dotsForRegion(feature, count) {
  const target = Math.round(count / DOT_VALUE);
  const box = bbox(feature);
  const dots = [];

  // Rejection sampling: draw inside the bounding box, keep what lands in the polygon
  while (dots.length < target) {
    const batch = randomPoint(target, { bbox: box }).features;
    for (const point of batch) {
      if (dots.length >= target) break;
      if (booleanPointInPolygon(point, feature)) {
        point.properties = { id: feature.properties.id, category: feature.properties.category };
        dots.push(point);
      }
    }
  }
  return dots;
}

map.addLayer({
  id: 'dots',
  type: 'circle',
  source: 'dot-density',
  paint: {
    'circle-radius': ['interpolate', ['linear'], ['zoom'], 4, 1.2, 10, 2.6],
    'circle-color': ['match', ['get', 'category'], 'residential', '#12813D', 'commercial', '#B7A21F', '#406FBD'],
    'circle-opacity': 0.75,
  },
});

このコードについて2点補足します。棄却サンプリングは細長いポリゴンで遅くなります。外接矩形の大半が外れるからです。数十万点を超えたら、ポリゴンを三角形分割して面積に比例させてサンプリングする方が速くなります。もう1点、半径をズームに応じてわずかに変えているので、拡大縮小しても質感が安定します。

もう1つの制約は性能です。MapLibreの円レイヤーは数万点までなら余裕で扱えます。それを超えるならサーバー側で点を生成してベクタータイルに焼き込み、タイルパイプラインにカリングを任せてください。deck.glのScatterplotLayerも選択肢で、こちらはGPU上で数百万点を扱えます。

注意すべき落とし穴

実際にはない精度を示唆してしまう。 点をランダムに配置しているなら、キャプションにそう書いてください。書かなければ、読み手は個々の点を調べようとします。

ドット値の記載漏れ。 凡例には、スケールバーと同じ目立ち方で「1点が何を表すか」を明記する必要があります。それがなければ、地図はパターンだけを示して数量を示しません。凡例のガイドでレイアウトの考え方を扱っています。

高ズームでの過密描画。 全国ズームで重なっていた点が街路ズームでは分離し、もともと実在の住所ではなかったことが露わになります。最大ズームを制限するか、レイヤーを切り替えてください。

カテゴリの入れすぎ。 点の色は3、4色が限界で、それを超えると混ざって濁ります。それ以上は小さな地図を並べる形に分割してください。

比率を描いてしまう。 点は物を数えるものです。パーセンテージのドットマップに正しい読み方はありません。

MapAtlasでできること

ドットマップの質は、下にあるジオメトリで決まります。Dynamic Maps APIは国、地域、郵便番号の境界を安定したIDのベクタータイルとして配信するので、地域ごとの点の生成はデータ整備ではなく単純な結合になります。EU内でホストされバージョンが記録された境界なので、翌四半期に作り直した地図も、公開したものと一致します。

ダジメトリック配置には、GeoEnrichの背後にあるPOI・場所データが使えます。建物や土地利用の文脈から点を水面や飛行場の外に保ち、同じIDで紐づく地域別の集計値が点の数を決めます。比率データであればコロプレス図のガイドを、主題図全体を見渡すなら地図の種類のガイドから始めてください。

よくある質問

ドットマップ(点密度図)とは何ですか?

ドットマップは、地域の中に点を配置して量を示す主題図です。1つの点が決まった単位数を表し、1ドットが100人、農場10か所、顧客1件といった具合に対応します。読み手は点の密集具合から値を判断するため、地図は「どれだけあるか」と「地域のどこにあるか」を同時に示します。

ドットマップとコロプレス図の違いは何ですか?

コロプレス図は各地域を1つの値に対応する1色で塗るため、地域全体が均質に見えます。ドットマップは地域の中に点を散らすので内部のばらつきが見え、広くて人のいない地域が重要そうに見える問題も避けられます。比率を扱い、素早く読ませたいときはコロプレス図が向きます。実数を扱い、集中の様子を見せたいとき、複数のカテゴリを同じ地図で比べたいときはドットマップが向きます。

ドットマップとヒートマップの違いは何ですか?

ドットマップは宣言したドット値で離散的な点を描くため、読み手は数えられ、元の数値も復元できます。ヒートマップは点データを連続した色の面に平滑化し、固定の単位を持ちません。ひと目で見るには読みやすい一方、件数は隠れます。数量が重要なら点を、集中箇所を探すだけならヒートマップを使ってください。

ドット値はどう決めますか?

最も密な場所が密に見えつつ数えられる程度で、最も薄い場所も見える値を選びます。実際に読まれるズームレベルで試すのが定石です。まず合計を約2,000ドットで割った値から始め、描画してから調整します。ドット値が小さすぎると都市が真っ黒に潰れ、大きすぎると地方が空白に見えてしまいます。

ドットマップの点は正しい位置にありますか?

1点が1件の実測値を表す一対一のドットマップだけが正しい位置です。通常の集計型では点は地域内にランダムに配置されるため、個々の点は特定の住所を指しません。配置は「ダジメトリック法」で改善できます。これは対象が実際に存在しうる範囲、たとえば湖や空港ではなく住宅地に点を限定する方法です。

ドットマップはいつ使うべきですか?

データが比率ではなく実数のとき、地域の面積差が大きいとき、地域内部の集中が話の一部であるとき、色を変えた点で複数カテゴリを同時に示したいときに使います。地域ごとの正確な値を読ませたいとき、ダッシュボードで一瞬しか見られないとき、地域が小さすぎて数点では傾向が出ないときは避けてください。

役に立ちましたか?シェアしてください。

著者について

Brent van der Heiden

著者

Brent van der Heiden

Co-Founder & CEO at MapAtlas

Brent built MapAtlas out of a conviction that developers deserve location APIs with fair pricing and genuine end-user privacy. He writes about geospatial infrastructure, AI search visibility, and how location data powers the products people rely on every day.

すべての記事を見る
ブログに戻る