def test_sim( route, zoom, image="images/train.png" ): time_window,bbox = find_bounds(route) def getLL(time): if time <= time_window[0]: return route[0][:2] elif time > time_window[1]: return route[-1][:2] for (lat1,lon1,time1),(lat2,lon2,time2) in zip(route[:-1],route[1:]): if time1 < time <= time2: break frac = (time-time1) / (time2-time1) lat = lat1 + frac * (lat2-lat1) lon = lon1 + frac * (lon2-lon1) return lat,lon viz = TrackingViz("Test Train", image, getLL, time_window, bbox, 1); sim = Simulation([viz],[],0) sim.run(speed=0,refresh_rate=0.1,osmzoom=zoom,windowsize=(600,600))
def test_GPS(route_short_name,rte=None,num=None): import GPSBusTrack as gps import GTFSBusTrack as gtfs if rte is None: rte = gps.Route(route_short_name); segs = [s for s in rte.segments(True)]; btsegs=[] for i,seg in enumerate(segs): if num and i>=num: break bt = gps.GPSBusTrack(seg); btv = BusTrackViz(bt,'test',"images/bus_small.png"); gtfs_trip_id,offset,error=bt.getMatchingGTFSTripID() bt2 = gtfs.GTFSBusTrack(gtfs_trip_id); print "BEST MATCHING TRIP ID: %s (error: %d)"%(bt2.trip_id,error) btv2 = BusTrackViz(bt2,'test',"images/bus.png"); btsegs.extend([btv,btv2]); sim = Simulation(btsegs) sim.run(speed=0,refresh_rate=0.1);
def test_GTFS(tids=range(2912979-9,2912979+1)): import GTFSBusTrack as tracker import sys btvs=[] print "Loading GTFS data for %d routes..." % (len(tids),) ix=0 for tid in tids: ix+=1 bt = tracker.GTFSBusTrack(tid); btv = BusTrackViz(bt,'test',"images/bus_small.png"); if bt.__dict__.get('interpolation') is not None: btvs.append(btv); print "+",ix else: print "-",ix sys.stdout.flush() print "...done. Begining simulation..." sim = Simulation(btvs); sim.run(speed=0,refresh_rate=0.02);
def test_matched_GPS(segment_ids): import GPSBusTrack as gps gtfs_tracks = {} gps_tracks = [] vizs = [] stops = set() for i,segid in enumerate(segment_ids): print "Loading segment %s (%d/%d)..." %(segid,i+1,len(segment_ids)) bus = gps.GPSBusSchedule(segid); gps_track = bus.getGPSBusTrack(); gtfs_schedule = bus.getGTFSSchedule(); service_id = gtfs_schedule.service_id; viz1 = BusTrackViz(gps_track,'tracked:'+str(segid), "images/bus_small.png"); gps_tracks.append(viz1); gtfs_key = (gtfs_schedule.trip_id,gtfs_schedule.offset) if not gtfs_tracks.has_key( gtfs_key ): gtfs_track = bus.getGTFSBusTrack(); viz2 = BusTrackViz(gtfs_track,'scheduled:'+str(gtfs_track.trip_id), "images/bus.png"); gtfs_tracks[gtfs_key] = viz2 else: viz2 = gtfs_tracks[gtfs_key] mviz = BusMatchupViz(viz1,viz2,service_colors[service_id]); arriv_viz = BusArrivalViz(bus,service_colors[service_id],duration=5); for stop in bus.getGPSSchedule(): stops.add( (stop['stop_lat'],stop['stop_lon']) ) vizs.append(mviz); vizs.append(arriv_viz); print "ok" print "Loading stops..." for stop in stops: vizs.append(BusStopViz(stop,'asdf',pygame.Color(0,0,0),5)) print "ok" sim = Simulation(gtfs_tracks.values()+gps_tracks,vizs); sim.run(speed=0,refresh_rate=0.1,windowsize=(1200,1200));
def test_sim(route, zoom, image="images/train.png"): time_window, bbox = find_bounds(route) def getLL(time): if time <= time_window[0]: return route[0][:2] elif time > time_window[1]: return route[-1][:2] for (lat1, lon1, time1), (lat2, lon2, time2) in zip(route[:-1], route[1:]): if time1 < time <= time2: break frac = (time - time1) / (time2 - time1) lat = lat1 + frac * (lat2 - lat1) lon = lon1 + frac * (lon2 - lon1) return lat, lon viz = TrackingViz("Test Train", image, getLL, time_window, bbox, 1) sim = Simulation([viz], [], 0) sim.run(speed=0, refresh_rate=0.1, osmzoom=zoom, windowsize=(600, 600))
def makeInterpolator(begin_ll, end_ll, begin_t, end_t): def ret(t): if t < begin_t: return begin_ll elif t > end_t: return end_ll else: blat, blon = begin_ll elat, elon = end_ll frac = float(t) / (end_t - begin_t) return (blat + frac * (elat - blat), blon + frac * (elon - blon)) return ret for i in range(num_trains): lat = bottom_lat + i * (top_lat - bottom_lat) / (num_trains - 1) locAtTime = makeInterpolator((lat, left_lon), (lat, right_lon), begin_time, end_time) tviz = TrackingViz("Train %d" % (i + 1, ), image_f, locAtTime, (begin_time, end_time), (30, 46, -119, -68.5), 1) # drawing order doesn't really matter here trackvizs.append(tviz) sim = Simulation(trackvizs, [], 0) sim.run(speed=1, refresh_rate=0.1, osmzoom=zoom)
phase = float(time % self.frequency) / self.frequency if phase < 0.25: blat = self.clat - self.lat_dist elat = self.clat + self.lat_dist blon = elon = self.clon - self.lon_dist frac = phase / 0.25 elif phase < 0.5: blat = elat = self.clat + self.lat_dist blon = self.clon - self.lon_dist elon = self.clon + self.lon_dist frac = (phase - 0.25) / 0.25 elif phase < 0.75: blat = self.clat + self.lat_dist elat = self.clat - self.lat_dist blon = elon = self.clon + self.lon_dist frac = (phase - 0.5) / 0.25 else: blat = elat = self.clat - self.lat_dist blon = self.clon + self.lon_dist elon = self.clon - self.lon_dist frac = (phase - 0.75) / 0.25 return blat + frac * (elat - blat), blon + frac * (elon - blon) denver = 39.756111, -104.994167 train = TiedTrain(denver, 5.0, 5.0, 60, (0, 600), "Denver Bound") lasso = LassoViz(train.get_loc_at_time, lambda t: denver) sim = Simulation([train], [lasso], 0) sim.run(refresh_rate=0.01, speed=1, osmzoom=7)
blat = self.clat - self.lat_dist elat = self.clat + self.lat_dist blon = elon = self.clon - self.lon_dist frac = phase/0.25 elif phase < 0.5: blat = elat = self.clat + self.lat_dist blon = self.clon - self.lon_dist elon = self.clon + self.lon_dist frac = (phase-0.25)/0.25 elif phase < 0.75: blat = self.clat + self.lat_dist elat = self.clat - self.lat_dist blon = elon = self.clon + self.lon_dist frac = (phase-0.5)/0.25 else: blat = elat = self.clat - self.lat_dist blon = self.clon + self.lon_dist elon = self.clon - self.lon_dist frac = (phase-0.75)/0.25 return blat + frac*(elat-blat), blon + frac*(elon-blon) denver = 39.756111, -104.994167 train = TiedTrain(denver, 5.0, 5.0, 60, (0, 600), "Denver Bound") lasso = LassoViz(train.getLocAtTime, lambda t: denver) sim = Simulation( [train,], [lasso,], 0) sim.run(refresh_rate = 0.01, speed = 1, osmzoom = 7)
else: blat, blon = begin_ll elat, elon = end_ll frac = float(t) / (end_t - begin_t) return (blat + frac * (elat - blat), blon + frac * (elon - blon)) return ret for i in range(num_trains): lat = bottom_lat + i * (top_lat - bottom_lat) / (num_trains - 1) locAtTime = makeInterpolator( (lat, left_lon), (lat, right_lon), begin_time, end_time ) tviz = TrackingViz( "Train %d" % (i + 1,), image_f, locAtTime, (begin_time, end_time), (30, 46, -119, -68.5), 1, ) # drawing order doesn't really matter here trackvizs.append(tviz) sim = Simulation(trackvizs, [], 0) sim.run(speed=1, refresh_rate=0.1, osmzoom=zoom)
def ret(t): loc= None #a['loc'][0][1] # initialization if a['loc'][-1][0] < t: return for e in a['loc']: if e[0] > t: break loc= e[1] print a['name'] + " in " + str(loc) return loc return ret # create 10 stupid functions for k,a in actors.iteritems(): a['fun']= make_callb(a) image_f = "images/train.png" trackvizs = [] for name,a in actors.iteritems(): tviz = LLamaViz(name, image_f, a['fun'], (min(time),max(time)), (min(a['lats']),max(a['lats']),min(a['lons']),max(a['lons'])), 1) #drawing order doesn't really matter here trackvizs.append(tviz) sim = Simulation(trackvizs,[],0) sim.run(speed=2,refresh_rate=0.4,osmzoom=18) #sim.run(speed=10,refresh_rate=0.1,osmzoom=16)