def test(): probes, links = read_data() link_points, belong = flatten_uniq(links) print "%d probe points loaded" % len(probes) print "%d link points loaded" % len(link_points) probes = np.array(random.sample(probes, 100)) # print probes link_points = np.array(link_points) probes_rad = np.deg2rad(probes) link_points_rad = np.deg2rad(link_points) knns_kd = evaluate( lambda: nearest_kdtree( probes_rad, link_points_rad, n=30, is_filter=True), "kdtree") knns_force = evaluate( lambda: nearest_force(probes_rad, link_points_rad, n=30), "brute force") for idx, (k1, k2) in enumerate(izip(knns_kd, knns_force)): diff = np.setdiff1d(k2, k1) if diff.size > 0: print diff print probes[idx] print link_points[diff] print haversine_np(probes_rad[idx], link_points_rad[diff])
def probe_to_link_dist(link_points, probe): link_points_rad = np.deg2rad(link_points) probe_rad = np.deg2rad(probe) #底边 base_side = haversine_np(link_points_rad[:-1,:], link_points_rad[1:,:]) #腰 tmp = haversine_np(probe_rad, link_points_rad) side1 = tmp[:-1] side2 = tmp[1:] link_dis = calc_link_dis(base_side, side1, side2) return np.min(link_dis)
def probe_to_link_dist(link_points, probe): link_points_rad = np.deg2rad(link_points) probe_rad = np.deg2rad(probe) #底边 base_side = haversine_np(link_points_rad[:-1, :], link_points_rad[1:, :]) #腰 tmp = haversine_np(probe_rad, link_points_rad) side1 = tmp[:-1] side2 = tmp[1:] link_dis = calc_link_dis(base_side, side1, side2) return np.min(link_dis)
def calc_road_vec(probe, link_points): link_points_rad = np.deg2rad(link_points) probe_rad = np.deg2rad(probe) base_side = haversine_np(link_points_rad[:-1,:], link_points_rad[1:,:]) tmp = haversine_np(probe_rad, link_points_rad) side1 = tmp[:-1] side2 = tmp[1:] link_dis = calc_link_dis(base_side, side1, side2) min_idx = np.argmin(link_dis) road_vec = np.array(link_points[min_idx + 1]) - np.array(link_points[min_idx]) return road_vec
def calc_road_vec(probe, link_points): link_points_rad = np.deg2rad(link_points) probe_rad = np.deg2rad(probe) base_side = haversine_np(link_points_rad[:-1, :], link_points_rad[1:, :]) tmp = haversine_np(probe_rad, link_points_rad) side1 = tmp[:-1] side2 = tmp[1:] link_dis = calc_link_dis(base_side, side1, side2) min_idx = np.argmin(link_dis) road_vec = np.array(link_points[min_idx + 1]) - np.array( link_points[min_idx]) return road_vec
def dis_ref_nonref(probe, link_points, nearest_dis, link_len): link_points_rad = np.deg2rad(link_points) probe_rad = np.deg2rad(probe) base_side = haversine_np(link_points_rad[:-1, :], link_points_rad[1:, :]) tmp = haversine_np(probe_rad, link_points_rad) side1 = tmp[:-1] side2 = tmp[1:] link_dis = calc_link_dis(base_side, side1, side2) min_idx = np.argmin(link_dis) proj_len = calc_proj_len(base_side[min_idx], side1[min_idx], side2[min_idx]) dis_ref = np.sum(base_side[:min_idx]) + proj_len dis_ref = dis_ref / np.sum(base_side) * link_len dis_nonref = link_len - dis_ref return dis_ref, dis_nonref
def dis_ref_nonref(probe, link_points, nearest_dis, link_len): link_points_rad = np.deg2rad(link_points) probe_rad = np.deg2rad(probe) base_side = haversine_np(link_points_rad[:-1,:], link_points_rad[1:,:]) tmp = haversine_np(probe_rad, link_points_rad) side1 = tmp[:-1] side2 = tmp[1:] link_dis = calc_link_dis(base_side, side1, side2) min_idx = np.argmin(link_dis) proj_len = calc_proj_len(base_side[min_idx], side1[min_idx], side2[min_idx]) dis_ref = np.sum(base_side[:min_idx]) + proj_len dis_ref = dis_ref / np.sum(base_side) * link_len dis_nonref = link_len - dis_ref return dis_ref, dis_nonref
def test(): probes, links = read_data() link_points, belong = flatten_uniq(links) print "%d probe points loaded" % len(probes) print "%d link points loaded" % len(link_points) probes = np.array(random.sample(probes, 100)) # print probes link_points = np.array(link_points) probes_rad = np.deg2rad(probes) link_points_rad = np.deg2rad(link_points) knns_kd = evaluate(lambda: nearest_kdtree(probes_rad, link_points_rad, n=30, is_filter=True), "kdtree") knns_force = evaluate(lambda: nearest_force(probes_rad, link_points_rad, n=30), "brute force") for idx, (k1, k2) in enumerate(izip(knns_kd, knns_force)): diff = np.setdiff1d(k2, k1) if diff.size > 0: print diff print probes[idx] print link_points[diff] print haversine_np(probes_rad[idx], link_points_rad[diff])
def compute_traj_diff_time_distance(traj=None): """Compute the sampling time and the coordinate distance.""" # Compute the time difference time_diff_array = (traj["time"].iloc[1:].reset_index(drop=True) - traj[ "time"].iloc[:-1].reset_index(drop=True)).dt.total_seconds() / 60 # dist_array = np.sqrt(np.diff(traj[x].values)**2 + np.diff(traj[y].values)**2) # Compute the coordinate distance dist_diff_array = haversine_np(traj["lon"].values[1:], # lon_0 traj["lat"].values[1:], # lat_0 traj["lon"].values[:-1], # lon_1 traj["lat"].values[:-1] # lat_1 ) # Filling the fake values time_diff_array = [0.5] + time_diff_array.tolist() dist_diff_array = [0.5] + dist_diff_array.tolist() traj["time_array"] = time_diff_array traj["dist_array"] = dist_diff_array return traj
def nearest_probe_force(probe, link_points, n): distance = haversine_np(probe, link_points) knns = np.argsort(distance)[:n] # print distance[knns] return knns