緯度経度とメッシュコードは「座標」と「区画ID」の違い

緯度経度は地球上の1点を連続値で指す座標系であり、メッシュコードは地図を格子状に区切った1区画を整数値で識別するコード体系である。両者の本質的な差異は「点 vs 面」にある。

比較項目緯度経度メッシュコード
表現対象地球上の1点地図上の1区画(面)
データ型浮動小数点(例: 35.6812, 139.7671)整数コード(例: 53394611)
精度小数桁数に依存(無段階)メッシュ次数に依存(段階的)
匿名性低い(個人宅を特定可能)高い(区画単位で集約)
集計・比較困難(連続値のため直接比較しにくい)容易(同一メッシュを同一グループとして集計)
標準規格WGS84、JGD2011などJIS X 0410

緯度経度は「その店舗はどこにあるか」というピンポイントの位置特定に使い、メッシュコードは「この1km四方の人口は何人か」というエリア集計に使う。目的に応じた使い分けが、GISデータ活用の出発点となる。

地域メッシュとは何か:JIS X 0410が定める区画体系

地域メッシュは、JIS X 0410(地域メッシュコード)で定められた、日本全域を緯線・経線に沿って格子状に区画する体系である。総務省統計局が国勢調査などの統計データをメッシュ単位で集計・公開しており、行政・ビジネスの双方で広く活用されている。

メッシュの最大の特徴は区画の形状と面積がほぼ均一な点にある。市区町村のような行政区画は境界が複雑で面積もばらつくが、メッシュは一定の緯度幅×経度幅で機械的に区切るため、異なる地域間の統計比較に適している。

1次〜6次メッシュの定義とサイズ比較表

メッシュは「次数」が上がるほど区画が細かくなる。各次数の定義を一覧にまとめる。

次数正式名称緯度幅経度幅1辺の概算コード桁数分割元
1次第1次地域区画40分1度約80km4桁
2次第2次地域区画5分7分30秒約10km6桁1次を8×8分割
3次基準地域メッシュ30秒45秒約1km8桁2次を10×10分割
4次2分の1地域メッシュ15秒22.5秒約500m9桁3次を2×2分割
5次4分の1地域メッシュ7.5秒11.25秒約250m10桁4次を2×2分割
6次8分の1地域メッシュ3.75秒5.625秒約125m11桁5次を2×2分割

3次メッシュ(基準地域メッシュ)が最も汎用的で、国勢調査やe-Statの統計データの多くはこの単位で提供されている。4次以降は人口密集地での詳細分析や、モバイル通信のエリア設計など細粒度が必要な場面で用いられる。

メッシュコードの構造:桁ごとの意味を分解する

メッシュコードは階層的に構成されており、上位桁を見れば大まかな位置、下位桁まで見れば詳細な位置がわかる。

例:東京駅付近のメッシュコード 5339-46-11(3次メッシュ)

5339  |  46  |  11
 ↓       ↓      ↓
1次    2次    3次
  • 上2桁 53:南端緯度を1.5倍した値 → 緯度 = 53 / 1.5 = 35度20分
  • 下2桁 39:西端経度から100を引いた値 → 経度 = 39 + 100 = 139度
  • 2次の上1桁 4:1次メッシュ内の南北方向の位置(0〜7)
  • 2次の下1桁 6:1次メッシュ内の東西方向の位置(0〜7)
  • 3次の上1桁 1:2次メッシュ内の南北方向の位置(0〜9)
  • 3次の下1桁 1:2次メッシュ内の東西方向の位置(0〜9)

4次メッシュ以降は2×2分割のため、各桁は1〜4の値を取り、南西=1、南東=2、北西=3、北東=4を表す。

緯度経度からメッシュコードへの変換計算

変換の計算式を段階的に示す。入力は10進法の緯度・経度とする。

1次メッシュコードの算出

p = 緯度 × 1.5 の整数部分
q = 経度 の整数部分 − 100

1次メッシュコード = p × 100 + q

2次メッシュコードの算出

1次メッシュの余り部分をさらに8分割する。

緯度の余り = 緯度 × 1.5 − p
経度の余り = 経度 − (q + 100)

r = (緯度の余り × 8) の整数部分   ← 南北位置(0〜7)
s = (経度の余り × 8) の整数部分   ← 東西位置(0〜7)

2次メッシュコード = r × 10 + s

3次メッシュコードの算出

2次メッシュの余り部分をさらに10分割する。

