
緯度経度から標高を取るAPIはどれ? — 国土地理院の標高APIと標高タイル、同じ地点でも値が違う理由
単発で1点の標高が欲しいなら国土地理院の標高API(getelevation.php)、大量の点や面で欲しいなら標高タイルです。 どちらも元は同じ基盤地図情報の数値標高モデルですが、同じ経緯度でも返る値は一致しません。理由は3つ——参照されるデータIDが場所によって違う、タイルは4点を平滑化した値である、そして返る桁数が精度区分で変わる。緯度経度を渡す前に、この3つを押さえておくと事故になりません。
結論だけ先に
標高API(getelevation.php) |
標高タイル | |
|---|---|---|
| 入力 | 経度・緯度(度の10進法) | ズームレベル+タイル座標+ピクセル座標 |
| 出力 | elevation(標高値)と hsrc(データソース) |
PNG/TXT のピクセル値 |
| データ選択 | その地点で最も精度の良いものを自動選択 | 呼ぶ側がデータIDとズームを指定 |
| 1点あたりのコスト | HTTPリクエスト1回 | タイル1枚で最大256×256点 |
| 向く用途 | 画面のクリック地点・少数点の照会 | 断面図・メッシュ計算・大量バッチ |
| 位置づけ | 2013年3月14日から試験公開 | 地理院タイルとして公開 |
標高APIの使い方と、返ってくる hsrc の意味
エンドポイントは次の形です。
https://cyberjapandata2.gsi.go.jp/general/dem/scripts/getelevation.php?lon=<経度>&lat=<緯度>&outtype=JSON
lon/latは度の10進法(必須)。度分秒のままでは渡せません。- 出力形式は
outtype=JSONかcallback=<関数名>(JSONP)のどちらか一方を指定します。両方は指定しません。 - 返るのは
elevation(標高値)とhsrc(標高データのデータソース)。エラーのときは両方に-----という文字列が入ります。数値としてパースする前に、この文字列を必ず判定してください。
hsrc は5種類あり、上が精度の良い順です。
hsrc の値 |
元データ | elevation の桁数 |
|---|---|---|
| 1m(レーザ) | 航空レーザ測量の 1m DEM | 0.1m の位まで |
| 5m(レーザ) | 航空レーザ測量の 5m DEM | 0.1m の位まで |
| 5m(写真測量) | 写真測量(地上画素寸法20cm)の 5m DEM | 0.1m の位まで |
| 5m(写真測量5C) | 写真測量(地上画素寸法40cm)の 5m DEM | 0.1m の位まで |
| 10m | 1/2.5万地形図の等高線から作った 10m DEM | 1m の位まで |
ここが実務の落とし穴です。 hsrc が 10m の地点だけ、返る値が 1m 刻みになります。都市部で 0.1m 刻みの値を見ていた処理が、山間部や離島に入った途端に整数値になる——という形で現れます。有効桁を固定して帳票に出している場合は、hsrc も一緒に記録しておくのが安全です。
標高タイルは「データIDごとに別物」
標高タイルは、地図タイルと同じタイル座標・ピクセル座標の体系でデータを持っています。元データとの対応は次のとおりです。
| データID | 測量方法 | 格子間隔 | 標高精度(標準偏差) | 最大ズーム |
|---|---|---|---|---|
| DEM1A | 航空レーザ測量 | 0.04″×0.04″(約1m四方) | 0.3m以内 ※ | 17 |
| DEM5A | 航空レーザ測量 | 0.2″×0.2″(約5m四方) | 0.3m以内 ※ | 15 |
| DEM5B | 写真測量(地上画素寸法20cm) | 0.2″×0.2″(約5m四方) | 0.7m以内 | 15 |
| DEM5C | 写真測量(地上画素寸法40cm) | 0.2″×0.2″(約5m四方) | 1.4m以内 | 15 |
| DEM10B | 1/2.5万地形図等高線(10m間隔) | 0.4″×0.4″(約10m四方) | 5m以内 | 14 |
| DEMGM | 地球地図全球版標高第2版 | 15″×15″(約500m四方) | — | 8 |
※ 0.3m以内は、格子内に航空レーザ計測点(グラウンドデータ)がある場合の精度です。無い場合は 2.0m 以内になります。
DEM5B は都市域周辺等、DEM5C は一部の島嶼部等の整備範囲です。つまり「全国どこでも DEM1A がある」わけではありません。呼ぶ側でデータIDを固定すると、整備範囲外では値が取れません。
同じ経緯度でも値が一致しない3つの理由
1. 参照されるデータIDが場所で変わる
地理院地図が表示する標高は、その地点で整備されている最も計測精度の良い標高タイルの、最大ズームレベルのピクセル値です。DEM1A が無ければ DEM5A → DEM5B・DEM5C → DEM10B の順に降りていきます。標高APIの hsrc が場所で変わるのは、この選択と同じ考え方です。
境界をまたぐと不連続が出ます。公開資料も「元となる標高モデルが変わる境界部では、表示される標高値や作成した断面図・色別標高図が不連続となる場合がある」と明記しています。水部の周辺は特に出やすい場所です。
2. タイルの値は4点の平滑値
各データIDの最大ズームレベルのタイルでは、ピクセル中心に最も近い4つの標高点の値を線形的に平滑化して値を作っています。最大ズームより小さいズームでは、1つ大きいズームの4点を平均します。
したがって、タイルの値は元の標高モデルの計測値と完全には一致しません。地図から読み取れる等高線の値とも一致しません。切土・盛土のように局所的に起伏が激しい場所では、乖離が大きくなる場合があります。同じ経緯度でもデータIDごとに値が違うのも、この平滑化の結果です。
3. ズームレベルで値が変わる
DEM5A をズーム15で取るのと、ズーム12で取るのは別の値になります。ズームが1つ下がるごとに4点平均が1回かかるためです。「標高を取る処理」を書くときは、ズームレベルをコードに固定して記録しておくこと。後から値が合わない原因の切り分けができなくなります。
そして、標高は「楕円体高」ではない
もう1点、座標変換の側から重要な注意があります。標高APIも標高タイルも返すのは標高(正確には、ジオイドを基準とした高さ)です。GNSS 受信機がそのまま出す楕円体高とは別物で、日本ではその差(ジオイド高)が30〜40m台になります。

