破產版地鐵線路圖:函數
出發地點和目的地點分別有3個,如上圖所示。測試
構造路線規劃函數:code
metro<-function(x,y) { library(geosphere) #各地鐵站點線路/名稱/經緯度信息 line<-c("5號線","5號線","5號線","5號線","5號線","5號線","1號線","1號線","1號線","1號線","3號線","3號線","3號線","3號線") site<-c("動物園","楊箕","五羊村","珠江新城","獵德","潭村","烈士陵園","東山口","楊箕","體育西路","林和西","體育西路","珠江新城","廣州塔") gis<-list(c(113.313789,23.140626),c(113.314324,23.132405),c(113.320796,23.125771),c(113.327704,23.12521),c(113.338879,23.124341),c(113.352569,23.123054),c(113.292203,23.132937),c(113.301887,23.130145),c(113.314324,23.132405),c(113.328014,23.136916),c(113.330345,23.147148),c(113.328014,23.136916),c(113.327704,23.12521),c(113.329788,23.112006)) n<-length(gis) #入口站點匹配 enterdata<-vector() startplace<-x for(i in 1:n) { enterpoint<-gis[[i]] dist<-distVincentySphere(startplace,enterpoint) enterdata[i]<-dist next } startline<-line[which.min(enterdata)] startplace<-site[which.min(enterdata)] #出口站點匹配 outdata<-vector() endplace<-y for(i in 1:n) { outpoint<-gis[[i]] dist<-distVincentySphere(endplace,outpoint) outdata[i]<-dist next } endline<-line[which.min(outdata)] endplace<-site[which.min(outdata)] #是否須要換乘 if(startline == endline) {print(paste(startline,startplace,"入站",",",endline,endplace,"出站"))} else if(((startline == "5號線")||(startline == "1號線")) & ((endline == "5號線")||(endline =="1號線"))) {print(paste(startline,startplace,"入站",",","楊箕站換乘",",",endline,endplace,"出站"))} else if(((startline == "3號線")||(startline == "1號線")) & ((endline == "3號線")||(endline =="1號線"))) {print(paste(startline,startplace,"入站",",","體育西路站換乘",",",endline,endplace,"出站"))} else {print(paste(startline,startplace,"入站",",","珠江新城站換乘",",",endline,endplace,"出站"))} }
測試一:圖片
a<-c(113.316538,23.139376) #出發地點一 b<-c(113.348446,23.122376) #到達地點一 metro(a,b) [1] "5號線 動物園 入站 , 5號線 潭村 出站"
測試二:it
a<-c(113.316673,23.138894) #出發地點二 b<-c(113.32871,23.112256) #出發地點二 metro(a,b) [1] "5號線 動物園 入站 , 珠江新城站換乘 , 3號線 廣州塔 出站"
測試三:io
a<-c(113.329092,23.147646) #出發地點三 b<-c(113.326204,23.122742) #到達地點三 metro(a,b) [1] "3號線 林和西 入站 , 珠江新城站換乘 , 5號線 珠江新城 出站"