緯度の余り2 = 緯度の余り × 8 − r
経度の余り2 = 経度の余り × 8 − s

t = (緯度の余り2 × 10) の整数部分  ← 南北位置(0〜9)
u = (経度の余り2 × 10) の整数部分  ← 東西位置(0〜9)

3次メッシュコード = t × 10 + u

最終的なメッシュコードは {1次}{2次}{3次} を連結した8桁の整数となる。

Pythonによる相互変換の実装例

緯度経度 → メッシュコード

def latlon_to_meshcode(lat: float, lon: float, level: int = 3) -> str:
    """緯度経度から指定次数のメッシュコードを返す"""
    # 1次メッシュ
    p = int(lat * 1.5)
    q = int(lon) - 100
    code = f"{p:02d}{q:02d}"
    if level == 1:
        return code

    # 2次メッシュ
    lat_r = lat * 1.5 - p
    lon_r = lon - int(lon)
    r = int(lat_r * 8)
    s = int(lon_r * 8)
    code += f"{r}{s}"
    if level == 2:
        return code

    # 3次メッシュ
    lat_r2 = lat_r * 8 - r
    lon_r2 = lon_r * 8 - s
    t = int(lat_r2 * 10)
    u = int(lon_r2 * 10)
    code += f"{t}{u}"
    if level == 3:
        return code

    # 4次以降(2×2分割)
    lat_rem = lat_r2 * 10 - t
    lon_rem = lon_r2 * 10 - u
    for lv in range(4, level + 1):
        lat_half = int(lat_rem * 2)
        lon_half = int(lon_rem * 2)
        code += str(lat_half * 2 + lon_half + 1)
        lat_rem = lat_rem * 2 - lat_half
        lon_rem = lon_rem * 2 - lon_half

    return code

# 使用例: 東京駅(35.6812, 139.7671)
print(latlon_to_meshcode(35.6812, 139.7671))  # → 53394611

メッシュコード → 緯度経度(南西端)