- GNSS の楕円体高 h から標高 H を出すには、ジオイド高 N を引きます(H = h − N)。
- 逆に、標高APIで得た H に GNSS の測位結果を突き合わせるときも、同じ変換が必要です。
- 標高APIの値をそのまま「GNSSの高さ」と比べると、数十mずれます。
また、元データの標高点は地表面の測定値に基づいており、建物や高架橋などの構造物の高さは反映されていません。水部では標高値が入っていない、または正確な値が入っていない場合があります。
実装するときのチェックリスト
hsrcを必ず保存する。 値の有効桁と精度区分が分かるのはこの1フィールドだけです。-----を判定する。 数値変換の前にエラー文字列をはじきます。- リクエスト数を抑える。 公開資料は「サーバに過度の負担を与えないでください。過度の負担を与えると判断したアクセスについて、国土地理院は予告なく遮断を行う場合があります」と明記しています。点が多いなら標高タイルへ切り替えます。
- 仕様変更の可能性を前提に組む。 同じ資料に「本プログラムを予告なく内容変更したり提供停止したりする可能性があります」とあります。試験公開のサービスです。
- 経緯度の測地系を確認する。 渡す経緯度が旧日本測地系のままだと、数百m離れた地点の標高が返ります。世界測地系(JGD2011/JGD2024)へ直してから渡します。
- 標高と楕円体高を混ぜない。 帳票の列名に「標高」「楕円体高」を書き分けておくのが最も安全です。
GeoConverter Pro は、緯度経度・平面直角座標・測地系の相互変換をオフラインで行う iOS アプリです。標高APIへ渡す前段の「その経緯度は本当に世界測地系か」を確認する用途に使えます。
まとめ
- 1点=標高API、大量・面=標高タイル。 元データは同じでも入口が違います。
- 返る値が場所で変わる理由はデータIDの自動選択。
hsrcで必ず確認します。 - タイルの値は4点の平滑値なので、元の標高モデルとも地形図とも完全一致しません。
hsrc=10mの地点だけ 1m 刻みになります。- 標高APIの値は標高。GNSS の楕円体高とはジオイド高のぶん(日本で30〜40m台)違います。
出典
- 地理院地図|サーバサイドで経緯度から標高を求めるプログラム(国土地理院): https://maps.gsi.go.jp/development/elevation_s.html
- 各データソースのより詳しい仕様や精度(国土地理院・PDF): https://maps.gsi.go.jp/help/pdf/demapi.pdf
- 標高タイルの作成方法と地理院地図で表示される標高値について(国土地理院): https://maps.gsi.go.jp/development/hyokochi.html
- 標高タイルの詳細仕様(国土地理院): https://maps.gsi.go.jp/development/demtile.html
- 地理院地図|標高を求めるプログラム(国土地理院): https://maps.gsi.go.jp/development/elevation.html
次に確認する
- 楕円体高から標高へ — ジオイド2024を使った変換の実務 — 本記事の最後に出てきた H = h − N を、ジオイドモデルの版まで踏み込んで扱っています
- ジオイド高はどう補間されているのか — 格子から点の値を出す手順 — 標高タイルの「4点を平滑化」と同じ、格子データから点の値を作る処理の話です
- T.P.・A.P.・O.P.・Y.P. — 地域ごとの高さの基準はなぜ複数あるのか — 標高APIが返す「標高」が何を基準にした高さなのかを押さえられます
- 海抜と標高の違いとは(GeoPrism JP) — 「海面からの高さ」という言い方の中身を図で確認できます
- 書籍でまとめて学ぶ: 『日本の測地系Q&A』第8章「標高・ジオイド・海面」(Kindle Unlimited対応)
開発者より: アプリ・Kindle本・オープンソースの一覧は GitHub: amru195704 にまとめています。
お願い
本記事の情報は参考目的で掲載しており、正確性・完全性を保証するものではありません。誤記・不正確な情報がございましたら、コメント欄よりご指摘いただければ、確認のうえ修正いたします。
コメントを残す