library("data.table")
data_sejima <- fread("https://raw.githubusercontent.com/dichika/mydata/master/sejima.csv",
data.table=FALSE)
library("dplyr")
##
## Attaching package: 'dplyr'
##
## 以下のオブジェクトは 'package:data.table' からマスクされています:
##
## between, last
##
## 以下のオブジェクトは 'package:stats' からマスクされています:
##
## filter, lag
##
## 以下のオブジェクトは 'package:base' からマスクされています:
##
## intersect, setdiff, setequal, union
data_sejima <- bind_rows(data_sejima,
data_frame(year = 2015,
name = "ブルーボトルコーヒー",
address = "東京都港区南青山3-13-14",
memo = "お茶")
)
data_sejima <- bind_rows(data_sejima,
data_frame(year = 1914,
name = "東京駅",
address = "千代田区丸の内1-9-1",
memo = "スタート地点")
)
# ジオコーディング
getLocation <- function(x){
require("httr")
tmp <- content(GET(x), "parsed")
res <- data_frame(
lat=tmp$results[[1]]$geometry$location$lat,
lng=tmp$results[[1]]$geometry$location$lng
)
}
adds <- data_sejima$address
qs <- paste0("http://maps.googleapis.com/maps/api/geocode/json?address=", adds)
locs <- NULL
for(q in qs){
locs <- bind_rows(locs, getLocation(q))
Sys.sleep(1) # 使用制限にひっかからないように1秒待つ
}
## Loading required package: httr
data_sejima <- bind_cols(data_sejima, locs)
library("TSP")
data_dist <- ETSP(data_sejima[,c("lat","lng")])
res <- NULL
for(m in c("identity", "random",
#nearest_insertion","cheapest_insertion","farthest_insertion","arbitrary_insertion"",
"nn", "repetitive_nn", "two_opt")){
tmp <- solve_TSP(data_dist,
method = m,
control=list(start=9)) # start地点の行を指定
res <- bind_rows(res, data_frame(method=attr(tmp, "method"),
tour_length=attr(tmp, "tour_length")))
}
res_nn <- solve_TSP(data_dist,
method = "nn",
control=list(start=9))
data_order <- as.integer(res_nn) # 回る順番
data_sejima <- data_sejima[data_order,] # 並べ替え
library(DT)
DT::datatable(data_sejima)
library(leaflet)
leaflet(data_sejima) %>%
addCircleMarkers(lat = ~lat,
lng = ~lng,
popup=~name,
radius = 10) %>%
addPolylines(lat =~lat,
lng = ~lng) %>%
addPopups(data=data_sejima[range(seq(nrow(data_sejima))),],
lat= ~lat,
lng= ~lng,
popup=data_sejima$name[range(seq(nrow(data_sejima)))],
options=popupOptions(minWidth=10)
) %>%
addTiles()
少しいじってます。 addCircleMarkers
の座標を結ぶだけなので、上記のでOKです。
あと、addPopups()
のところで行を選択するのに、dplyr::filterとかも使えるので、そっちの方が楽うかもしれないです…。