def meshcode_to_latlon(code: str) -> tuple[float, float]:
    """メッシュコードから南西端の緯度経度を返す"""
    # 1次メッシュ
    p = int(code[0:2])
    q = int(code[2:4])
    lat = p / 1.5
    lon = q + 100.0

    if len(code) <= 4:
        return (lat, lon)

    # 2次メッシュ
    r = int(code[4])
    s = int(code[5])
    lat += r / 1.5 / 8
    lon += s / 8

    if len(code) <= 6:
        return (lat, lon)

    # 3次メッシュ
    t = int(code[6])
    u = int(code[7])
    lat += t / 1.5 / 8 / 10
    lon += u / 8 / 10

    if len(code) <= 8:
        return (lat, lon)

    # 4次以降
    lat_unit = 1 / 1.5 / 8 / 10
    lon_unit = 1 / 8 / 10
    for i in range(8, len(code)):
        lat_unit /= 2
        lon_unit /= 2
        v = int(code[i])
        lat += ((v - 1) // 2) * lat_unit
        lon += ((v - 1) % 2) * lon_unit

    return (lat, lon)

# 使用例
print(meshcode_to_latlon("53394611"))  # → (35.675, 139.7625)

なお、大量データの変換にはjismeshライブラリが便利である。pip install jismesh でインストールし、jismesh.to_meshcode(lat, lon, level) / jismesh.to_meshlat(meshcode) のように1行で変換できる。

実務での使い分け判断フロー

どちらの座標体系を使うべきかは、データの利用目的で決まる。

緯度経度を使うべきケース

  • 個別地点の位置情報が必要な場合:店舗所在地、不動産物件の位置、配送先の特定など
  • 距離・経路の計算が必要な場合:2地点間の距離算出、最寄り施設の検索、カーナビのルート計算
  • 地図上へのピン表示:Google Maps APIやLeafletでのマーカー表示
  • GPSデータの処理:スマートフォンやIoTセンサーの測位データはすべて緯度経度で取得される

メッシュコードを使うべきケース

  • エリア単位の統計分析:人口密度、世帯年収、商業施設数など地域統計との結合
  • プライバシー保護が求められる場合:個人の位置情報をメッシュ単位に集約し、個人特定を防止
  • 時系列での地域比較:同一区画の経年変化を追跡(行政区画は合併で境界が変わるがメッシュは不変)
  • 通信エリア設計:携帯電話基地局のカバレッジ分析、電波強度のメッシュ単位集計
  • 商圏分析・出店計画:コンビニやスーパーの商圏をメッシュ単位で評価

併用するケース

多くの実務では両方を併用する。たとえば:

  1. GPS端末で取得した緯度経度を → メッシュコードに変換
  2. e-Statの統計データとメッシュコードで結合
  3. 結合結果を地図上に緯度経度ベースで可視化

この「緯度経度で収集 → メッシュで集計 → 緯度経度で可視化」のパイプラインが、位置情報分析の典型的なワークフローである。

メッシュ次数の選び方:分析粒度と使い分け

次数選定は「何を分析するか」で決まる。

分析目的推奨次数理由
都道府県レベルの傾向把握1次(約80km)広域の粗い傾向を俯瞰できる
市区町村レベルの地域比較2次(約10km)自治体より均一な面積で比較可能
国勢調査データとの結合3次(約1km)e-Statの標準提供単位
店舗商圏の詳細分析4次(約500m)徒歩圏内の細粒度分析
モバイル通信のエリア設計5次(約250m)基地局カバレッジの精密分析
建物単位に近い精密分析6次(約125m)高密度エリアの極細粒度分析

注意点として、次数を上げるほどデータ量は急増する。3次メッシュの日本全域は約38万区画だが、6次メッシュでは3次の64倍(2×2分割を3回)で約2,400万区画に達する。処理性能とストレージを考慮した次数選定が重要である。

測地系の違いに注意:日本測地系と世界測地系

メッシュコードを扱う際に見落としがちなのが測地系の違いである。

  • 日本測地系(旧測地系・Tokyo Datum):2002年3月以前の地図や統計で使用
  • 世界測地系(JGD2000/JGD2011):2002年4月の測量法改正以降の標準

両者の間には約400〜450mのずれがある。同じメッシュコード「53394611」でも、日本測地系と世界測地系では指し示す地理的位置が異なる。

国勢調査では1990年以前は日本測地系、1995年以降は世界測地系のメッシュが採用されている。年代の異なるデータを結合する際は、測地系の変換(国土地理院のTKY2JGDなど)が必須である。

e-Statからメッシュ統計を取得する手順

総務省統計局が運営するe-Stat(政府統計のポータルサイト)から、メッシュ統計データを取得できる。

  1. e-Stat(https://www.e-stat.go.jp/)にアクセス
  2. 「地図で見る統計(統計GIS)」を選択
  3. 「データダウンロード」から対象の統計調査を選ぶ(例: 国勢調査)
  4. 統計表とメッシュ次数(3次メッシュ等)を指定
  5. 対象地域を選んでCSV形式でダウンロード

ダウンロードしたCSVにはメッシュコード列が含まれており、上記の変換式で緯度経度に変換すれば地図上にプロットできる。

よくある質問

メッシュコードから緯度経度を求めると「南西端」になるのはなぜ?

メッシュは面であり無数の緯度経度を内包するため、代表点が必要になる。JIS X 0410では区画の南西端(左下)を基準点と定めている。区画の中心点が必要な場合は、南西端の緯度経度に緯度幅・経度幅の半分を加算すればよい。

Excelでメッシュコードと緯度経度を変換できる?

可能だが複雑になる。1次〜3次メッシュの変換はINT関数とMOD関数の組み合わせで実現できる。ただし4次以降の分割ロジックはExcelでは煩雑になるため、Pythonスクリプトや専用ツール(国土地理院のメッシュコード確認ページなど)の利用を推奨する。

海外でもメッシュコードは使える?

JIS X 0410のメッシュコードは日本国内専用の規格である。海外ではUber H3、Google S2 Geometry、Geohashなどのグローバルなグリッドシステムが使われる。国際的なプロジェクトではこれらとの使い分けが必要になる。

まとめ

緯度経度とメッシュコードは相互に変換可能であり、対立する概念ではない。点の位置特定には緯度経度面の統計集計にはメッシュコードという原則を押さえておけば、適切な使い分けができる。

実務では「緯度経度で収集 → メッシュコードで集計 → 緯度経度で可視化」というパイプラインを組むのが定石である。メッシュ次数は分析目的に応じて3次(約1km)を基本とし、必要に応じて上下の次数を選択する。

変換処理をプログラムで行う場合は、Pythonのjismeshライブラリを使えば数行で実装できる。大規模データの処理ではロジックを自前実装して高速化する選択肢もある。

title: “019c3a56 9bdc 79b3 B122 30ef3288730e” date: 2026-02-08T08:01:20+09:00 description: "" tags: [] categories: [] draft: true