lots of small tweaks..

This commit is contained in:
Johnson Chetty 2012-04-30 09:50:40 +02:00
parent 343dd334f1
commit b3f704c913
11 changed files with 521 additions and 73523 deletions

View File

@ -6,7 +6,7 @@ import csv
import sys import sys
import datetime import datetime
from itertools import dropwhile from itertools import dropwhile
import copy
def routeWithLocationData(route): def routeWithLocationData(route):
@ -102,6 +102,7 @@ def getCompleteRoutes():
rset = set() rset = set()
for rs in RouteSchedule.objects.select_related(): for rs in RouteSchedule.objects.select_related():
if not( rs.runtime1 and rs.runtime2 and rs.runtime3 and rs.runtime4 and rs.headway1 and rs. headway2 and rs.headway3 and rs.headway4 and rs.headway5 and rs.first_from and rs.first_to and rs.last_from and rs.last_to): if not( rs.runtime1 and rs.runtime2 and rs.runtime3 and rs.runtime4 and rs.headway1 and rs. headway2 and rs.headway3 and rs.headway4 and rs.headway5 and rs.first_from and rs.first_to and rs.last_from and rs.last_to):
#if rs.runtime1 is None or rs.runtime2 is None or rs.runtime3 is None or rs.runtime4 is None or rs.headway1 is None or rs. headway2 is None or rs.headway3 is None or rs.headway4 is None or rs.headway5 is None or rs.first_from is None or rs.first_to is None or rs.last_from is None or rs.last_to is None: #if rs.runtime1 is None or rs.runtime2 is None or rs.runtime3 is None or rs.runtime4 is None or rs.headway1 is None or rs. headway2 is None or rs.headway3 is None or rs.headway4 is None or rs.headway5 is None or rs.first_from is None or rs.first_to is None or rs.last_from is None or rs.last_to is None:
try: try:
rset.remove(rs.unique_route.route) rset.remove(rs.unique_route.route)
@ -153,16 +154,22 @@ def rindex(lst, item):
def make_csv_writer(filename): def make_csv_writer(filename):
return csv.writer(open(join(PROJECT_ROOT, "gtfs", "gtfs_mumbai_bus", filename), "w"), delimiter=",", quotechar='"', quoting=csv.QUOTE_MINIMAL) return csv.writer(open(join(PROJECT_ROOT, "gtfs", "gtfs_mumbai_bus", filename), "w"), delimiter=",", quotechar='"', quoting=csv.QUOTE_MINIMAL)
def export_feed_info():
f = make_csv_writer("feed_info.txt")
f.writerow(["feed_publisher_name","feed_publisher_url","feed_lang","feed_start_date","feed_end_date","feed_version"])
f.writerow(["ChaloBEST","http://chalobest.in","en","20120301","20120630","0.31"])
def export_routes(routebeer): def export_routes(routebeer):
#routebeer = getRoutesHavingAlLocs() #routebeer = getRoutesHavingAlLocs()
f = make_csv_writer("routes.txt") f = make_csv_writer("routes.txt")
f.writerow(["route_id" ,"route_short_name","route_long_name","route_type"]) f.writerow(["route_id","agency_id","route_short_name","route_long_name","route_type"])
for route in routebeer: for route in routebeer:
try: try:
# data checks here # data checks here
f.writerow([route.code,route.alias[0:3],route.from_stop_txt + " - " + route.to_stop_txt,3]) f.writerow([route.code,"BEST",route.alias[0:3],route.from_stop_txt + " - " + route.to_stop_txt,3])
except: except:
pass pass
@ -182,7 +189,7 @@ def export_stops(routelist):
# data checks here # data checks here
# stop_code is used for stop_id as its BEST specfic # stop_code is used for stop_id as its BEST specfic
if stop.point: if stop.point:
f.writerow([stop.code,stop.name,stop.point.coords[1],stop.point.coords[0]]) f.writerow([str(stop.code),stop.name,stop.point.coords[1],stop.point.coords[0]])
except: except:
print "error for writerow", stop.__dict__, stop.point.coords print "error for writerow", stop.__dict__, stop.point.coords
@ -193,7 +200,7 @@ def export_agency():
# also # also
f.writerow(["agency_id", "agency_name","agency_url","agency_timezone","agency_lang"]) f.writerow(["agency_id", "agency_name","agency_url","agency_timezone","agency_lang"])
f.writerow(["BEST","BrihanMumbai Electric Supply & Transport Undertaking","http://www.bestundertaking.com/","Asia/Kolkata","en"]) f.writerow(["BEST","BEST","http://www.bestundertaking.com/","Asia/Kolkata","en"])
#f.writerow(["agency_id" ,"agency_name","agency_url","agency_timezone"]) #f.writerow(["agency_id" ,"agency_name","agency_url","agency_timezone"])
#f.writerow([1 ,"BEST","www.chalobest.in","Asia/Kolkata"]) #f.writerow([1 ,"BEST","www.chalobest.in","Asia/Kolkata"])
@ -238,6 +245,8 @@ def export_calendar():
try: try:
# data checks here # data checks here
running = [1 if day in ss['days'] else 0 for day in range(1,8)] running = [1 if day in ss['days'] else 0 for day in range(1,8)]
#if 8 in ss['days']:
# add_caldate(service_id)
# ternary operation :::: ('false','true')[condition] # ternary operation :::: ('false','true')[condition]
f.writerow([ss['code']] + running + [start_date,end_date]) f.writerow([ss['code']] + running + [start_date,end_date])
except: except:
@ -274,25 +283,44 @@ def generate_trips_unr(n=None):
days = schedule.schedule_type days = schedule.schedule_type
for direction in ("UP","DOWN"): for direction in ("UP","DOWN"):
trip_id = "%s_%s_%s_%s" %(route.code,unr.id,days, direction) trip_id = "%s_%s_%s_%s" %(route.code,schedule.id,days, direction)
#triplist.append([schedule, route, direction, trip_id]) #triplist.append([schedule, route, direction, trip_id])
yield schedule, unr, route, direction, trip_id yield schedule, unr, route, direction, trip_id
def getOverlappingSchedules():
ret = []
for unr in UniqueRoute.objects.all().select_related():
sched_types = unr.routeschedule_set.values('schedule_type').distinct()
for s in sched_types:
qset = unr.routeschedule_set.filter(schedule_type=s['schedule_type'])
if qset.count() > 1:
rows = [schedule.__dict__ for schedule in qset]
ret.append(rows)
return ret
def getRoutesWOverlappingSchedules(): def getRoutesWOverlappingSchedules():
count = 0 count = 0
rslist=[] rslist=[]
cnt=0
#return a list of unrs and rs's which have colliding schedule_type #return a list of unrs and rs's which have colliding schedule_type
for unr in UniqueRoute.objects.all(): for unr in UniqueRoute.objects.all():
ulist = unr.routeschedule_set.all() ulist = unr.routeschedule_set.all()
stlist=[]
rslst = [] rslst = []
for rs in ulist: for rs in ulist:
if rs.schedule_type: if rs.schedule_type:
rslst.append((rs, rs.schedule_type)) rslst.append((rs, rs.schedule_type))
stlist.append(rs.schedule_type)
else:
cnt+=1
rsset=[] rsset=[]
for rs in ulist: for rs in ulist:
if rs.schedule_type and (rs, rs.schedule_type) not in rsset: if rs.schedule_type and (rs, rs.schedule_type) not in rsset:
rsset.append((rs, rs.schedule_type)) rsset.append((rs, rs.schedule_type))
@ -345,7 +373,7 @@ def export_trips(routelist):
def getserial(rdlist,stop,getFirstStop=True): def getserial(rdlist,stop,getFirstStop=True):
#check if rdlist is of a ring route.. #check if rdlist is of a ring route..
if rdlist[0].route.code[3] in ['R','4'] : if rdlist[0].route.code[3] in ['R','4']:
# write ring specific code here. rings have multiple occuring stops, which one to choose?? # write ring specific code here. rings have multiple occuring stops, which one to choose??
pass pass
#return None #return None
@ -353,100 +381,133 @@ def getserial(rdlist,stop,getFirstStop=True):
if(rd.stop==stop): if(rd.stop==stop):
return rdlist.index(rd) return rdlist.index(rd)
def get_routedetail_subset(unr, direction,rdlist): reversed_rds=[]
""" mismatched_unrs={"from":[], "to":[]}
1. rdlist is mandatory as up down routes have diff orderings as per trip multiple_to_stops=[]
def get_routedetail_subset(unr, direction):
""" """
"""
from_stop = unr.from_stop from_stop = unr.from_stop
to_stop = unr.to_stop to_stop = unr.to_stop
code= str(unr.route.code)[3] code=str(unr.route.code)[3]
rdlist = list(RouteDetail.objects.filter(route=unr.route).order_by("serial"))
""" if direction in ["UP", "up", "U"]:
# Sometimes to_stop comes before from_stop in RouteDetail.
# So reverse the list if that happens.. so a from_stop will always come before a to_stop
for detail in details:
if detail.stop.id == from_stop: break
if detail.stop.id == to_stop:
details.reverse()
break
if direction == "UP":
rdlist = list(RouteDetail.objects.filter(route=route).order_by("serial"))
lst = [] lst = []
for rd in rdlist: for rd in rdlist:
if rd.stop.dbdirection == '' or rd.stop.dbdirection == 'U' or rd.stop==unr.from_stop or rd.stop==unr.to_stop : if rd.stop.dbdirection == '' or rd.stop.dbdirection == 'U' or rd.stop==unr.from_stop or rd.stop==unr.to_stop:
lst.append(rd) lst.append(rd)
rdlist = lst
details = get_routedetail_subset(unr, direction, rdlist)
else: else:
rdlist = list(RouteDetail.objects.filter(route=route).order_by("-serial"))
lst = [] lst = []
for rd in rdlist: for rd in rdlist:
if rd.stop.dbdirection == '' or rd.stop.dbdirection == 'D' or rd.stop==unr.from_stop or rd.stop==unr.to_stop: if rd.stop.dbdirection == '' or rd.stop.dbdirection == 'D' or rd.stop==unr.from_stop or rd.stop==unr.to_stop:
lst.append(rd) lst.append(rd)
rdlist = lst rdlist = lst
# shorten the route if its a subset. # Sometimes to_stop comes before from_stop in RouteDetail.
details = get_routedetail_subset(unr, direction, rdlist) # So reverse the list if that happens.. so a from_stop will always come before a to_stop
for detail in rdlist:
""" if detail.stop.id == from_stop.id: break
if detail.stop.id == to_stop.id:
rdlist.reverse()
reversed_rds.append({"unr":unr, "dir":direction})
from_index = 0
to_index= 0
rdlist = list(rdlist)
# from stop
for rd in rdlist:
if(rd.stop==from_stop):
from_index = rdlist.index(rd)
break break
# to stop # get indexes
from_index = -1
to_index= -1
from_stop_found = 0
to_stop_found = 0
# from stop index
for rd in rdlist:
if(rd.stop.id==from_stop.id):
from_index = rdlist.index(rd)
from_stop_found=1
break
if from_stop_found == 0:
print "From-Stop not found in Route Details for unr.id", unr.id, "unr.from_stop_txt=", unr.from_stop_txt , str(unr.__dict__)
mismatched_unrs['from'].append({"unr":str(unr.__dict__), "route":unr.route})
# to stop index
for rd in rdlist: for rd in rdlist:
#go to the last iteration, gets last occurence of stop
if(rd.stop==to_stop): if(rd.stop==to_stop):
to_index = rdlist.index(rd) to_index = rdlist.index(rd)
to_stop_found+=1
# for ring routes there will be two occurences of the stop, so for
# remove break to see multiple occurences in g.multiple_to_stops
break
if to_stop_found>1:
multiple_to_stops.append({"unr":unr,"count":to_stop_found,"to_stop":unr.to_stop})
if to_stop_found == 0:
print "To-Stop not found in Route Details for unr.id", unr.id , " unr.to_stop_txt=", unr.to_stop_txt, str(unr.__dict__)
mismatched_unrs['to'].append({"unr":str(unr.__dict__), "route":unr.route})
# override any calculations if unique route is full, needed for ring
if not unr.is_full:
rd_subset = rdlist[from_index:to_index+1] rd_subset = rdlist[from_index:to_index+1]
else:
rd_subset = rdlist
# direction is being taken care of in
#if direction == "UP":
# pass
#else:
# rd_subset.reverse()
if code == 'R' or code == '4': if code == 'R' or code == '4':
# ring specific code here. # ring specific code here.
# converts the given ring route subset to double size. # converts the given ring route subset to double size.
if not unr.is_full: # if ring route subset
import copy #if False:# not (unr.from_stop.id !=rdlist[0].stop.id and unr.to_stop.id !=rdlist[len(rdlist)-1]).stop.id:
#import pdb #if not unr.is_full:
#pdb.set_trace()
rd_temp = copy.deepcopy(rd_subset) rd_temp = copy.deepcopy(rd_subset)
rd_temp.reverse() rd_temp.reverse()
rd_subset.extend(rd_temp[1:]) rd_subset.extend(rd_temp[1:])
# if route indexing is funny, then alert if not direction in ["UP", "up", "U"]:
rd_subset.reverse()
# if route indexing is anything less than 5 or negative, then alert
if (to_index - from_index) < 5: if (to_index - from_index) < 5:
print "Route::",unr.route.code , "from pos", from_index, " to pos ", to_index print "Route::",unr.route.code , "from pos", from_index, " to pos ", to_index
return rd_subset return rd_subset
def make_is_full():
fn=[]
for unr in UniqueRoute.objects.select_related().all():
maxdist = max(unr.route.uniqueroute_set.values_list('distance'))[0]
"""
if unr.distance==maxdist and not unr.is_full:
unr.is_full=True
unr.save()
if unr.distance==unr.route.distance and not unr.is_full:
unr.is_full=True
unr.save()
# imp bug in BEST data, if the max_distance of the atlas entries do not
# match the route.distance one of those is wrong
#if maxdist != unr.route.distance
# fn.append(unr)
"""
if unr.distance==maxdist:
unr.is_full=True
unr.save()
else:
unr.is_full=False
unr.save()
return fn
def runtime_in_minutes(schedule): def runtime_in_minutes(schedule):
"""
runtime returned is a single value and maybe would be more refined it would consider timespan.
"""
runtime = schedule.runtime1 or schedule.runtime2 or schedule.runtime3 or schedule.runtime4 runtime = schedule.runtime1 or schedule.runtime2 or schedule.runtime3 or schedule.runtime4
if runtime: return runtime if runtime: return runtime
t_from, t_to = schedule.first_from, schedule.first_to t_from, t_to = schedule.first_from, schedule.first_to
@ -455,6 +516,22 @@ def runtime_in_minutes(schedule):
return abs(t_from.hour * 60 + t_from.minute - return abs(t_from.hour * 60 + t_from.minute -
(t_to.hour * 60 + t_to.minute)) (t_to.hour * 60 + t_to.minute))
noLocsStops = []
def export_shapes():
f = make_csv_writer("shapes.txt")
f.writerow(["shape_id","shape_pt_lat","shape_pt_lon","shape_pt_sequence"])
for road in Road.objects.all():
ss = road.stop_set.all()
# --FIXME counter is giving a step count, stops however must be ordered by position in road before
counter = 1
for s in ss:
if s.point:
f.writerow(['road'+str(road.id),s.point.coords[1], s.point.coords[0],counter])
counter+=1
else:
noLocsStops.append(s.__dict__)
def export_stop_times(routelist): def export_stop_times(routelist):
@ -473,33 +550,20 @@ def export_stop_times(routelist):
for schedule, unr, route, direction, trip_id in generate_trips_unr(): for schedule, unr, route, direction, trip_id in generate_trips_unr():
if route not in routelist: continue if route not in routelist: continue
#if not unr.is_full: continue
#get route in sort_order based on UP or DOWN route #get route in sort_order based on UP or DOWN route
if direction == "UP": if direction == "UP":
rdlist = list(RouteDetail.objects.filter(route=route).order_by("serial")) details = get_routedetail_subset(unr, direction)
lst = []
for rd in rdlist:
if rd.stop.dbdirection == '' or rd.stop.dbdirection == 'U' or rd.stop==unr.from_stop or rd.stop==unr.to_stop:
lst.append(rd)
rdlist = lst
details = get_routedetail_subset(unr, direction, rdlist)
else: else:
rdlist = list(RouteDetail.objects.filter(route=route).order_by("serial")) details = get_routedetail_subset(unr, direction)
lst = []
for rd in rdlist:
if rd.stop.dbdirection == '' or rd.stop.dbdirection == 'D' or rd.stop==unr.from_stop or rd.stop==unr.to_stop:
lst.append(rd)
rdlist = lst
# shorten the route if its a subset.
details = get_routedetail_subset(unr, direction, rdlist)
# use interpolated distances # use interpolated distances
#details = parseDistancesForDetails(details, parse_stages=True) #details = parseDistancesForDetails(details, parse_stages=True)
if len(rdlist) < 5: if len(details) < 5:
print "rdlist not populated" print "rdlist not populated"
rdlistempty+=1 rdlistempty+=1
continue continue
@ -529,7 +593,7 @@ def export_stop_times(routelist):
tooslows+=1 tooslows+=1
#avgspeed=12.0/60.0 #avgspeed=12.0/60.0
if avgspeed > 50.0/60.0: if avgspeed > 30.0/60.0:
toofasts+=1 toofasts+=1
#avgspeed=50.0/60.0 #avgspeed=50.0/60.0
@ -566,7 +630,7 @@ def export_stop_times(routelist):
# Add 10 seconds to departure time # Add 10 seconds to departure time
dt = datetime.datetime.combine(today, arrival_time) + datetime.timedelta(seconds=10) dt = datetime.datetime.combine(today, arrival_time) + datetime.timedelta(seconds=10)
departure_time = dt.time() departure_time = dt.time()
f.writerow([trip_id,arrival_time.__str__().split(".")[0],departure_time.__str__().split(".")[0],detail.stop.code,sequence]) f.writerow([trip_id,arrival_time.__str__().split(".")[0],departure_time.__str__().split(".")[0],str(detail.stop.code),sequence+1])
blankstops=1 blankstops=1
prevstage = sequence prevstage = sequence
@ -588,20 +652,20 @@ def export_stop_times(routelist):
# first stop # first stop
if sequence == 0: if sequence == 0:
f.writerow([trip_id,initial_time,initial_time,detail.stop.code,sequence]) f.writerow([trip_id,initial_time,initial_time,str(detail.stop.code),sequence+1])
else: else:
# if this is the last stop in the route, then # if this is the last stop in the route, then
if sequence == len(details) - 1: if sequence == len(details) - 1:
arrival = initial_time.hour * 60 + initial_time.minute + runtime_in_minutes(schedule) + 5 arrival = initial_time.hour * 60 + initial_time.minute + runtime_in_minutes(schedule) + 7
arrival_time = "%02d:%02d:00" % (int(arrival/60), arrival % 60) arrival_time = "%02d:%02d:00" % (int(arrival/60), arrival % 60)
departure_time = "%02d:%02d:00" % (int(arrival/60), arrival % 60) departure_time = "%02d:%02d:00" % (int(arrival/60), arrival % 60)
f.writerow([trip_id,arrival_time,departure_time,detail.stop.code,sequence]) f.writerow([trip_id,arrival_time,departure_time,str(detail.stop.code),sequence+1])
else: else:
# if any other stop # if any other stop
f.writerow([trip_id,"","",detail.stop.code,sequence]) f.writerow([trip_id,"","",str(detail.stop.code),sequence+1])
print "Trips too fast::", toofasts print "Trips too fast::", toofasts
@ -1031,14 +1095,25 @@ def export_frequencies2(routelist):
f.writerow([trip_id,st_str, et_str, headway[span]*60]) f.writerow([trip_id,st_str, et_str, headway[span]*60])
def makeStopList():
import codecs
f =codecs.open(join(PROJECT_ROOT, "gtfs", "Stops.csv"), "w", "utf-8")
f.write("stop_id,stop_code,stop_name,marathi_name")
for s in Stop.objects.all():
if s.name_mr is None:
s.name_mr= ''
line = str(s.id) +"\t"+ str(s.code)+"\t" + str(s.name) + "\t" + s.name_mr
f.write(line+ "\n")
f.close()
def fire_up(routelist): def fire_up(routelist):
if not routelist: if not routelist:
routelist = getCompleteRoutes2() routelist = getCompleteRoutes2()
export_feed_info()
export_routes(routelist) export_routes(routelist)
export_stops(routelist) export_stops(routelist)
export_frequencies2(routelist) export_frequencies2(routelist)

