【No.003】緯度経度の表記方法とは?10進法と60進法の違いや変換方法についてわかりやすく解説
目次- はじめに
- 計算方法
- Appendix
はじめに
緯度経度の表記方法は実は10進法と60進法の2つがあります。例えば10進法は北緯36.1914のように小数値で表現され、60進法の場合は北緯36度42分13.3秒のように度分秒で表されます。(36°42’13.3”のように表現されることもあります)最近では10進法が主流になっているものの、どちらの表記を採用しているかはデータセットを提供している個人・組織に委ねられているのが実情です。では2種類の表記が存在することでどんな問題が起こりえるのでしょうか。個人的には入手した地物データの緯度経度表記が地図アプリケーションに対応していない場合が一番ネックかなと思います。
★関連リンク業務で活用できるAI技集のまとめはこちら緯度経度の距離を算出したい場合はこちら2点間の緯度経度で方位を算出したい場合はこちら緯度経度からMesh変換したい場合はこちら自分だけのオリジナル地図を簡単につくりたい場合はこちら
計算方法
もし入手した地物データは60進法で、地図を表示したいアプリが10進法の場合、60進法→10進法に変換する必要があります。その計算式は以下の通りです。《60進法→10進法》北緯:■度▲分●秒 → 北緯:■+▲/60+●/3600東経:□度△分○秒 → 東経:□+△/60+○/3600計算機も用意しましたので試しに使ってみて下さい。
緯度(度): 緯度(分): 緯度(秒): 経度(度): 経度(分): 経度(秒): 変換合わせて、10進を60進に変換する場合も記載しておきます。《10進法→60進法》北緯:■ → 度:■の整数部分分:((■-度の値)×60)の整数部分秒:(■-度の値-分の値÷60)×3600東経:□ → 度:□の整数部分分:((□-度の値)×60)の整数部分秒:(□-度の値-分の値÷60)×3600
緯度(10進): 経度(10進): 変換あまり複雑な計算ではないので、Excelなどでも比較的簡単に再現できるかと思います。
Appendix
60進法→10進法の計算機のコードです。JavaScriptで動作しています。
<label for="lat_deg">緯度(度):</label> <input type="text" id="lat_deg" value="36"> <label for="lat_min">緯度(分):</label> <input type="text" id="lat_min" value="15"> <label for="lat_sec">緯度(秒):</label> <input type="text" id="lat_sec" value="30"> <br><br> <label for="long_deg">経度(度):</label> <input type="text" id="long_deg" value="136"> <label for="long_min">経度(分):</label> <input type="text" id="long_min" value="16"> <label for="long_sec">経度(秒):</label> <input type="text" id="long_sec" value="32"> <button>変換</button> <p id="result"></p> <script> function convert() { // 以前の結果をリセットする document.getElementById('result').innerHTML = ''; const latDeg = parseFloat(document.getElementById('lat_deg').value); const latMin = parseFloat(document.getElementById('lat_min').value); const latSec = parseFloat(document.getElementById('lat_sec').value); const longDeg = parseFloat(document.getElementById('long_deg').value); const longMin = parseFloat(document.getElementById('long_min').value); const longSec = parseFloat(document.getElementById('long_sec').value); const latDecimal = latDeg + (latMin / 60) + (latSec / 3600); const longDecimal = longDeg + (longMin / 60) + (longSec / 3600); document.getElementById('result').innerHTML = `緯度(10進):${latDecimal}<br>経度(10進):${longDecimal}`; } </script>10進法→60進法の計算機のコードです。同じくJavaScriptで動作しています。
<label for="lat_deg">緯度(10進):</label> <input type="text" id="lat_decimal" value="36.1234"> <br><br> <label for="long_deg">経度(10進):</label> <input type="text" id="long_decimal" value="136.5678"> <button>変換</button> <p id="result2"></p> <script> function convert2() { // 以前の結果をリセットする document.getElementById('result2').innerHTML = ''; // 緯度・経度の値を取得する const latDecimal = parseFloat(document.getElementById('lat_decimal').value); const longDecimal = parseFloat(document.getElementById('long_decimal').value); // 緯度・経度を計算する const latDeg = Math.floor(Math.abs(latDecimal)); const latMin = Math.floor((Math.abs(latDecimal) - latDeg) * 60); const latSec = ((Math.abs(latDecimal) - latDeg - latMin / 60) * 3600).toFixed(2); const latDir = latDecimal >= 0 ? 'N' : 'S'; const longDeg = Math.floor(Math.abs(longDecimal)); const longMin = Math.floor((Math.abs(longDecimal) - longDeg) * 60); const longSec = ((Math.abs(longDecimal) - longDeg - longMin / 60) * 3600).toFixed(2); const longDir = longDecimal >= 0 ? 'E' : 'W'; // 結果を表示する document.getElementById('result2').innerHTML = `緯度(60進):${latDeg}°${latMin}'${latSec}"${latDir}<br>経度(60進):${longDeg}°${longMin}'${longSec}"${longDir}`; } </script>