擷取麥當勞店家位置
1. 以台北市為範圍,麥當勞 1 km為服務範圍內所涵蓋的麥當勞分店數,定義為該家麥當勞店家的連鎖密度,請問哪一家麥當勞的連鎖密度最高? 繪製在地圖上,並標示該店家名稱。
2. 以台北市為範圍,麥當勞 1 km為服務範圍。以台北市各里中心點是否在涵蓋該麥當勞的服務範圍,作為判斷該麥當勞是否能服務到該里的標準。請問哪個里可被麥當勞服務的家數最多?繪製在地圖上,並標示該里的位置及可及的麥當勞店家。
*初步環境建置與讀取檔案
library(sf);library(tmap);library(dplyr);library(units) setwd("D:/1092SA/Data") TPE=st_read("Taipei_Vill.shp", options="ENCODING=BIG5") FF=st_read("Tpe_Fastfood.shp", options="ENCODING=BIG5") MC=FF[FF$STORE=="MIC",] dist=1000
- 連鎖密度最高的麥當勞
#way 1. Buffer + Clip MC.buffer=st_buffer(MC,dist) MC.den=c() for(i in 1:nrow(MC)) MC.den[i]=nrow(MC[MC.buffer[i,],]) MC.MAX=MC[which.max(MC.den),] #way 2. Buffer + Intersect MC.buffer=st_buffer(MC,dist) MC.inter=st_intersection(MC.buffer,MC) #或st_join MC.table=as.data.frame(xtabs(~ID,MC.inter)) MC.MAX.ID=MC.table$ID[which.max(MC.table$Freq)] MC.MAX=MC[MC$ID==MC.MAX.ID,] #way 3. Distance MC.dist=st_distance(MC) MC.dist.mat=MC.dist<set_units(1,km) MC.den=apply(MC.dist.mat,1,sum) MC.MAX=MC[which.max(MC.den),] #way 4. WithinDistance(list) MC.WD=st_is_within_distance(MC,dist=dist) MC.den=unlist(lapply(MC.WD,length)) MC.MAX=MC[which.max(MC.den),] #way 5. WithinDistance(matrix) MC.WD=st_is_within_distance(MC,dist=dist,sparse = F) MC.den=apply(MC.WD,1,sum) MC.MAX=MC[which.max(MC.den),] #PLOT TPE.TOWN=summarize(group_by(TPE, TOWN)) tm_shape(TPE.TOWN)+tm_polygons()+ tm_shape(MC)+tm_dots(col='blue',size=.2)+ tm_shape(MC.MAX)+tm_dots(col='red',size=1)+ tm_layout(frame=F)
## [1] "麥當勞(台北館前)"
- 可被麥當勞服務的家數最多的村里
TP=st_centroid(TPE) #way 1. Buffer + Clip TP.MC=c() for(i in 1:nrow(TP)) TP.MC[i]=nrow(MC.buffer[TP[i,],]) TP.MAX=TP[which.max(TP.MC),] TP.MAX.MC=MC.buffer[TP.MAX,] #way 2. Buffer + Intersect TP.MC.inter=st_intersection(MC.buffer,TP) #或st_join TP.table=as.data.frame(xtabs(~V_ID,TP.MC.inter)) TP.MAX.ID=TP.table$V_ID[which.max(TP.table$Freq)] TP.MAX=TP[TP$V_ID==TP.MAX.ID,] TP.MAX.MC=TP.MC.inter[TP.MC.inter$V_ID==TP.MAX.ID,] #way 3. Distance TP.MC.dist=st_distance(TP,MC) TP.MC.dist.mat=TP.MC.dist<set_units(1,km) TP.MC.count=apply(TP.MC.dist.mat,1,sum) id=which.max(TP.MC.count) TP.MAX=TP[id,] TP.MAX.MC=MC[TP.MC.dist.mat[id,],] #way 4. WithinDistance(list) TP.MC.WD=st_is_within_distance(TP,MC,dist=dist) TP.MC.count=unlist(lapply(TP.MC.WD,length)) id=which.max(TP.MC.count) TP.MAX=TP[id,] TP.MAX.MC=MC[TP.MC.WD[[id]],] #way 5. WithinDistance(matrix) TP.MC.WD.mat=st_is_within_distance(TP,MC,dist=dist,sparse=F) TP.MC.count=apply(TP.MC.WD.mat,1,sum) id=which.max(TP.MC.count) TP.MAX=TP[id,] TP.MAX.MC=MC[TP.MC.WD.mat[id,],] #PLOT TPE.MAX=TPE[TPE$V_ID==TP.MAX$V_ID,] tmap1=tm_shape(TPE)+tm_polygons()+ tm_shape(TPE.MAX)+tm_polygons(col='red',size=.5)+ tm_shape(TP.MAX.MC)+tm_dots(col='blue',size=.2)+ tm_layout(frame=F) tmap2=tm_shape(TP.MAX.MC)+tm_dots(col='blue',size=.2)+ tm_shape(TPE.MAX)+tm_polygons(col='red',size=.5,alpha = 0.5)+ tm_shape(TPE)+tm_borders()+ tm_layout(frame=F) tmap_arrange(tmap1,tmap2,ncol=2,nrow=1)
## [1] "正得里"
#Q1
DAAN=TPE[TPE$TOWN=="大安區",]
FF.DAAN=FF[DAAN,] #在大安區的速食店
xtabs(~STORE,FF.DAAN)
## STORE
## KFC MIC
## 2 11
#Q2
FF.TP=st_intersection(FF,TPE)
xtabs(~TOWN+STORE,FF.TP)
## STORE
## TOWN KFC MIC
## 士林區 2 8
## 大同區 1 3
## 大安區 2 11
## 中山區 4 9
## 中正區 2 8
## 內湖區 2 5
## 文山區 1 7
## 北投區 1 5
## 松山區 2 8
## 信義區 1 8
## 南港區 0 3
## 萬華區 2 3
#Q3
M=FF[FF$STORE=="MIC",]
M.1k.sep=st_buffer(M,1000)
M.1k=st_union(M.1k.sep)
tm_shape(M.1k)+tm_polygons()+tm_shape(M)+tm_dots()