
OpenStreetMapの緯度経度、測地系はどれ? — WGS84の小数7桁と、タイルだけWebメルカトルになる理由
WGS84です。 OpenStreetMap(OSM)のノードは、緯度・経度をWGS84の度(小数7桁)で持ちます。データ側に測地系を書く欄はありません。選択肢が1つしかないので、書く必要がないという設計です。ただし配信される地図タイルはWebメルカトル(EPSG:3857)で、こちらは別物。この2つを混同すると、距離や面積の計算が静かにずれます。
結論だけ先に
| 対象 | 座標系 | EPSG |
|---|---|---|
| OSMデータ(ノードのlat/lon) | WGS84の地理座標 | 4326 |
| 標準の地図タイル | WGS84 / Webメルカトル(擬球体) | 3857 |
| 日本で面積・距離を測るとき | 平面直角座標系(JGD2011) | 6669〜6687 |
.osm のXMLにも .osm.pbf にも、Shapefileの .prj にあたる座標系の宣言はありません。「書いていないから不明」ではなく、仕様で1つに固定されているため書く場所がない、というのが正確な理解です。
ノードの構造を見る
OSMの最小要素がノード(node)です。空間上の1点を、緯度・経度・IDで表します。
| 項目 | 値 | 説明 |
|---|---|---|
id |
64ビット整数(1以上) | ノードごとに一意。削除したIDは再利用しない |
lat |
−90.0000000 〜 90.0000000(小数7桁) | 標準のWGS84による緯度(北が正) |
lon |
−180.0000000 〜 180.0000000(小数7桁) | 標準のWGS84による経度(東が正) |
tags |
キーと値の集合 | 何であるかの情報 |
XMLで見るとこうなります。
<node id="25496583" lat="51.5173639" lon="-0.140043" version="1"
changeset="203496" user="80n" uid="1238" visible="true"
timestamp="2007-01-28T11:40:26Z">
<tag k="highway" v="traffic_signals"/>
</node>
lat と lon の属性しかありません。srsName も datum も無い。GMLやSIMAのように座標系を書く欄が用意されている形式とは、この点が根本的に違います。
なぜ「小数7桁」なのか
7という数字には理由があります。OSMのデータベースは座標を、度の値を1e7倍して丸めた整数として持っています。32ビット整数で表せる範囲は ±214.7483647 度なので、±180度を余裕をもって収められるちょうどよいスケールになります。
精度の側から見るとこうです。
| 小数桁数 | 度 | 緯度方向の距離 |
|---|---|---|
| 0 | 1° | 111,120 m |
| 2 | 0.01° | 1,111 m |
| 4 | 0.0001° | 11.1 m |
| 5 | 0.00001° | 1.11 m |
| 6 | 0.000001° | 0.111 m |
| 7 | 0.0000001° | 0.0111 m(約1.1cm) |
小数7桁に丸めたときの経度の最悪誤差は、赤道上で最大 ±5.56595 mm。センチメートル精度の地図が作れる水準です。OSM Wikiは、もし小数5桁しか持たなければ精度はメートル級になり、建物の形がゆがんだり道路がぎざぎざになる、と説明しています。
ここが実務の落とし穴——float32を使わない
OSM Wikiが明示的に警告しているのがこれです。IEEE 32ビット浮動小数点(単精度)は使ってはいけません。 単精度では、大きいほうの経度で有効桁が小数5桁程度しか残らないからです。上の表でいえば1メートル級の精度まで劣化するということになります。
- 詳しくは: 座標を浮動小数点で持つときに何桁まで信用できるか
自前のツールでOSMデータを読む場合、緯度経度は64ビット浮動小数点(double)か、1e7倍した整数のまま扱うのが安全です。投影計算の途中結果にもdoubleが要ります。
日本で使うときに確認すること
WGS84とJGD2011の差は無視できる、旧日本測地系とは無視できない
日本の測量成果は日本測地系2011(JGD2011)やJGD2024で与えられます。WGS84とこれらの世界測地系との差は数cm程度で、OSMが表現しているものの位置精度(測量成果ではなく、GPSログや航空写真のトレースに由来する)から見れば、実用上は同じものとして扱えます。
危ないのは旧日本測地系(Tokyo Datum)のほうです。こちらは日本国内で約400mずれます。古い図面・古い一覧表からOSMへ取り込むデータがある場合、取り込む前に変換が必要です。「なんとなく数字が緯度経度の形をしているから」と貼り付けると、地図の上で数百m離れた場所に点が並びます。
高さは緯度経度と別の話
ノードには任意で ele(elevation)タグを付けられますが、これは緯度経度とは別系統の値です。GNSSが直接出すのは楕円体高で、地図や標識に書かれているのは標高。どちらの意味で入っているかはタグ側からは判別できません。高さを使う用途では、値の出どころを確認してから使うことになります。
タイルだけWebメルカトルになる理由
データがEPSG:4326なのに、標準タイルはEPSG:3857です。これはOSMに限らず、Webの地図配信でほぼ共通の事情です。
Webメルカトルは、正方形のタイルを再帰的に4分割していく構造と相性がよい投影です。ズームレベルzで 2^z × 2^z 枚のタイルに世界を敷き詰められる。そのかわり、
- 極付近が無限に伸びるため、緯度は約 ±85.0511 度で打ち切る(正方形に収めるため)
- 距離・面積が緯度によって拡大される
という性質を持ちます。OSM Wikiのノード仕様にも、「一部のアプリケーションは投影の都合上、±85度を超える緯度を受け付けない場合がある」という注記が入っています。データ側は±90度まで持てるのに、表示側の都合で制限がかかる、という食い違いです。
日本の緯度(北緯35度付近)では、Webメルカトル上の距離は実際の1.2倍以上に引き伸ばされます。タイル座標のまま面積を計算してはいけない理由がここにあります。
- 詳しくは: Webメルカトルと平面直角座標の違いと変換
面積・距離を測るなら平面直角座標へ
OSMから切り出したポリゴンの面積を出したい、道路の延長を測りたい——という場合は、EPSG:4326のまま計算しない。日本国内なら平面直角座標系(JGD2011系)へ投影してから測ります。

