LoginSignup
11
13

More than 5 years have passed since last update.

緯度経度の表記を相互的に変換する

Posted at

座標に関する表記方法として、大きく分けて次のものがある。

  1. DMS (Degree Minute Second, 緯度経度を度分秒(60進数)を使って表す。ex. 153°59′11″, 24°16′59″)
  2. DEG (Degree, 緯度経度を10進数の度のみを使って表す。ex. 133.9350, 34.66167)

参考) http://www7a.biglobe.ne.jp/~allegory/dms-deg.html

変換する方法がはっきりしていて、わかりやすいのでさまざまなプログラミング言語で変換の方法が書かれている。

が、Rではどうなのだろう。関数はあるのかしらんと思って調べてみたところ、 {celestial} パッケージに変換のための関数が用意されていた。それぞれの方法で変換を試みる。

説明のために次のようなデータを用意する。

df_jp <- data.frame(address          = c("Tokyo, Japan", 
                                         "Okayama, Japan", 
                                         "Sapporo, Japan",
                                         "Okinawa, Japan"),
                    stringsAsFactors = FALSE) %>% 
  ggmap::mutate_geocode(address)
dplyr::tbl_df(df_jp) %>% kable(format = "markdown")
address lon lat
Tokyo, Japan 139.6917 35.68950
Okayama, Japan 133.9350 34.66167
Sapporo, Japan 141.3469 43.06417
Okinawa, Japan 127.8014 26.33583
library(celestial)

パッケージを読み込んで準備完了。

DEGからDMS

deg2dms(df_jp$lat, type = "cat", sep = "dms")
## [1] "+35d41m22.20s" "+34d39m42.01s" "+43d03m51.01s" "+26d20m08.99s"
# spe 引数で度分秒の区切り文字を指定する
deg2hms(df_jp$lon, type = "cat")
## [1] "09:18:46.01" "08:55:44.40" "09:25:23.27" "08:31:12.33"

変換した値を新たな列として加える。

df_jp %<>% dplyr::mutate(lon_dms = deg2hms(lon, type = "cat"),
                         lat_dms = deg2dms(lat, type = "cat", sep = "dms"))

DMSからDEG

先ほど同様、変換した値を新規列とする。

df_jp %<>% dplyr::mutate(lon_deg = hms2deg(lon_dms, sep = ":"),
                        lat_deg = dms2deg(lat_dms, sep = "dms"))
kable(df_jp, format = "markdown")
address lon lat lon_dms lat_dms lon_deg lat_deg
Tokyo, Japan 139.6917 35.68950 09:18:46.01 +35d41m22.20s 139.6917 35.68950
Okayama, Japan 133.9350 34.66167 08:55:44.40 +34d39m42.01s 133.9350 34.66167
Sapporo, Japan 141.3469 43.06417 09:25:23.27 +43d03m51.01s 141.3470 43.06417
Okinawa, Japan 127.8014 26.33583 08:31:12.33 +26d20m08.99s 127.8014 26.33583
11
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13