林嶔 (Lin, Chin)
Lesson 10
– Google地圖是我們最常用的地圖,他包含了街道圖/衛星圖等不同圖資,在R裡面我們可以透過套件輕鬆的與Google地圖作結合。
– 請至這裡下載登革熱流行的範例資料。
## 發病日 個案研判日 通報日 性別 年齡層 居住縣市 居住鄉鎮 居住村里
## 1 1998/01/02 1998/01/07 男 40-44 屏東縣 屏東市
## 2 1998/01/03 1998/01/14 男 30-34 屏東縣 東港鎮
## 3 1998/01/13 1998/02/18 男 55-59 宜蘭縣 宜蘭市
## 4 1998/01/15 1998/01/23 男 35-39 高雄市 苓雅區
## 5 1998/01/20 1998/02/04 男 55-59 宜蘭縣 五結鄉
## 6 1998/01/22 1998/02/19 男 20-24 桃園市 蘆竹區
## 最小統計區 最小統計區中心點X 最小統計區中心點Y 一級統計區 二級統計區
## 1 A1320-0136-00 120.5059 22.46425 A1320-04-008 A1320-04
## 2 A1303-0150-00 120.4536 22.46639 A1303-09-007 A1303-09
## 3 A0201-0449-00 121.7514 24.74922 A0201-23-006 A0201-23
## 4 A6408-0153-00 120.3381 22.63032 A6408-10-010 A6408-10
## 5 A0209-0232-00 121.7983 24.68457 A0209-10-005 A0209-10
## 6 A0305-0543-00 121.2965 25.04431 A0305-36-002 A0305-36
## 感染縣市 感染鄉鎮 感染村里 是否境外移入 感染國家 確定病例數
## 1 否 1
## 2 是 1
## 3 是 1
## 4 否 1
## 5 否 1
## 6 是 1
– 注意,你需要準備API Key:
lat = c(22.88751, 23.41373)
lon = c(120.023, 120.6562)
center = c(mean(lat), mean(lon))
zoom = min(MaxZoom(range(lat), range(lon)))
MyMap = GetMap(center = center, zoom = zoom, API_console_key = 'AIzaSyA4DVFtF70aXE7RgrXViy2z5Ku2pMkVxFI')
PlotOnStaticMap(MyMap)MyMap2 = GetMap(center = center, zoom = zoom, maptype = "satellite", API_console_key = 'AIzaSyA4DVFtF70aXE7RgrXViy2z5Ku2pMkVxFI')
PlotOnStaticMap(MyMap2)dat[,1] = as.Date(dat[,1])
subdat = dat[dat[,1] <= as.Date("2015-09-30") & dat[,1] >= as.Date("2015-09-01") & dat[,6] == "台南市",]
nrow(subdat)## [1] 12815
– 我們可以透過函數「PlotOnStaticMap()」把點放到MyMap上面
PlotOnStaticMap(MyMap, lat = subdat$最小統計區中心點Y, lon = subdat$最小統計區中心點X, pch = 19, col = "red", cex = 1)x1 <- subdat$最小統計區中心點Y
x2 <- subdat$最小統計區中心點X
df <- data.frame(x1,x2)
## Use densCols() output to get density at each point
x <- densCols(x1,x2, colramp=colorRampPalette(c("black", "white")))
df$dens <- col2rgb(x)[1,] + 1L
## Map densities to colors
cols <- colorRampPalette(c("#000099", "#00FEFF", "#45FE4F",
"#FCFF00", "#FF9400", "#FF3100"))(256)
df$col <- cols[df$dens]
PlotOnStaticMap(MyMap, lat = df$x1, lon = df$x2, pch = 19, col = df$col, cex = 1.5)## objectid_1 village town county village_id town_id county_id tv_all
## 0 1 中山里 東區 嘉義市 061 10020010 10020 東區中山里
## 1 2 後驛里 西區 嘉義市 064 10020020 10020 西區後驛里
## 2 3 東川里 東區 嘉義市 038 10020010 10020 東區東川里
## 3 4 番社里 西區 嘉義市 061 10020020 10020 西區番社里
## 4 5 中央里 東區 嘉義市 062 10020010 10020 東區中央里
## 5 6 東興里 東區 嘉義市 060 10020010 10020 東區東興里
## villcode ori_villag area max_x max_y min_x min_y x
## 0 A2001-061-00 NULL 230686.8 195185.2 2598108 194071.2 2597692 194698.8
## 1 A2002-064-00 NULL 363016.4 193222.2 2598067 192319.2 2597159 192755.7
## 2 A2001-038-00 NULL 630623.2 196096.4 2598009 194992.9 2596974 195507.5
## 3 A2002-061-00 NULL 170099.2 193546.0 2597889 192872.0 2597386 193249.6
## 4 A2001-062-00 NULL 194986.9 194170.0 2597852 193726.8 2597264 193954.0
## 5 A2001-060-00 NULL 215453.5 195207.0 2597837 194114.4 2597456 194621.2
## y v_id sort id countyname townname objectid orig_fid shape_leng
## 0 2597889 10020010-061 20 0 NULL NULL 0 0 0
## 1 2597628 10020020-064 20 1 NULL NULL 0 0 0
## 2 2597570 10020010-038 20 2 NULL NULL 0 0 0
## 3 2597626 10020020-061 20 3 NULL NULL 0 0 0
## 4 2597550 10020010-062 20 4 NULL NULL 0 0 0
## 5 2597662 10020010-060 20 5 NULL NULL 0 0 0
## shape_le_1 shape_area
## 0 2734.726 230686.8
## 1 2617.877 363016.4
## 2 3891.870 630623.2
## 3 2021.745 170099.2
## 4 1812.928 194986.9
## 5 2658.314 215453.5
## [1] 752
MysubMap = GetMap(center = center, zoom = zoom, maptype = "satellite", API_console_key = 'AIzaSyA4DVFtF70aXE7RgrXViy2z5Ku2pMkVxFI')
PlotOnStaticMap(MysubMap)
for (i in 1:nrow(Tainan.mapdat)) {
linedat = read.csv(paste0("TWmap/TWmap/編號", Tainan.mapdat[i,1], ".csv"), header = TRUE, fileEncoding = 'CP950')
PlotOnStaticMap(MysubMap, lat = linedat[,2], lon = linedat[,1], FUN = lines, add = TRUE, col = "red")
}MysubMap = GetMap(center = center, zoom = zoom, maptype = "satellite", API_console_key = 'AIzaSyA4DVFtF70aXE7RgrXViy2z5Ku2pMkVxFI')
PlotOnStaticMap(MysubMap)
for (i in 1:nrow(Tainan.mapdat)) {
linedat = read.csv(paste0("TWmap/TWmap/編號", Tainan.mapdat[i,1], ".csv"), header = TRUE, fileEncoding = 'CP950')
PlotOnStaticMap(MysubMap, lat = linedat[,2], lon = linedat[,1], FUN = lines, add = TRUE, col = "red")
}
PlotOnStaticMap(MysubMap, lat = df$x1, lon = df$x2, pch = 19, col = df$col, add = TRUE)lat = c(22.88751, 23.41373)
lon = c(120.023, 120.6562)
plot.new()
plot.window(xlim = lon, ylim = lat)
for (i in 1:nrow(Tainan.mapdat)) {
linedat = read.csv(paste0("TWmap/TWmap/編號", Tainan.mapdat[i,1], ".csv"), header = TRUE, fileEncoding = 'CP950')
polygon(linedat[,1], linedat[,2], col = "white")
}lat = c(22.88751, 23.41373)
lon = c(120.023, 120.6562)
plot.new()
plot.window(xlim = lon, ylim = lat)
for (i in 1:nrow(Tainan.mapdat)) {
linedat = read.csv(paste0("TWmap/TWmap/編號", Tainan.mapdat[i,1], ".csv"), header = TRUE, fileEncoding = 'CP950')
n.sample = sum(subdat[,16] == as.character(Tainan.mapdat[i,2]))
if (n.sample == 0) {COL = "#FFFFFF"}
else if (n.sample <= 3) {COL = "#000099"}
else if (n.sample <= 10) {COL = "#00FEFF"}
else if (n.sample <= 30) {COL = "#45FE4F"}
else if (n.sample <= 50) {COL = "#FCFF00"}
else if (n.sample <= 100) {COL = "#FF9400"}
else {COL = "#FF3100"}
polygon(linedat[,1], linedat[,2], col = COL)
}lat = c(22.88751, 23.41373)
lon = c(120.023, 120.6562)
plot.new()
plot.window(xlim = lon, ylim = lat)
for (i in 1:nrow(Tainan.mapdat)) {
linedat = read.csv(paste0("TWmap/TWmap/編號", Tainan.mapdat[i,1], ".csv"), header = TRUE, fileEncoding = 'CP950')
n.sample = sum(subdat[,16] == as.character(Tainan.mapdat[i,2]))
if (n.sample == 0) {COL = "#FFFFFF80"}
else if (n.sample <= 3) {COL = "#00009980"}
else if (n.sample <= 10) {COL = "#00FEFF80"}
else if (n.sample <= 30) {COL = "#45FE4F80"}
else if (n.sample <= 50) {COL = "#FCFF0080"}
else if (n.sample <= 100) {COL = "#FF940080"}
else {COL = "#FF310080"}
polygon(linedat[,1], linedat[,2], col = COL)
}MysubMap = GetMap(center = center, zoom = zoom, maptype = "satellite", API_console_key = 'AIzaSyA4DVFtF70aXE7RgrXViy2z5Ku2pMkVxFI')
PlotOnStaticMap(MysubMap)
for (i in 1:nrow(Tainan.mapdat)) {
linedat = read.csv(paste0("TWmap/TWmap/編號", Tainan.mapdat[i,1], ".csv"), header = TRUE, fileEncoding = 'CP950')
n.sample = sum(subdat[,16] == as.character(Tainan.mapdat[i,2]))
if (n.sample == 0) {COL = "#FFFFFF80"}
else if (n.sample <= 3) {COL = "#00009980"}
else if (n.sample <= 10) {COL = "#00FEFF80"}
else if (n.sample <= 30) {COL = "#45FE4F80"}
else if (n.sample <= 50) {COL = "#FCFF0080"}
else if (n.sample <= 100) {COL = "#FF940080"}
else {COL = "#FF310080"}
PlotOnStaticMap(MysubMap, lat = linedat[,2], lon = linedat[,1], FUN = polygon, add = TRUE, col = COL)
}– 假定你希望呈現整個9月份『逐日』的『累積個案散布圖』,你有辦法熟練得操作你的畫圖技術了嗎?