View File

@ -1,2 +1,2 @@
agency_id,agency_name,agency_url,agency_timezone,agency_lang agency_id,agency_name,agency_url,agency_timezone,agency_lang
BEST,BrihanMumbai Electric Supply & Transport Undertaking,http://www.bestundertaking.com/,Asia/Kolkata,en BEST,BEST,http://www.bestundertaking.com/,Asia/Kolkata,en

View File

@ -1,19 +1,19 @@
service_id,monday,tuesday,wednesday,thursday,friday,saturday,sunday,start_date,end_date service_id,monday,tuesday,wednesday,thursday,friday,saturday,sunday,start_date,end_date
MS,1,1,1,1,1,1,0,20000101,20500101 MS,1,1,1,1,1,1,0,20120401,20120701
HOL,0,0,0,0,0,0,1,20000101,20500101 HOL,0,0,0,0,0,0,1,20120401,20120701
SUN,0,0,0,0,0,0,1,20000101,20500101 SUN,0,0,0,0,0,0,1,20120401,20120701
MF&HOL,1,1,1,1,1,0,0,20000101,20500101 MF&HOL,1,1,1,1,1,0,0,20120401,20120701
SAT,0,0,0,0,0,1,0,20000101,20500101 SAT,0,0,0,0,0,1,0,20120401,20120701
MF,1,1,1,1,1,0,0,20000101,20500101 MF,1,1,1,1,1,0,0,20120401,20120701
SH,0,0,0,0,0,0,1,20000101,20500101 SH,0,0,0,0,0,0,1,20120401,20120701
AD,1,1,1,1,1,1,1,20000101,20500101 AD,1,1,1,1,1,1,1,20120401,20120701
SAT&SUN,0,0,0,0,0,1,1,20000101,20500101 SAT&SUN,0,0,0,0,0,1,1,20120401,20120701
MS&HOL,1,1,1,1,1,1,0,20000101,20500101 MS&HOL,1,1,1,1,1,1,0,20120401,20120701
FW,1,1,1,1,1,1,1,20000101,20500101 FW,1,1,1,1,1,1,1,20120401,20120701
SAT/SH,0,0,0,0,0,1,1,20000101,20500101 SAT/SH,0,0,0,0,0,1,1,20120401,20120701
SAT&HOL,0,0,0,0,0,1,0,20000101,20500101 SAT&HOL,0,0,0,0,0,1,0,20120401,20120701
SAT&SH,0,0,0,0,0,1,1,20000101,20500101 SAT&SH,0,0,0,0,0,1,1,20120401,20120701
SAT/SUND&HOL,0,0,0,0,0,1,1,20000101,20500101 SAT/SUND&HOL,0,0,0,0,0,1,1,20120401,20120701
S/H,0,0,0,0,0,0,1,20000101,20500101 S/H,0,0,0,0,0,0,1,20120401,20120701
"SAT,SUN&HOL",0,0,0,0,0,1,1,20000101,20500101 "SAT,SUN&HOL",0,0,0,0,0,1,1,20120401,20120701
FH,0,0,0,0,1,0,0,20000101,20500101 FH,0,0,0,0,1,0,0,20120401,20120701

