破产版地铁线路图:函数
出发地点和目的地点分别有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号线 珠江新城 出站"