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号线 珠江新城 出站"
相关文章
相关标签/搜索