地理·
地球は球体?半径地図の距離計算の原理をやさしく解説
Web 地図で「半径 5km の同心円」を描くと、画面上では真円に見えるけど、 ズームアウトすると赤道付近と極付近で歪んで見えるのに気づくはずです。 これは地図が球面(地球)を平面に投影しているために起こる、避けられない現象。 この記事では半径地図の計算原理を、難しい数式を避けてわかりやすく解説します。circle-mapがどう計算しているかも公開します。
地球は球体?厳密には回転楕円体
小学校で「地球は球体」と習いますが、厳密には赤道方向にやや膨らんだ回転楕円体。
- 赤道半径: 6,378.137 km
- 極半径: 6,356.752 km
- 差: 約 21 km(赤道の方が長い)
簡易計算では平均半径 6,371 km を使うことが多いです。 この記事もそれで進めます。
距離計算の3つの方法
1. ユークリッド距離(平面上の直線)
最もシンプルな計算。地図を平面と見なして、ピタゴラスの定理で距離を出します。
距離 = √((x2-x1)² + (y2-y1)²)
短距離(数km)なら誤差は無視できますが、長距離になると地球の曲率を無視するため大きく狂います。
2. 大円距離(球面三角法)
地球を球体と見なし、地表に沿った最短経路を計算する方法。 通称「Haversine 公式」と呼ばれます。
2点(緯度1, 経度1)と(緯度2, 経度2)の距離 d は:
a = sin²(Δlat/2) + cos(lat1) · cos(lat2) · sin²(Δlng/2) c = 2 · atan2(√a, √(1−a)) d = R · c R: 地球半径 (6,371,008.8 m)
ほとんどの Web 地図アプリ・ナビゲーションが採用している方法。 circle-map もこの方法で計算しています。
3. 測地線距離(回転楕円体)
地球の回転楕円体形状を考慮した最も正確な計算。 Vincenty 公式や Karney アルゴリズムが代表的。
測地・GPS・航空・船舶など、高精度が要求される分野で使われます。 Haversine との誤差は長距離で0.5% 程度なので、 Web 地図用途では Haversine で十分です。
同心円が歪む理由:メルカトル図法
Google マップ・Mapbox を含むほとんどの Web 地図はメルカトル図法で 球体を平面に投影しています。
メルカトル図法の特徴
- 赤道付近は正確
- 極に近いほど面積が膨張
- 角度(方位)が保たれる(航海図に適している)
- 北極・南極は無限遠(地図に描けない)
同心円との関係
実世界では半径 5km の真円でも、メルカトル図法で表示すると:
- 赤道付近(緯度 0 度): 画面上もほぼ真円
- 東京(緯度 35 度): わずかに南北方向に伸びた楕円に
- 札幌(緯度 43 度): 楕円の伸びが顕著
- 北海道北端(緯度 45 度): 明らかに楕円
- 北極圏: 大きく歪む
逆に、画面上で真円に見える円を描いた場合、緯度が高いほど実際の半径は小さくなるということ。
circle-map の計算方法
circle-map では、ユーザーが入力した半径(メートル)に基づいて、 Haversine の逆計算で「指定半径の真円ポリゴン」を生成しています。
- 中心点の緯度経度を取得
- 360 度を 128 等分
- 各方位(0 度・2.8 度・5.6 度…)に対して、半径 R メートル進んだ地点を計算
- 128 点を結んで Polygon を作成
- Mapbox に GeoJSON として渡して描画
この方法だと、地表に沿った真の円が描けます。 画面上で歪んで見えるのは、メルカトル投影による視覚的な歪みであり、実距離としては正しい円です。
具体例:東京駅中心の半径 10km
東京駅(北緯 35.6812度、東経 139.7671度)を中心に半径 10km の円を描くと:
- 北端: 北緯 35.7712度(10km 北)
- 南端: 北緯 35.5912度(10km 南)
- 東端: 東経 139.8775度(10km 東)
- 西端: 東経 139.6567度(10km 西)
南北 10km は緯度 0.09 度(1度=約111km)。 東西 10km は緯度 35度では経度 0.11 度(緯度の cos 補正で 1度=約91km)。 この補正があるから、地球儀上では真円になります。
赤道と極の違い
同じ「経度 1 度」でも、緯度によって実距離が変わります。
- 赤道(緯度 0 度): 経度 1 度 = 111.32 km
- 東京(緯度 35 度): 経度 1 度 = 91.29 km
- パリ(緯度 49 度): 経度 1 度 = 73.13 km
- 札幌(緯度 43 度): 経度 1 度 = 81.45 km
- モスクワ(緯度 56 度): 経度 1 度 = 62.41 km
- 北極・南極(緯度 90 度): 経度 1 度 = 0 km
直線距離 vs 実距離
circle-map が描くのは直線距離(大円距離)。 実際に歩く道のり・車で走るルート距離はこれよりも長くなります。
- 平地の都市部: 直線距離の 1.2〜1.3 倍
- 山がちな地形: 直線距離の 1.5〜2 倍
- 河川を迂回する場合: さらに伸びる
- 離島を経由する場合: 全く異なるルート
ナビゲーションアプリの「徒歩 10 分」「車で 15 分」は実ルート計算ベース。 半径地図の直線距離とは別の指標として理解しておきましょう。
半径地図の限界と使いどころ
半径地図は「ざっくりとした距離感」を可視化するためのツールです。 正確な道のり距離が必要な場合は、Google マップのルート検索を使いましょう。
逆に、以下のような「直線距離での比較が意味を持つ場面」では半径地図が活きます。
- 商圏分析(顧客がどこから来るかのモデル)
- 競合店との位置関係
- 緊急時の最短避難経路の目安
- ドローン・無線・電波の到達範囲
- 不動産価値と都心からの距離の相関
もっと知りたい人へ
- Haversine 公式: Wikipedia の「Haversine formula」記事
- 地球楕円体: 国土地理院「日本のジオイド」資料
- メルカトル図法: 国土地理院「地図投影法」
- GeoJSON 仕様: RFC 7946
まとめ
- 地球は厳密には回転楕円体、半径 6,371km を平均値として使う
- 距離計算は Haversine 公式が標準、誤差はほぼ無視できる
- メルカトル図法で投影するため、緯度が高いほど同心円が楕円に見える
- circle-map は地表に沿った真円を 128 点ポリゴンで描画
- 直線距離は実ルートの 1.2〜2 倍が目安、商圏分析や距離感の比較に有用
実際に同心円を描いてみる:circle-map で半径地図を試す →
関連記事: 地図サービスの使い分け /距離感の総合ガイド