Rで住所から座標データを取得したくなったのでメモ
API
geocoding.jpのAPIを利用します。
調べた限り、無料でフリーに使えるapiはこれだけ?
ggmapライブラリなるものでgeocodingが昔は使えたようですが、今はAPI_KEYを求められるのでダメな模様。
ggmapを使っても取得できるようです。(11/3修正)
参考:ggmapパッケージを用いて住所から緯度経度のデータを得る
コード
リクエストに対して、結果はxml形式で返ってくるようですが、html上で表示されるのでrvestを使用して座標のみ取り出します。
library(rvest)
url <- paste0("https://www.geocoding.jp/api/?v=1.1&q=", "所望の住所")
page <- read_html(url)
page %>% html_nodes("lat") %>% html_text() -> lat
page %>% html_nodes("lng") %>% html_text() -> lng
geo <- data.frame(lat, lng)
これだけで座標は取得できました。
複数の場合は以下
サンプル
# 複数住所も可
# 住所リスト
> jusho
[1] "日野市東豊田3-16" "墨田区堤通2-6-10" "墨田区東向島1-7-11"
> str(jusho)
chr [1:3] "日野市東豊田3-16" "墨田区堤通2-6-10" "墨田区東向島1-7-11"
url <- paste0("https://www.geocoding.jp/api/?v=1.1&q=", jusho)
lat <- c()
lng <- c()
for(i in 1:length(url)){
page <- read_html(url[i])
page %>% html_nodes("lat") %>% html_text() -> lat_i
page %>% html_nodes("lng") %>% html_text() -> lng_i
lat <- c(lat, lat_i)
lng <- c(lng, lng_i)
Sys.sleep(5) #取得元に負担をかけないよう1データ取得ごとに5秒あける
}
geo_list <- data.frame(jusho, lat, lng)
> geo_list
jusho lat lng
1 日野市東豊田3-16 35.666307 139.387277
2 墨田区堤通2-6-10 35.73371 139.816348
3 墨田区東向島1-7-11 35.721908 139.81308
座標を取得できました。
ここまで取れればleafletなどで可視化するなど、色々できそうです。
参考
住所から緯度経度を取得するpythonスニペット
geocoding.jp
ggmapパッケージを用いて住所から緯度経度のデータを得る