Javascript 時刻形式経緯度十進変換関数

気象や航空関係のデータの経緯度の形式が時刻なものを、Leafletの地図で扱う場合のデータ検証用として、
地名入力してジオコーダーを使って移動させるような処理を、入力値を時刻経緯度で行うために作ってみました。

< コード例 >


/**
 * 時刻経緯度十進変換
 * 
 * @param txt 入力文字列 ex. 353220.86N
 *                            1394906.93E
 */
const getDecLocationFromTimeLocation = (txt) => {

  let res = ""

  const pos_comma = txt.indexOf(".")

  const txt_int_part = txt.slice(0, pos_comma)

  let txt_dec_part = txt.slice(pos_comma + 1)
  txt_dec_part = txt_dec_part.replace("N", "").replace("S", "").replace("W", "").replace("E", "")

  let txt_int = ""
  let txt_min = ""

  //alert(txt_int_part + "\n" + txt_int_part.length)

  // 整数部分、分の切り取り //
  switch (txt_int_part.length) {
    // 整数1桁 //
    case 5:
      txt_int = txt_int_part.slice(0, 1)
      txt_min = txt_int_part.slice(1, 3)
      break
      // 整数2桁 //  
    case 6:
      txt_int = txt_int_part.slice(0, 2)
      txt_min = txt_int_part.slice(2, 4)
      break;
      // 整数3桁 //  
    case 7:
      txt_int = txt_int_part.slice(0, 3)
      txt_min = txt_int_part.slice(3, 5)
      break
  }

  // 秒は常に右2文字
  const txt_sec = txt_int_part.slice(-2)

  //alert (txt_int + ":" + txt_min + ":" + txt_sec + "." + txt_dec_part)


  res = Number(txt_int) +
          Number(txt_min / 60) +
          Number(txt_sec / 3600) +
          Number(txt_dec_part / 360000)

  // 南半球の場合 //
  if (txt.slice(-1) === "S" || txt.slice(-1) === "W") {
    res = res * -1
  }

  return res
}
           

作ってから気づいたのですが、整数部分の分秒の変換は、Pythonでの例ですが、


numInt = int(self.txt)
# 整数部
hourPartVal = int(numInt / 10000)
# 分
minutePartVal = int(numInt / 100) % 100
# 秒
secondPartVal = numInt % 100
minuteVal = minutePartVal / 60
secondVal = secondPartVal / 3600
resval = hourPartVal + minuteVal + secondVal

のようにすれば簡潔になります。

< 利用例 >

AiP JAPANに載っている FIXのWaypoint EPSON がどこにあるか調べる

千葉県にあることがわかる

コメントを残す