気象や航空関係のデータの経緯度の形式が時刻なものを、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 がどこにあるか調べる
千葉県にあることがわかる