def mm(tid, method, interval=1): alg = algs[method] gw = cg.new_gw() trd = cdb.new_track_reader(offset=0) pwd = cdb.new_path_writer_for_method(method=method) pt2j = cj.new_pt2geojson(method=method) track = trd.fetch_by_id(tid) track.sample(interval) track.summary() pt2j.write_t_geojson(track) alg.prepare(gw) path = alg.match(gw, track) pt2j.write_p_geojson(path) # pwd.insert_update(path) path.summary() del trd, pwd return path
def mm(tid, method, interval=1): alg = algs[method] gw = cg.new_gw() trd = cdb.new_track_reader(offset = 0) pwd = cdb.new_path_writer_for_method(method = method) pt2j = cj.new_pt2geojson(method = method) track = trd.fetch_by_id(tid) track.sample(interval) track.summary() pt2j.write_t_geojson(track) alg.prepare(gw) path = alg.match(gw, track) pt2j.write_p_geojson(path) # pwd.insert_update(path) path.summary() del trd,pwd return path
def mm(): for tbname_suffix in tbname_suffixs: gw = cg.new_gw() cdb.create_path_occupied_crusing_table(tbname_suffix,method=METHOD)#函数调用的时候,如果第一个参数使用了关键字绑定,后面的参数也必须使用关键字绑定! cdb.create_path_occupied_crusing_table_attr(tbname_suffix,method=METHOD) trd = cdb.new_track_reader_for_purpose(tbname_suffix,purpose='mm') pwd = cdb.new_path_writer_for_method(tbname_suffix,method=METHOD) pawd = cdb.new_path_attr_writer_for_method(tbname_suffix,method=METHOD) #p2tj = cj.new_pt2geojson(method=METHOD) print '' start_at = datetime.datetime.now() print tbname_suffix + (' start at ' + str(start_at) + ' ').center(70, '-') print 'preparing...', alg.prepare(gw) print 'end' tracks_num = 0 paths_failed = 0 max_fetched = TRACKS_TO_ROW - TRACKS_FROM_ROW + 1 start_match_at = datetime.datetime.now() print (' start matching at ' + str(start_match_at) + '').center(70, '-') while TRACKS_TO_ROW < 0 or trd.fetched_num < max_fetched: track = trd.fetch_one() if trd.fetched_num % 1000 == 0: print 'fetched', trd.fetched_num if track is None: break d_max = 0 pre_lonlat = track.rds[0]['gps_lonlat'] for i in range(1,len(track.rds)): cur_lonlat = track.rds[i]['gps_lonlat'] d = cg.lonlats2km(pre_lonlat, cur_lonlat) if d > d_max: d_max = d pre_lonlat = cur_lonlat if d_max > 3 or track.length() >= 80: continue else: tracks_num += 1 print 'track', str(track.tid).ljust(10),' ', if not match(pwd,pawd,gw,track): paths_failed += 1 end_match_at = datetime.datetime.now() print(' end matching at ' + str(end_match_at) + ' ').center(70, '-'),'elapsed time',str(end_match_at - start_match_at) print 'fetched tracks: %s, paths failed: %s' % (trd.fetched_num, paths_failed) print ''.center(70, '-') #clear() end_at = datetime.datetime.now() print tbname_suffix + (' end at ' + str(end_at) + ' ').center(70, '-'),'elapsed time',str(end_at - start_at)
def compare(): gw = cg.new_gw() trd = cdb.new_track_reader(offset=0) prd = cdb.new_path_reader(gw=gw, tbname="taxi_paths_truth") global matched_length, missed_length, false_length matched_length = {} missed_length = {} false_length = {} for method in algs.iterkeys(): matched_length[method] = {} missed_length[method] = {} false_length[method] = {} for interval in intervals: matched_length[method][interval] = [] missed_length[method][interval] = [] false_length[method][interval] = [] for method in algs.iterkeys(): alg = algs[method] alg.prepare(gw) for tid in tids: print method, tid, gt_path = prd.fetch_path_by_tid(tid) for interval in intervals: print interval, path = mm(gw, trd, method, tid, interval) if path is None: print "failed" continue result = path.compare(gt_path) matched_length[method][interval].append( result['matched_length']) missed_length[method][interval].append(result['missed_length']) false_length[method][interval].append(result['false_length']) print "" for method in algs.iterkeys(): for interval in intervals: print method, interval, print sum(matched_length[method][interval]), print sum(missed_length[method][interval]), print sum(false_length[method][interval])
def compare(): gw = cg.new_gw() trd = cdb.new_track_reader(offset = 0) prd = cdb.new_path_reader(gw=gw, tbname="taxi_paths_truth") global matched_length, missed_length, false_length matched_length = {} missed_length = {} false_length = {} for method in algs.iterkeys(): matched_length[method] = {} missed_length[method] = {} false_length[method] = {} for interval in intervals: matched_length[method][interval] = [] missed_length[method][interval] = [] false_length[method][interval] = [] for method in algs.iterkeys(): alg = algs[method] alg.prepare(gw) for tid in tids: print method,tid, gt_path = prd.fetch_path_by_tid(tid) for interval in intervals: print interval, path = mm(gw, trd, method, tid, interval) if path is None: print "failed" continue result = path.compare(gt_path) matched_length[method][interval].append(result['matched_length']) missed_length[method][interval].append(result['missed_length']) false_length[method][interval].append(result['false_length']) print "" for method in algs.iterkeys(): for interval in intervals: print method,interval, print sum(matched_length[method][interval]), print sum(missed_length[method][interval]), print sum(false_length[method][interval])
def insert_paths_attr(): gw = cg.new_gw() prd = cdb.new_path_reader_for_method(method='bn', gw=gw, limit=10000, offset=0) if prd is None: return trd = cdb.new_track_reader() pawd = cdb.new_path_attr_writer('taxi_paths_bn_attr') path = prd.fetch_one() while path is not None: print prd.fetched_num, path.tid track = trd.fetch_by_id(path.tid) pawd.insert(path, track) path = prd.fetch_one() del prd del pawd
def mm(): for tbname_suffix in tbname_suffixs: gw = cg.new_gw() cdb.create_path_occupied_crusing_table( tbname_suffix, method=METHOD) #函数调用的时候,如果第一个参数使用了关键字绑定,后面的参数也必须使用关键字绑定! cdb.create_path_occupied_crusing_table_attr(tbname_suffix, method=METHOD) trd = cdb.new_track_reader_for_purpose(tbname_suffix, purpose='mm') pwd = cdb.new_path_writer_for_method(tbname_suffix, method=METHOD) pawd = cdb.new_path_attr_writer_for_method(tbname_suffix, method=METHOD) #p2tj = cj.new_pt2geojson(method=METHOD) print '' start_at = datetime.datetime.now() print tbname_suffix + (' start at ' + str(start_at) + ' ').center( 70, '-') print 'preparing...', alg.prepare(gw) print 'end' tracks_num = 0 paths_failed = 0 max_fetched = TRACKS_TO_ROW - TRACKS_FROM_ROW + 1 start_match_at = datetime.datetime.now() print(' start matching at ' + str(start_match_at) + '').center(70, '-') while TRACKS_TO_ROW < 0 or trd.fetched_num < max_fetched: track = trd.fetch_one() if trd.fetched_num % 1000 == 0: print 'fetched', trd.fetched_num if track is None: break d_max = 0 pre_lonlat = track.rds[0]['gps_lonlat'] for i in range(1, len(track.rds)): cur_lonlat = track.rds[i]['gps_lonlat'] d = cg.lonlats2km(pre_lonlat, cur_lonlat) if d > d_max: d_max = d pre_lonlat = cur_lonlat if d_max > 3 or track.length() >= 80: continue else: tracks_num += 1 print 'track', str(track.tid).ljust(10), ' ', if not match(pwd, pawd, gw, track): paths_failed += 1 end_match_at = datetime.datetime.now() print(' end matching at ' + str(end_match_at) + ' ').center( 70, '-'), 'elapsed time', str(end_match_at - start_match_at) print 'fetched tracks: %s, paths failed: %s' % (trd.fetched_num, paths_failed) print ''.center(70, '-') #clear() end_at = datetime.datetime.now() print tbname_suffix + (' end at ' + str(end_at) + ' ').center( 70, '-'), 'elapsed time', str(end_at - start_at)
import sys import datetime import ccgraph as cg import cctrack as ct import ccpath as cp import ccdb as cdb import alg_ways_attr as alg TRACKS_FROM_TID = 150001 TRACKS_TO_TID = 350000 gw = cg.new_gw() trd = cdb.new_track_reader_for_purpose(purpose="mm") # alg.init_ways_attrs_tb() def match(track): print "Matching..", path = alg.match(gw, track) if path is not None: print "end ", path.summary() print "" return True else: print ""
import sys import datetime import ccgraph as cg import cctrack as ct import ccpath as cp import ccdb as cdb import alg_ways_attr as alg TRACKS_FROM_TID = 150001 TRACKS_TO_TID = 350000 gw = cg.new_gw() trd = cdb.new_track_reader_for_purpose(purpose="mm") # alg.init_ways_attrs_tb() def match(track): print "Matching..", path = alg.match(gw, track) if path is not None: print "end ", path.summary() print "" return True else: print "" return False