int alert_is_on_route (roadmap_alerter_location_info *pInfo, int steering, roadmap_alert_provider* provider, int i ) { int rc = 0; int from; int to; RoadMapPosition from_position; RoadMapPosition to_position; int road_azymuth; int delta; BOOL is_alert_on_route = ((provider->is_on_route) && ((* (provider->is_on_route))((* (provider->get_id))(i)))); if (is_alert_on_route) return TRUE; roadmap_square_set_current (pInfo->square_id); roadmap_line_points (pInfo->line_id, &from, &to); roadmap_point_position (from, &from_position); roadmap_point_position (to, &to_position); road_azymuth = roadmap_math_azymuth (&from_position, &to_position); delta = azymuth_delta (steering, road_azymuth); if (delta >= -90 && delta < 90) rc = navigate_is_line_on_route (pInfo->square_id, pInfo->line_id, from, to); else rc = navigate_is_line_on_route (pInfo->square_id, pInfo->line_id, to, from); return rc; }
static int alert_is_on_route (const RoadMapPosition *point_position, int steering) { int count = 0; int layers[128]; int layers_count; RoadMapNeighbour neighbours; int rc = 0; int from; int to; RoadMapPosition from_position; RoadMapPosition to_position; int road_azymuth; int delta; int square_current = roadmap_square_active (); layers_count = roadmap_layer_all_roads (layers, 128); if (layers_count > 0) { count = roadmap_street_get_closest (point_position, 0, layers, layers_count, &neighbours, 1); if (count > 0) { roadmap_square_set_current (neighbours.line.square); roadmap_line_points (neighbours.line.line_id, &from, &to); roadmap_point_position (from, &from_position); roadmap_point_position (to, &to_position); road_azymuth = roadmap_math_azymuth (&from_position, &to_position); delta = azymuth_delta (steering, road_azymuth); if (delta >= -90 && delta < 90) rc = navigate_is_line_on_route (neighbours.line.square, neighbours.line.line_id, from, to); else rc = navigate_is_line_on_route (neighbours.line.square, neighbours.line.line_id, to, from); } } roadmap_square_set_current (square_current); return rc; }