ogr2ogr なら次のような形になります(第9系=EPSG:6677の例)。
# .osm / .pbf から読み、平面直角座標系9系のGeoPackageへ
ogr2ogr -f GPKG out.gpkg input.osm.pbf \
-s_srs EPSG:4326 -t_srs EPSG:6677 lines
-s_srs EPSG:4326 は本来なら省略できます(ドライバがWGS84と分かっているため)が、明示しておくと後で読む人が迷いません。逆に、-a_srs で「宣言だけ書き換える」ことは絶対にしないでください。値はそのままで、ラベルだけが変わります。
系番号の選び方は都道府県で決まります。またがる範囲を1系で処理すると、端で縮尺のずれが効いてきます。
QGISに読み込むときのチェック
- レイヤCRSが EPSG:4326 になっているか(
.osm読み込み時に自動で付く) - プロジェクトCRSを 平面直角座標系 に変えたか(面積・距離を測るなら必須)
- 底図にタイルを敷いた場合、それは EPSG:3857。レイヤCRSとは別物
2と3を取り違えると、「見た目は合っているのに数値が合わない」という一番やっかいな状態になります。
まとめ
- OSMのノードの緯度経度はWGS84。データ側に座標系の宣言欄は無く、仕様で1つに固定されている
- 値は度の小数7桁。内部的には度を1e7倍した整数で、32ビット整数の±214.7483647度に収まる
- 小数7桁の丸め誤差は赤道上で最大±5.566mm。センチメートル精度の地図が作れる水準
- 単精度浮動小数点(float32)で持ってはいけない。有効桁が小数5桁程度に落ち、メートル級まで劣化する
- WGS84とJGD2011/JGD2024の差は数cmで実用上は無視できるが、旧日本測地系とは約400mずれる。取り込み前に変換する
- 標準タイルはEPSG:3857(Webメルカトル)。緯度は約±85.0511度で打ち切られ、日本付近では距離が1.2倍以上に伸びる
- 面積・距離は平面直角座標系(EPSG:6669〜6687)へ投影してから測る。
-a_srsでラベルだけ書き換えない
出典
- OpenStreetMap Wiki「Node」(データ構造・lat/lonの定義・7桁の根拠) https://wiki.openstreetmap.org/wiki/Node
- OpenStreetMap Wiki「Precision of coordinates」(小数桁数と距離の対応表) https://wiki.openstreetmap.org/wiki/Precision_of_coordinates
- OpenStreetMap Wiki「Slippy map tilenames」(タイル座標と緯度の打ち切り) https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames
本記事の記述は2026年9月時点のOpenStreetMap Wikiの記載に基づきます。OSMの仕様やタグの運用は改定されることがあるため、最新の内容は一次資料でご確認ください。
次に確認する
- 座標を浮動小数点で持つとき、何桁まで信用できるかを確認する — 本記事の「float32を使うな」という注意の、数値的な裏付けです
- Webメルカトルと平面直角座標の違いと変換を確認する — タイルのEPSG:3857で長さを測ってはいけない理由です
- この座標、測地系はどれ? — ズレ量で旧日本測地系か世界測地系かを見分ける — 取り込むデータが旧日本測地系かどうかを判定する手順です
- GeoJSON・KML・GPXの測地系が固定されている理由を確認する — OSMと同じく「書く欄が無い」形式たちの話です
- 地理院タイルのしくみを図で確認する(GeoPrism JP) — タイル座標の構造そのものを、学ぶ側から見た記事です
- 書籍でまとめて学ぶ: 『日本の測地系Q&A』第13章「座標データの落とし穴」(Kindle Unlimited対応)
入門から通しで読むなら: 『日本の測地系がわかる本』 — 旧日本測地系から JGD2024 まで、座標がズレる理由と実務での扱いを1冊にまとめました(Kindle Unlimited 対応)
開発者より: アプリ・Kindle本・オープンソースの一覧は GitHub: amru195704 にまとめています。
お願い
本記事の情報は参考目的で掲載しており、正確性・完全性を保証するものではありません。誤記・不正確な情報がございましたら、コメント欄よりご指摘いただければ、確認のうえ修正いたします。
コメントを残す