R實例:實現簡單地鐵路線推薦

破產版地鐵線路圖:函數

輸入圖片說明

出發地點和目的地點分別有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號線 珠江新城 出站"
相關文章
相關標籤/搜索