Guest User

Untitled

a guest
Jul 16th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.75 KB | None | 0 0
  1. from gtfs import Schedule
  2. from gtfs.entity import Trip, StopTime, Stop
  3. from sqlalchemy.orm import eagerload
  4. import csv
  5. import sys
  6.  
  7. from prender import processing
  8.  
  9. def cons(ary):
  10. for i in range(len(ary)-1):
  11. yield ary[i],ary[i+1]
  12.  
  13. def find_freqs(sched):
  14. counts = {}
  15.  
  16. n_trips = sched.session.query(Trip).count()
  17.  
  18. for i in range(0,n_trips,500):
  19. print (i/float(n_trips))*100
  20. for trip in sched.session.query(Trip).options(eagerload("stop_times")).limit(500).offset(i):
  21. for st1,st2 in cons(sorted(trip.stop_times,key=lambda x:x.stop_sequence)):
  22. counts[(st1.stop_id,st2.stop_id)] = counts.get( (st1.stop_id,st2.stop_id), 0 ) + 1
  23.  
  24. fp = open("freqs","w")
  25. for (st1,st2),count in counts.items():
  26. fp.write( "%s,%s,%s\n"%(st1,st2,count) )
  27. fp.close()
  28.  
  29. def map_line_freqs():
  30. sched = Schedule( "davepeck_20100806_2257.db" )
  31.  
  32. ll,bb,rr,tt = sched.session.execute("SELECT min(stop_lon),min(stop_lat),max(stop_lon),max(stop_lat) from Stops").fetchone()
  33.  
  34.  
  35. mr = processing.MapRenderer()
  36. mr.start(ll,bb,rr,tt,4000) #left,bottom,right,top,width
  37. mr.background(255,255,255)
  38. mr.smooth()
  39.  
  40. stops = dict([(stop.stop_id,stop) for stop in sched.stops])
  41.  
  42. for st1_id, st2_id, count in csv.reader( open( "freqs" ) ):
  43. st1 = stops[st1_id]
  44. st2 = stops[st2_id]
  45. print st1.stop_lat,st1.stop_lon, st2.stop_lat,st2.stop_lon, count
  46. mr.strokeWeight( (float(count))*0.000008 )
  47. mr.line(st1.stop_lon,st1.stop_lat,st2.stop_lon,st2.stop_lat)
  48.  
  49. mr.saveLocal("map.png")
  50. mr.stop()
  51.  
  52. def map_stop_freqs():
  53. sched = Schedule( "trimet.db" )
  54.  
  55. ll,bb,rr,tt = sched.session.execute("SELECT min(stop_lon),min(stop_lat),max(stop_lon),max(stop_lat) from Stops").fetchone()
  56.  
  57. mr = processing.MapRenderer()
  58. mr.start(ll,bb,rr,tt,4000) #left,bottom,right,top,width
  59. mr.background(255,255,255)
  60. mr.smooth()
  61. mr.strokeWeight( 0.0001 )
  62.  
  63. stops = dict([(stop.stop_id,stop) for stop in sched.stops])
  64.  
  65. counts = sched.session.execute( "select stop_id, count(*) from stop_times group by stop_id" )
  66. for stop_id, count in counts:
  67. print stop_id
  68. stop = stops[stop_id]
  69. mr.ellipse( stop.stop_lon, stop.stop_lat, 0.0001*count**0.5, 0.0001*count**0.5 )
  70.  
  71. mr.saveLocal("trimet_stop_freqs.png")
  72. mr.stop()
  73.  
  74. def hyper_loader():
  75. from gtfs.feed import Feed
  76.  
  77. feed = Feed( "/home/brandon/Desktop/wmata_20100822_0217.zip" )
  78. stop_times_table = feed.get_table( "stop_times.txt" )
  79. print stop_times_table
  80.  
  81. for i, record in enumerate( stop_times_table ):
  82. if i%500==0: sys.stdout.write("."); sys.stdout.flush()
  83. pass
  84. sys.stdout.write("\n")
  85.  
  86. if __name__=='__main__':
  87. map_stop_freqs()
Add Comment
Please, Sign In to add comment