def getRouteMatchScore(car, passenger): cursor = RouteInfo.initDatabase() #车主起点到车主终点行车路径规划距离D0 distance_0 = RouteInfo.queryDistanceFromDriveTable( car['start_simple_lng'], car['start_simple_lat'], car['end_simple_lng'], car['end_simple_lat']) #车主起点到乘客起点行车路径规划距离D1 distance_1 = RouteInfo.queryDistanceFromDriveTable( car['start_simple_lng'], car['start_simple_lat'], passenger['start_simple_lng'], passenger['start_simple_lat']) #乘客起点到乘客终点行车路径规划距离D2 distance_2 = RouteInfo.queryDistanceFromDriveTable( passenger['start_simple_lng'], passenger['start_simple_lat'], passenger['end_simple_lng'], passenger['end_simple_lat']) #乘客终点到司机终点行车路径规划距离D3 distance_3 = RouteInfo.queryDistanceFromDriveTable( passenger['end_simple_lng'], passenger['end_simple_lat'], car['end_simple_lng'], car['end_simple_lat']) #计算车主绕行距离: d = (D1+D2+D3) - D0 car_extra_distance = (distance_1 + distance_2 +distance_3) - distance_0 #计算车主绕行因子: r1 = d / D0, ( 0< r1 < 1 ) 越小越好 car_extra_factor= car_extra_distance / distance_0 #计算车主收益因子: r2 = D2 / D0,(0< r2 ) 越大越好 car_earn_factor= distance_2 /distance_0 car_extra_plus = 1.5 if( car_earn_factor< 0.1 ): match_factor = 0 elif(car_extra_factor==0 and car_earn_factor == 0 ): match_factor = 0 else: match_factor = car_earn_factor - car_extra_plus*car_extra_factor #print "getRouteMatchScore, d0=%d, d1=%d, d2=%d, d3=%d"%(distance_0, distance_1, distance_2, distance_3) # print "车主绕行距离=%d, 车主绕行因子=%f, 车主收益因子=%f"%( car_extra_distance, car_extra_factor, car_earn_factor) return (match_factor, car_extra_distance, car_extra_factor, car_earn_factor)
def findMatchRoute(test_car_route_id ): #test_car_route_id = 2178 table_name = 'recommend_'+ str(test_car_route_id) +'_tb' start_time = datetime.datetime.now() #go through all route in database cursor = RouteInfo.initDatabase() #新建这条路线的匹配表 RouteInfo.createRecommendFactorTable(cursor, table_name) #车主信息 car = dict() try: get_car_sql = "SELECT * from recommend_route_tb where route_id=%d "%test_car_route_id print get_car_sql count = cursor.execute( get_car_sql) print 'database return %d line'%(count) result = cursor.fetchone() except Exception, e: print e