@_shimizu

度分秒(DMS)表記を十進数(Decimal)に変換する雑なやり方

"北緯35度39分31秒 東経139度44分44秒""35°39′31″N 139°44′44″E"などの表記を十進数表記に雑に変換する。

function dms2decimal(dms) {    
    return dms.split(/\D/).filter(d => d != "").reduce((a, c, i) => {
        const opt = {
            1: 60,
            2: 3600
        }
        const na = +a;
        const nc = +c;
        return na + (nc / opt[i])
    })
}
> dms2decimal("北緯35度39分31秒");
<- 35.65861111111111

> dms2decimal("東経139度44分44");
<- 139.74555555555554

> dms2decimal("35°39′31″N");
<- 35.65861111111111

> dms2decimal("139°44′44″E");
<- 139.74555555555554

実に雑なので、誤作動するときがあるかも。

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
    _shimizu
    群馬・東京間を行き来する出稼ぎエンジニアです。ブログではGIS(地理情報システム)・データビジュアライゼーション・オープンデータなどについて書いてます。JavaScript勉強中

    コメント

    (編集済み)

    べき乗演算子を使うとopt変数を不要にできますね。

    const dms2decimal = dms => dms.split(/\D/)
                                  .filter(d => d != "")
                                  .reduce((a, c, i) => +a + (+c / 60**i));
    
    0

    filter()とかreduce()とか要らなくないですか?

    const dms2decimal = str => {
      const n = str.match(/\d+/g);
      return +n[0] +n[1] / 60 +n[2] / 3600;
    };
    
    console.log(dms2decimal("北緯35度39分31秒")); // 35.65861111111111
    console.log(dms2decimal("東経139度44分44"));  // 139.74555555555554
    console.log(dms2decimal("35°39′31″N"));    // 35.65861111111111
    console.log(dms2decimal("139°44′44″E"));   // 139.74555555555554
    
    0
    あなたもコメントしてみませんか :)
    ユーザー登録
    すでにアカウントを持っている方はログイン
    記事投稿イベント開催中
    Qiita 10周年記念イベント - 10年後のために今勉強しておきたい技術
    ~
    Qiita 10周年記念イベント - 10年前の自分に伝えたい、勉強しておきたかった技術
    ~
    0