File diff suppressed because it is too large Load Diff

View File

@ -1,314 +1,2 @@
route_id,route_short_name,route_long_name,route_type route_id,agency_id,route_short_name,route_long_name,route_type
0010,1,R.C.CHURCH - BND RECLAMATION BUS STN.,3 0010,BEST,1,R.C.CHURCH - BND RECLAMATION BUS STN.,3
0011,1LT,COLABA BUS STN. - SANTACRUZ DEPOT,3
0017,AS-,BACKBAY DEPOT - CADBURY JN.(THANE),3
0021,2LT,R.C.CHURCH - MAROL DEPOT,3
0027,AS-,BACKBAY DEPOT - DAHISAR BUS STN.,3
0030,3,NAVY NGR. - JIJAMATA UDN.,3
0032,3-E,NAVY NGR. - JIJAMATA UDN.,3
0037,AS-,NEHRU PLANETARIUM - CADBURY JN.(THANE),3
0041,4LT,HUTATMA CHK./MUMBAI UNIVERSITY - OSHIWARA DEPOT,3
0043,4LT,HUTATMA CHK./MUMBAI UNIVERSITY - VESAVA-YARI RD.BUS STN.,3
0047,AS-,BACKBAY DEPOT - OSHIWARA DEPOT,3
0050,5,MANTRALAYA - KURLA BUS STN (E),3
0057,AS-,BKC TEL.EXCHANGE - CADBURY JN.(THANE),3
0071,7LT,DR.SHAMAPRASAD MUKHERJI CHK. - VIKHROLI PARK SITE,3
0090,9,COLABA BUS STN. - NADKARNI PARK,3
0097,AS-,DR.SHAMAPRASAD MUKHERJI CHK. - GHATKOPAR STN.(E)-1,3
0116,SPA,NAVY NGR. - RANI LAXMIBAI CHK.,3
0138,A-1,BACKBAY DEPOT - HIRANANDANI EST.,3
0139,A-1,BACKBAY DEPOT - LODHA COMPLEX,3
0140,14,DR.SHAMAPRASAD MUKHERJI CHK. - PRATIKSHA NGR.DEPOT,3
0150,15,MANTRALAYA - PRATIKSHA NGR.DEPOT,3
0171,17L,BACKBAY DEPOT - VIDYA VIHAR BUS STN(W),3
0172,17 ,BACKBAY DEPOT - VIDYA VIHAR BUS STN(W),3
0201,20L,DR.SHAMAPRASAD MUKHERJI CHK. - SHIVAJI NGR.DEPOT,3
0221,22L,COLABA DEPOT - MAROL MAROSHI BUS STN.,3
0261,26L,MUMBAI CENTRAL DEPOT - MAHUL VILLAGE,3
0280,28,DR.SHAMAPRASAD MUKHERJI CHK. - J.V.P.D.BUS STN.,3
0301,30L,MUMBAI CENTRAL DEPOT - VIKHROLI DEPOT,3
0324,32 ,GOREGAON BUS STN(W) - GOREGAON BUS STN(W),3
0330,33,PT.PALUSKAR CHK. - GOREGAON BUS STN(W),3
0332,33-,WORLI DEPOT - GOREGAON BUS STN(W),3
0350,35,COM.P.K.KURNE CHK. - MAROL MAROSHI BUS STN.,3
0370,37,J.MEHTA MARG - KURLA STN (W),3
0401,40L,P.THAKRE UDN.BUS STN. - BORIVLI STN(E),3
0410,41,FERRY WHARF - KAMLA NEHRU PARK,3
0420,42,FERRY WHARF - KAMLA NEHRU PARK,3
0426,C-4,RANI LAXMIBAI CHK. - DADLANI PARK (THANE-W),3
0430,43,MAHARANA PRATAP CHK. - PRATIKSHA NGR.DEPOT,3
0436,C-4,RANI LAXMIBAI CHK. - MUMBRA POLICE STN.,3
0440,44,COLABA DEPOT - WORLI DEPOT,3
0442,44-,COLABA BUS STN. - FERRY WHARF,3
0460,46,FERRY WHARF - DHARAVI DEPOT,3
0480,48,FERRY WHARF - AUGUST KRANTI MAIDAN,3
0490,49,SWAMI D.SARASWATI CHK. - NADKARNI PARK,3
0510,51,COLABA BUS STN. - SANTACRUZ DEPOT,3
0526,C-5,WADALA DEPOT - KALAMBOLI BUS STN,3
0530,53,WORLI DEPOT - LOKMANYA TILAK TERMINUS,3
0541,54-,COLABA BUS STN. - SANTACRUZ DEPOT,3
0556,C-5,G.S.CLY. - JALVAYU VIHAR(KHARGHAR),3
0560,56,WORLI VILLAGE - VESAVA-YARI RD.BUS STN.,3
0580,58,WADALA TRUCK TERMINAL - KURLA BUS STN (E),3
0590,59,VEER KOTWAL UDN. (PLAZA) - KURLA BUS STN (E),3
0600,60,MAHARANA PRATAP CHK. - KURLA BUS STN (E),3
0606,C-6,DEONAR DEPOT - BORIVLI STN(E),3
0610,61,BALLARD PIER - MAHIM MACHHIMAR NGR.,3
0616,C-6,MULUND DEPOT - MIRA RD.STN.(E),3
0620,62,MUMBAI CENTRAL DEPOT - KURLA STN (W),3
0626,C-6,MULUND-W CHECK NAKA BUS STN. - GORAI DEPOT,3
0630,63,J.MEHTA MARG - CHUNABHATTI BUS TERMINUS,3
0640,64,BABULNATH - MAHESHWARI UDN.,3
0660,66,BALLARD PIER - RANI LAXMIBAI CHK.(BUS STN.),3
0661,66L,COLABA DEPOT - DHARAVI DEPOT,3
0680,68,NAVY NGR. - WORLI DEPOT,3
0690,69,DR.SHAMAPRASAD MUKHERJI CHK. - P.THAKRE UDN.BUS STN.,3
0708,A-7,NEHRU PLANETARIUM - MIRA RD.STN.(E),3
0710,71,BYCULLA STN.(W) - RAM GANESH GADKARI CHK.,3
0716,C-7,MAHIM BUS STN. - MIRA RD.STN.(E),3
0726,C-7,RANI LAXMIBAI CHK. - BHAYANDER STN.(E),3
0740,74,DR.SHAMAPRASAD MUKHERJI CHK. - MAHIM BUS STN.,3
0748,A-7,COLABA DEPOT - GOREGAON DEPOT,3
0758,A-7,COLABA DEPOT - HIRANANDANI GARDEN,3
0760,76,MANTRALAYA - DHARAVI DEPOT,3
0768,A-7,COLABA DEPOT - GORAI DEPOT,3
0778,A-7,BKC TEL.EXCHANGE - GORAI DEPOT,3
0801,80L,KAMLA NEHRU PARK - J.V.P.D.BUS STN.,3
0811,81L,MANTRALAYA - SANTACRUZ DEPOT,3
0820,82,MANTRALAYA - WORLI DEPOT,3
0841,84L,PT.PALUSKAR CHK. - OSHIWARA DEPOT,3
0850,85,WORLD TRADE CENTRE - KURLA BUS STN (E),3
0852,85-,HUTATMA CHK./MUMBAI UNIVERSITY - CHUNABHATTI BUS TERMINUS,3
0860,86,BACKBAY DEPOT - BANDRA BUS STN(W),3
0880,88,MANTRALAYA - PRATIKSHA NGR.DEPOT,3
0890,89,MANTRALAYA - WORLI DEPOT,3
0911,91L,MUMBAI CENTRAL DEPOT - KURLA STN (W),3
1004,100,"AHILYABAI HOLKAR CHK.,EROSS CINEMA - AHILYABAI HOLKAR CHK.",3
1010,101,COLABA DEPOT - WALKESHWAR,3
1030,103,R.C.CHURCH - KAMLA NEHRU PARK,3
1044,104,J.MEHTA MARG - J.MEHTA MARG,3
1060,106,R.C.CHURCH - KAMLA NEHRU PARK,3
1062,106,R.C.CHURCH - AHILYABAI HOLKAR CHK.,3
1100,110,COM.P.K.KURNE CHK. - SANGAM NGR.,3
1114,111,CHH. SHIVAJI TERMINUS(BHATIA) - CHH. SHIVAJI TERMINUS(BHATIA),3
1200,120,DAVA BAZAR(KALBADEVI) - PT.PALUSKAR CHK.,3
1210,121,BACKBAY DEPOT - J.MEHTA MARG,3
1220,122,BALLARD PIER - J.MEHTA MARG,3
1240,124,COLABA BUS STN. - WORLI DEPOT,3
1250,125,NAVY NGR. - WORLI VILLAGE,3
1260,126,MANTRALAYA - JIJAMATA UDN.,3
1300,130,DR.SHAMAPRASAD MUKHERJI CHK. - VASANTRAO NAIK CHK.,3
1324,132,COLABA BUS STN. - COLABA BUS STN.,3
1350,135,FERRY WHARF - J.MEHTA MARG,3
1372,137,NAVY NGR. - NAVY NGR.,3
1380,138,BACKBAY DEPOT - CHH. SHIVAJI TERMINUS(BHATIA),3
1510,151,J.MEHTA MARG - WADALA DEPOT,3
1540,154,BYCULLA STN.(W) - NEHRU PLANETARIUM,3
1554,155,GRANT RD STN.(W) - GRANT RD STN.(W),3
1574,157,GRANT RD STN.(W) - GRANT RD STN.(W),3
1630,163,P.THAKRE UDN.BUS STN. - WORLI DEPOT,3
1640,164,MAHARANA PRATAP CHK. - DHARAVI DEPOT,3
1680,168,LAL BAHADDUR SHASTRI COLLEGE - WADALA DEPOT,3
1700,170,ANTOP HILL EXTN. - RANI LAXMIBAI CHK.,3
1720,172,SANT GADGE MAHARAJ CHK. - PRATIKSHA NGR.DEPOT,3
1740,174,VEER KOTWAL UDN. (PLAZA) - BHARANI NAKA (ANTOP HILL),3
1800,180,RANI LAXMIBAI CHK.(BUS STN.) - MALVANI DEPOT/ GAIKWAD NGR.,3
1824,182,BANDRA RLY.TERMINUS - BANDRA RLY.TERMINUS,3
1827,AS-,BANDRA RLY.TERMINUS - BANDRA RLY.TERMINUS,3
2000,200,SHRAWAN YESHWANTE CHK. - SANTACRUZ DEPOT,3
2044,204,GOREGAON BUS STN(W) - GOREGAON BUS STN(W),3
2054,205,JOGESHWARI BUS STN - JOGESHWARI BUS STN,3
2060,206,POISAR DEPOT - I.C.CLY.,3
2101,210,VESAVA-YARI RD.BUS STN. - DAHISAR BRIDGE,3
2120,212,P.THAKRE UDN.BUS STN. - BANDRA BUS STN(W),3
2130,213,P.THAKRE UDN.BUS STN. - SANTACRUZ STN (E),3
2180,218,KURLA STN (W) - BANDRA RLY.TERMINUS,3
2200,220,BANDRA BUS STN(W) - KHAR STN (W),3
2210,221,ANDHERI STN.(W) (KUMKUM) - VESAVA-YARI RD.BUS STN.,3
2220,222,BANDRA BUS STN(W) - VESAVA-YARI RD.BUS STN.,3
2231,223,SEVEN BUNGALOWS BUS STN. - SAMATA NGR.BUS STN.(KANDIVLI-E),3
2240,224,SHASTRI NGR. - BORIVLI BUS STN(W),3
2290,229,SANTACRUZ DEPOT - SHANTI ASHRAM,3
2300,230,P.THAKRE NGR.BUS STN. - SAMBHAJI NGR.(DAHISAR-E),3
2344,234,JOGESHWARI BUS STN - JOGESHWARI BUS STN,3
2354,235,ANDHERI BUS STN.(W) - ANDHERI BUS STN.(W),3
2370,237,CHARKOP SECT.NO.8 - BORIVLI BUS STN(W),3
2390,239,POISAR DEPOT - CHARKOP SEC.NO.9/AKSHARA VIDYALAYA,3
2410,241,WADALA DEPOT - MALVANI DEPOT/ GAIKWAD NGR.,3
2424,242,ANDHERI BUS STN.(W) - ANDHERI BUS STN.(W),3
2444,244,KANDIVLI STN.(W) - KANDIVLI STN.(W),3
2464,246,KANDIVLI STN.(W) - KANDIVLI STN.(W),3
2474,247,BORIVLI BUS STN(W) - BORIVLI BUS STN(W),3
2490,249,ANDHERI STN.(W) (KUMKUM) - VESAVA-YARI RD.BUS STN.,3
2510,251,ANDHERI STN.(W) (KUMKUM) - VESAVA-YARI RD.BUS STN.,3
2540,254,ANDHERI STN.(W) ( M.A ) - VEERA DESAI RD.,3
2551,255,PRATIKSHA NGR.DEPOT - VESAVA-YARI RD.BUS STN.,3
2560,256,JUHU BEACH - MALVANI DEPOT/ GAIKWAD NGR.,3
2570,257,ANDHERI BUS STN.(W) - J.V.P.D.BUS STN.,3
2590,259,ANDHERI STN.(W) (KUMKUM) - GORAI DEPOT,3
2622,262,GOREGAON BUS STN(W) - GOREGAON BUS STN(W),3
2630,263,SADBHAKTI MANDIR - SEEPZ BUS STN.,3
2660,266,ANDHERI BUS STN.(W) - SHREE SWAMI SAMARTH NGR.EXT.,3
2710,271,MALAD STN-W(ANAND MARG CHKY) - MADH JETTY,3
2760,276,KANDIVLI STN.(W) - CHARKOP SECT.NO.8,3
2770,277,KANDIVLI STN.(W) - BORIVLI STN(W),3
2790,279,KANDIVLI STN.(W) - GORAI DEPOT,3
2820,282,KANDIVLI BUS STN.( E ) - DAMU NGR.EXTN.,3
2830,283,KANDIVLI STN.(W) - SANTOSH NGR.(KANDIVALI-W),3
2860,286,KANDIVLI STN.(W) - CHARKOP VILLAGE,3
2944,294,BORIVLI BUS STN(W) - BORIVLI BUS STN(W),3
3020,302,PRATIKSHA NGR.DEPOT - MAHARANA PRATAP CHK.(MULUND),3
3027,AS-,MAHIM BUS STN. - CADBURY JN.(THANE),3
3050,305,TARDEO BUS STN/RUSHI MEHTA CHK. - GHATKOPAR BUS STN./GKD,3
3061,306,SANTACRUZ STN (E) - MULUND RLY.STN.(W),3
3080,308,VIDYA VIHAR BUS STN(W) - MAJAS DEPOT/SHYAM NGR.,3
3082,308,VIDYA VIHAR BUS STN(W) - SAHAR CARGO COMPLEX,3
3091,309,KURLA STN (W) - GORAI DEPOT,3
3100,310,KURLA STN (W) - BANDRA RLY.TERMINUS,3
3120,312,PRATIKSHA NGR.DEPOT - SEEPZ BUS STN.,3
3130,313,KURLA STN (W) - SANTACRUZ STN (E),3
3200,320,KURLA STN (W) - FILTER PADA,3
3211,321,MAHIM BUS STN. - BARVE NGR.,3
3230,323,VIDYA VIHAR BUS STN(W) - SANGHARSH NGR.(CHANDIVLI),3
3290,329,SHIVAJI NGR.DEPOT - AGARKAR CHK.,3
3301,330,KURLA STN (W) - SEVEN BUNGALOWS BUS STN.,3
3320,332,KURLA STN (W) - MAJAS DEPOT/SHYAM NGR.,3
3330,333,NEW QTRS( CHAKALA CIGARETTE FACTORY - KONDIVTE CAVES/MAHAKALI CAVES,3
3340,334,GHATKOPAR STN.(W) - MAROL DEPOT,3
3350,335,AGARKAR CHK. - SANGHARSH NGR.(CHANDIVLI),3
3360,336,J.V.P.D.BUS STN. - VIDYA VIHAR BUS STN(W),3
3380,338,AGARKAR CHK. - SAHAR CARGO COMPLEX,3
3400,340,GHATKOPAR STN.(W) - AGARKAR CHK.,3
3402,340,BARVE NGR. - AGARKAR CHK.,3
3481,348,CHUNABHATTI BUS TERMINUS - DAHISAR BUS STN.,3
3490,349,KURLA STN (W) - SANTOSH NGR.EXTN.,3
3500,350,KURLA BUS STN (E) - SHIVAJI NGR.DEPOT,3
3520,352,TROMBAY - RANI LAXMIBAI CHK.,3
3551,355,TROMBAY - VESAVA-YARI RD.BUS STN.,3
3570,357,MUMBAI CENTRAL DEPOT - SHIVAJI NGR.DEPOT,3
3600,360,TROMBAY - KURLA BUS STN (E),3
3610,361,MAHUL VILLAGE - KURLA BUS STN (E),3
3620,362,DR.AMBEDKAR GARDEN/CHEMBUR STN. - KURLA BUS STN (E),3
3630,363,KURLA BUS STN (E) - MAHUL VILLAGE,3
3640,364,MAHUL VILLAGE - TROMBAY,3
3650,365,KURLA STN (W) - SAHAR CARGO COMPLEX,3
3660,366,KURLA BUS STN (E) - SHIVAJI NGR.TERMINUS,3
3670,367,GADKARI QUARRY - KURLA BUS STN (E),3
3681,368,P.THAKRE UDN.BUS STN. - MULUND DEPOT,3
3690,369,KURLA BUS STN (E) - VASHINAKA M.M.R.D.A.CLY.,3
3720,372,SHIVAJI NGR.TERMINUS - SHIVAJI NGR.DEPOT,3
3736,SPA,BND RECLAMATION BUS STN. - GAWANPADA,3
3780,378,TROMBAY - MANKHURD STN.(SOUTH),3
3790,379,SHIVAJI NGR.TERMINUS - GHATKOPAR STN.(E)-2,3
3800,380,TROMBAY - AMRUT NGR.,3
3810,381,GHATKOPAR BUS STN./GKD - TATA POWER CENTRE(CHEMBUR),3
3821,382,ANUSHAKTI NGR.BUS STN. - SAHAR CARGO COMPLEX,3
3830,383,GADKARI QUARRY - SHIVAJI NGR.DEPOT,3
3840,384,BANDRA BUS STN(W) - GHATKOPAR BUS STN./GKD,3
3850,385,TARDEO BUS STN/RUSHI MEHTA CHK. - GHATKOPAR BUS STN./GKD,3
3887,AS-,GHATKOPAR BUS STN./GKD - POISAR DEPOT,3
3904,390,GHATKOPAR STN.(W) - GHATKOPAR STN.(W),3
3920,392,VIKHROLI DEPOT - MAJAS DEPOT/SHYAM NGR.,3
3930,393,GHATKOPAR BUS STN./GKD - AAMCHI SHALA,3
3950,395,SANTACRUZ STN (E) - BAMANDAYA PADA,3
3961,396,MULUND-W CHECK NAKA BUS STN. - AGARKAR CHK.,3
3981,398,MULUND-W CHECK NAKA BUS STN. - DINDOSHI BUS STN.,3
3991,399,TROMBAY - MARATHON CHK.(TEEN HATH NAKA),3
4020,402,MULUND RLY.STN.(W) - VAISHALI NGR.,3
4040,404,GHATKOPAR STN.(E)-1 - SHIVAJI NGR.DEPOT,3
4060,406,GHATKOPAR STN.(E)-1 - RAILWAY POLICE CLY.(GHATKOPAR,3
4070,407,KELKAR COLLEGE - NIMKAR SCTY.,3
4080,408,MAHIM BUS STN. - MULUND RLY.STN.(W),3
4091,409,MULUND DEPOT - SAHAR CARGO COMPLEX,3
4100,410,VIKHROLI DEPOT - KONDIVTE CAVES/MAHAKALI CAVES,3
4141,414,MUMBAI CENTRAL DEPOT - MAJAS DEPOT/SHYAM NGR.,3
4150,415,AGARKAR CHK. - MAJAS DEPOT/SHYAM NGR.,3
4160,416,GHATKOPAR STN.(W) - AMRUT NGR.,3
4170,417,VIKHROLI PARK SITE - SURYA NGR.,3
4190,419,GHATKOPAR BUS STN./GKD - SANGHARSH NGR.(CHANDIVLI),3
4210,421,GHATKOPAR BUS STN./GKD - FILTER PADA,3
4212,421,GHATKOPAR BUS STN./GKD - MHADA CLY.(CHANDIVLI),3
4227,AS-,MULUND-W CHECK NAKA BUS STN. - AGARKAR CHK.,3
4230,423,MANGATRAM PETROLPUMP - MAROL DEPOT,3
4250,425,MANGATRAM PETROLPUMP - SEVEN BUNGALOWS BUS STN.,3
4260,426,VIDYA VIHAR BUS STN(W) - FILTER PADA,3
4290,429,GHATKOPAR STN.(W) - MILIND NGR.,3
4300,430,MAHUL VILLAGE - GHATKOPAR BUS STN./GKD,3
4310,431,KURLA BUS STN (E) - TATA POWER CENTRE(CHEMBUR),3
4330,433,VIDYA VIHAR BUS STN(W) - SANTACRUZ STN (E),3
4380,438,DINDOSHI BUS STN. - DAHISAR BUS STN.,3
4401,440,WADALA DEPOT - BORIVLI STN(E),3
4407,AS-,WADALA DEPOT - BORIVLI STN(E),3
4420,442,SADBHAKTI MANDIR - MHADA CLY.(MAJAS),3
4430,443,AGARKAR CHK. - BAMANDAYA PADA,3
4460,446,KURLA STN (W) - BAMANDAYA PADA,3
4481,448,PRATIKSHA NGR.DEPOT - BORIVLI STN(E),3
4491,449,DHARAVI DEPOT - KANDIVLI BUS STN.( E ),3
4504,450,GOREGAON STN(E) - GOREGAON STN(E),3
4587,AS-,MULUND DEPOT - P.THAKRE NGR.BUS STN.,3
4591,459,MULUND RLY.STN.(W) - MALVANI DEPOT/ GAIKWAD NGR.,3
4601,460,MULUND RLY.STN.(W) - GORAI DEPOT,3
4611,461,MULUND-W CHECK NAKA BUS STN. - P.THAKRE NGR.BUS STN.,3
4617,AS-,MULUND-W CHECK NAKA BUS STN. - BORIVLI BUS STN(W),3
4630,463,WORLI DEPOT - CHEMBUR CLY.,3
4641,464,MAROL DEPOT - P.THAKRE NGR.BUS STN.,3
4703,470,GHATKOPAR STN.(W) - AGARKAR CHK.,3
4781,478,VIKHROLI DEPOT - BORIVLI STN(E),3
4810,481,GHATKOPAR BUS STN./GKD - VASHINAKA M.M.R.D.A.CLY.,3
4841,484,MHADA CLY.BUS STN.(MULUND-E) - PAWAR NGR.BUS STN.(THANE),3
4881,488,SHIVAJI NGR.DEPOT - DINDOSHI DEPOT,3
4891,489,SHIVAJI NGR.DEPOT - DAHISAR BRIDGE,3
4911,491,SEEPZ BUS STN. - BRAHMAND AZAD NGR.BUS STN,3
4921,492,SEEPZ BUS STN. - WAGHBILGAON,3
4931,493,ANUSHAKTI NGR.BUS STN. - DADLANI PARK (THANE-W),3
4941,494,VIKHROLI DEPOT - RETI BUNDER - KHARIGAON(KALWA),3
4950,495,GAWANPADA FIRE BRIGADE(MULUND-E) - THANE STN.(E),3
4961,496,MARATHON CHK.(TEEN HATH NAKA) - AGARKAR CHK.,3
4971,497,GHATKOPAR BUS STN./GKD - LOKMANYA NGR.(THANE),3
4981,498,SANGHARSH NGR.(CHANDIVLI) - BORIVLI STN(E),3
4991,499,GHATKOPAR BUS STN./GKD - VRINDAVAN SCTY.(THANE),3
5001,500,VIKHROLI DEPOT - AIROLI BUS STN.,3
5011,501,KURLA BUS STN (E) - AIROLI BUS STN.,3
5021,502,WADALA DEPOT - NERUL SECT.-46/48,3
5037,AS-,WADALA DEPOT - KALAMBOLI BUS STN,3
5057,AS-,SANTACRUZ DEPOT - C.B.D. BELAPUR BUS STN.,3
5071,507,SANTACRUZ STN (E) - NERUL BUS STN.,3
5081,508,DR.AMBEDKAR GARDEN - NERUL SECT.-46/48,3
5111,511,MAHARANA PRATAP CHK.(MULUND) - NERUL BUS STN.,3
5121,512,MULUND-W CHECK NAKA BUS STN. - NERUL BUS STN.,3
5127,AS-,MULUND-W CHECK NAKA BUS STN. - NERUL RLY. STN.,3
5131,513,GAWANPADA FIRE BRIGADE(MULUND-E) - VASHI RAILWAY STN.,3
5157,AS-,SANTACRUZ DEPOT - C.B.D. BELAPUR BUS STN.,3
5161,516,DEONAR DEPOT - JALVAYU VIHAR(KHARGHAR),3
5171,517,SANTACRUZ STN (E) - VASHI SECT.19,3
5181,518,SHIVAJI NGR.DEPOT - GHANSOLI VILLAGE,3
5191,519,DEONAR DEPOT - GHANSOLI VILLAGE,3
5201,520,DEONAR DEPOT - AIROLI BUS STN.,3
5221,522,MAROL DEPOT - VASHI RAILWAY STN.,3
5231,523,DINDOSHI BUS STN. - MILLENNIUM BUSINESS PARK,3
5241,524,BORIVLI STN(E) - VASHI SECT.19,3
5251,525,DINDOSHI BUS STN. - VASHI SECT.19,3
5259,AS-,DINDOSHI BUS STN. - KOPAR KHAIRANE,3
5331,533,ANDHERI BUS STN.(W) - VASHI SECT.19,3
5517,AS-,AGARKAR CHK. - VASHI BUS STN.,3
6020,602,KANJUR MARG STN.(W) - HIRANANDANI POWAI BUS STN.,3
6080,608,KANJUR MARG STN.(W) - HANUMAN NGR.,3
6100,610,KURLA BUS STN (E) - BUNTARA BHAVAN,3
6110,611,MALAD STN-E(PODDAR PARK) - DINDOSHI BUS STN.,3
6150,615,RANI LAXMIBAI CHK. - SANTACRUZ STN (E),3
6240,624,MALAD STN-E(PODDAR PARK) - ANAND NAGAR (APPAPADA MALAD-E),3
6250,625,MALAD STN-E(PODDAR PARK) - ALIKA NGR.,3
6300,630,KHAR STN (W) - SANTACRUZ STN (W),3
6630,663,MAHUL VILLAGE - TROMBAY,3
7007,AS-,MAGATHANE DEPOT - THANE STN.(E),3
7021,702,BORIVLI STN(E) - GHODBUNDER VILLAGE,3
7071,707,SANTACRUZ DEPOT - BHAYANDER PHATAK(POLICE CHKY),3
7101,710,JAY MAHARASHTRANGR. - BHAYANDER RLY.STN.(W),3
7111,711,GORAI DEPOT - GORAI CREEK-W,3
8021,SPL,CHH. SHIVAJI TERMINUS(BHATIA) - WORLD TRADE CENTRE,3
8031,SPL,COLABA BUS STN. - MAHATMA PHULE MARKET,3
8041,SPL,CHH. SHIVAJI TERMINUS(BHATIA) - FREE PRESS HOUSE,3
8081,SPL,AHILYABAI HOLKAR CHK. - AHILYABAI HOLKAR CHK.,3
8111,811,BREACH CANDY HOSPITAL - BYCULLA STN.(W),3
8126,812,CHH. SHIVAJI TERMINUS - CHH. SHIVAJI TERMINUS,3
8136,813,CHH. SHIVAJI TERMINUS - CHH. SHIVAJI TERMINUS,3

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -10,8 +10,8 @@ def fix_distances():
# Sometimes to_stop comes before from_stop in RouteDetail. What is there to say. # Sometimes to_stop comes before from_stop in RouteDetail. What is there to say.
# so reverse the list if that happens.. so a from_stop will always come before a to_stop # so reverse the list if that happens.. so a from_stop will always come before a to_stop
for detail in details: for detail in details:
if detail.stop.id == from_stop: break if detail.stop.id == from_stop.id: break
if detail.stop.id == to_stop: if detail.stop.id == to_stop.id:
details.reverse() details.reverse()
break break
@ -86,6 +86,7 @@ def fix_missing_runtimes():
prev_runtime = getattr(schedule, columns[col_idx-1]) prev_runtime = getattr(schedule, columns[col_idx-1])
if prev_runtime: if prev_runtime:
setattr(schedule, column, prev_runtime) setattr(schedule, column, prev_runtime)
schedule.save()
continue continue
# ... or the next column, if it comes to that. # ... or the next column, if it comes to that.
@ -93,6 +94,7 @@ def fix_missing_runtimes():
next_runtime = getattr(schedule, columns[col_idx+1]) next_runtime = getattr(schedule, columns[col_idx+1])
if next_runtime: if next_runtime:
setattr(schedule, column, next_runtime) setattr(schedule, column, next_runtime)
schedule.save()
continue continue
# otherwise, go through the other schedules for this subroute and # otherwise, go through the other schedules for this subroute and
@ -101,6 +103,7 @@ def fix_missing_runtimes():
sibling_runtime = getattr(sibling, column) sibling_runtime = getattr(sibling, column)
if sibling_runtime: if sibling_runtime:
setattr(schedule, column, sibling_runtime) setattr(schedule, column, sibling_runtime)
schedule.save()
# print "OK fix_missing_runtimes: %s %s fixed to %s" % (schedule, column, sibling) # print "OK fix_missing_runtimes: %s %s fixed to %s" % (schedule, column, sibling)
break break
@ -121,6 +124,7 @@ def fix_missing_runtimes():
partial_runtime = related_runtime*float(schedule.unique_route.distance)/float(related_schedule.unique_route.distance) partial_runtime = related_runtime*float(schedule.unique_route.distance)/float(related_schedule.unique_route.distance)
# print "OK fix_missing_runtimes: %s %s adjusted to parent %s" % (schedule, column, related_schedule) # print "OK fix_missing_runtimes: %s %s adjusted to parent %s" % (schedule, column, related_schedule)
setattr(schedule, column, partial_runtime) setattr(schedule, column, partial_runtime)
schedule.save()
break break
# did we find a runtime? great, use it # did we find a runtime? great, use it
@ -138,6 +142,7 @@ def fix_missing_runtimes():
partial_runtime = related_runtime*float(schedule.unique_route.distance)/float(related_schedule.unique_route.distance) partial_runtime = related_runtime*float(schedule.unique_route.distance)/float(related_schedule.unique_route.distance)
# print "OK fix_missing_runtimes: %s %s adjusted to parent %s" % (schedule, column, related_schedule) # print "OK fix_missing_runtimes: %s %s adjusted to parent %s" % (schedule, column, related_schedule)
setattr(schedule, column, partial_runtime) setattr(schedule, column, partial_runtime)
schedule.save()
break break
if column != "runtime4": if column != "runtime4":
@ -165,6 +170,7 @@ def fix_missing_headways():
prev_headway = getattr(schedule, columns[col_idx-1]) prev_headway = getattr(schedule, columns[col_idx-1])
if prev_headway: if prev_headway:
setattr(schedule, column, prev_headway) setattr(schedule, column, prev_headway)
schedule.save()
continue continue
# ... or the next column, if it comes to that. # ... or the next column, if it comes to that.
@ -172,6 +178,7 @@ def fix_missing_headways():
next_headway = getattr(schedule, columns[col_idx+1]) next_headway = getattr(schedule, columns[col_idx+1])
if next_headway: if next_headway:
setattr(schedule, column, next_headway) setattr(schedule, column, next_headway)
schedule.save()
continue continue
#try any headway in the current row: #try any headway in the current row:
@ -179,6 +186,7 @@ def fix_missing_headways():
headway = getattr(schedule, hcol) headway = getattr(schedule, hcol)
if headway: if headway:
setattr(schedule, column, headway) setattr(schedule, column, headway)
schedule.save()
break break
if getattr(schedule, column): if getattr(schedule, column):
@ -189,6 +197,7 @@ def fix_missing_headways():
sibling_headway = getattr(sibling, column) sibling_headway = getattr(sibling, column)
if sibling_headway: if sibling_headway:
setattr(schedule, column, sibling_headway) setattr(schedule, column, sibling_headway)
schedule.save()
# print "OK fix_missing_headways: %s %s fixed to %s" % (schedule, column, sibling) # print "OK fix_missing_headways: %s %s fixed to %s" % (schedule, column, sibling)
break break
@ -202,6 +211,7 @@ def fix_missing_headways():
headway = getattr(sibling, hcol) headway = getattr(sibling, hcol)
if headway: if headway:
setattr(schedule, column, headway) setattr(schedule, column, headway)
schedule.save()
break_loop = True break_loop = True
break break
@ -222,11 +232,11 @@ def fix_missing_headways():
break break
if headway: if headway:
setattr(schedule, column, headway) setattr(schedule, column, headway)
schedule.save()
break_loop = True break_loop = True
break break
if getattr(schedule, column): if getattr(schedule, column):
continue continue

View File

@ -108,7 +108,7 @@ class StopAdmin(admin.OSMGeoAdmin):
class RouteDetailAdmin(admin.ModelAdmin): class RouteDetailAdmin(admin.ModelAdmin):
list_display = ("route_code","serial","stop","stage","km") list_display = ("route_code","serial","stop","stop_dir", "stage","km")
readonly_fields = ("route_code","serial","stop","stage","km") readonly_fields = ("route_code","serial","stop","stage","km")
search_fields = ("route_code","stop__name") search_fields = ("route_code","stop__name")
formfield_overrides = { formfield_overrides = {

View File

@ -260,6 +260,8 @@ class RouteDetail(models.Model):
def __unicode__(self): def __unicode__(self):
return str(self.route) + " : " + str(self.serial) return str(self.route) + " : " + str(self.serial)
def stop_dir(self):
return str(self.stop.dbdirection)
class UniqueRoute(models.Model): class UniqueRoute(models.Model):
route = models.ForeignKey(Route) route = models.ForeignKey(Route)