程式說明
rm(list=ls(all=TRUE))
library(readr)
library(leaflet)
#命名為data將格式改成dataframe
data = read_csv("https://data.moenv.gov.tw/api/v2/aqx_p_432?api_key=e8dd42e6-9b8b-43f8-991e-b3dee723a52d&limit=1000&sort=ImportDate%20desc&format=CSV")
data = as.data.frame(data)
colnames(data)=c('測站名稱','縣市','空氣品質指標','空氣污染指標物','狀態','二氧化硫(ppb)',
'一氧化碳(ppm)','臭氧(ppb)','臭氧8小時移動平均(ppb)','pm10','pm2.5','二氧化氮(ppb)',
'氮氧化物(ppb)','一氧化氮(ppb)','風速(m/sec)',
'風向','資料發布時間','一氧化碳8小時移動平均(ppm)',
'pm2.5_avg','pm10_avg','二氧化硫移動平均值(ppb)',
'經度','緯度','測站編號')
cols=c('測站名稱','縣市','空氣品質指標','空氣污染指標物','狀態','二氧化硫(ppb)',
'一氧化碳(ppm)','臭氧(ppb)','pm10','pm2.5','二氧化氮(ppb)',
'氮氧化物(ppb)','一氧化氮(ppb)','風速(m/sec)',
'風向','資料發布時間','經度','緯度','測站編號')
data=data[cols]
- 將各個字串使用paste0連接再一起
- 創建一個Leaflet地圖,並使用addTiles()添加底圖,addCircles()則是根據提供的經緯度,在地圖上添加標記,並將popup的內容家在彈出窗口
data$popup = paste0("測站名稱:", data$地點, "<br>",
"縣市:", data$縣市, "<br>",
"空氣品質指標:", data$空氣品質指標, "<br>",
"空氣汙染指標物:", data$空氣汙染指標物, "<br>",
"狀態:", data$狀態, "<br>",
"二氧化硫(ppb):", data$"二氧化硫(ppb)", "<br>",
"一氧化碳(ppm):", data$"一氧化碳(ppm)", "<br>",
"臭氧:", data$"臭氧(ppb)", "<br>",
"pm10:", data$pm10, "<br>",
"pm2.5:", data$"pm2.5", "<br>",
"二氧化氮(ppb):", data$"二氧化氮(ppb)", "<br>",
"氮氧化物(ppb):", data$"氮氧化物(ppb)", "<br>",
"一氧化氮(ppb):", data$"一氧化氮(ppb)", "<br>",
"風速(m/sec):", data$"風速(m/sec)", "<br>",
"風向:", data$"風向", "<br>",
"資料發布時間:", data$資料發布時間, "<br>",
"測站編號:", data$測站編號)
map1 = leaflet() %>%
addTiles() %>%
# 使用 addTiles() 函數添加 tiles,
# 並使用默認參數默認即是 OpenStreetMap,
# 即街區 Tiles。
addCircles(data=data,
lng=~經度,
lat=~緯度,
popup=~popup)
- 將狀態良好、普通、對敏感族群不健康換成數值1,2,3
#將狀態良好、普通、對敏感族群不健康換成數值1,2,3
#使用狀態變數來建立顏色區間
#colorBin函數來定義一個顏色對應的物件,palette是用於指定對應顏色的調色盤,bin是用於指定調色盤的分段數
data$狀態_n <- factor(data$狀態, levels=c("良好", "普通", "對敏感族群不健康"), labels=c(1, 2, 3))
data$狀態_n <- as.numeric(data$狀態_n)
pal_狀態 = leaflet::colorBin(palette=c("blue", "red", "green"),
domain=data$狀態_n,
bins=3)
- 地圖map2根據狀態_n的值使用調色盤來設置標記的顏色
map2 = leaflet() %>%
addTiles() %>%
addCircles(data=data,
lng=~經度,
lat=~緯度,
radius=2,
color=~pal_狀態(狀態_n),
fillOpacity=1,
popup=~popup)
- 創建一個towns_color利用縣市的唯一值對應顏色,topo.colors()根據縣市數量生成一系列的顏色
#alpha設置顏色透明度topo.colors()根據縣市數量生成一系列的顏色
#leaflet::colorFactor是創建顏色因子
alpha = 0.9
towns_color = data.frame("town"=unique(data$縣市),
"color"=topo.colors(length(unique(data$縣市)), alpha=alpha))
pal_地區 = leaflet::colorFactor(palette=towns_color$color,
domain=towns_color$town)
map3 = leaflet() %>%
addTiles() %>%
addCircles(data=data,
lng=~經度,
lat=~緯度,
color=~pal_地區(縣市),
radius=2,
fillOpacity=alpha,
popup=~popup) %>%
addLegend(position="topright", pal=pal_地區, values=data$縣市)
- 寫入png圖像的函數將儲存在電腦中的logo路徑寫入
#png套件將儲存在電腦中的logo路徑寫入
library(png)
logo="C:/unep-aqms-logo.png"
icon = leaflet::makeIcon(logo,
iconWidth=12,
iconHeight=12)
map4 = leaflet() %>%
addTiles() %>%
addMarkers(data=data,
lng=~經度,
lat=~緯度,
icon=icon,
popup=~popup)
logo = "C:/unep-aqms-logo.png"
icon = leaflet::makeIcon(logo,
iconWidth=12,
iconHeight=12)
#clusterOptions=markerClusterOptions()將相鄰的標記點組合成聚類群組
map5 = leaflet() %>%
addTiles() %>%
addMarkers(data=data,
lng=~經度,
lat=~緯度,
icon=icon,
popup=~popup,
clusterOptions=markerClusterOptions())