/*************************************************************************** * routing.h * * Copyright 2011 - Steffen Pohle * steffen@gulpe.de ****************************************************************************/ #ifndef _ROUTING_H_ #define _ROUTING_H_ #include "map.h" #define RT_ALLOC 512 #define RT_ALLOCREFS 128 #define RT_ALLOCSTACK 256 #define RT_F_HIGHWAY 1.5 #define RT_F_TERTIARY 2.0 #define RT_F_RESIDENTIAL 4.0 #define RT_F_ROAD 5.0 enum { ROUTING_NONE = 0, // no routing active ROUTING_INIT, // routing : initialized ROUTING_CALC, // routing : calculating ROUTING_OPTIMIZE, // routing : optimizing the way ROUTING_ONWAY, // routing : we're on the way ROUTING_ABORT // routing : aborted }; struct rtwayid { unsigned long long int id; unsigned short int sid; unsigned char type; }; struct rtway { struct rtwayid way; struct map_pos pos; int pnr; // pointnr where we entered float dist2dest; // way distance from destination float dist2pos; // distance to current position int step; float priority; int cycle1; int cycle2; float deltadist; }; struct rtwaylist { struct rtway *array; int max; int cnt; }; /* structure to cache the references and ways.. needed for optimizing */ struct rtrefway { struct rtwayid way; struct map_pos pos; int nr; }; struct rtref { char refname[MAP_W_NAMELEN]; struct rtrefway *ways; int lastnr; int cnt; int max; }; struct rtreflist { struct rtref *refs; int cnt; int max; }; /* routing data structures */ struct rtdata { struct map_pos start; unsigned long long int start_way_id; unsigned short int start_way_sid; unsigned long long int pos_way_id; unsigned short int pos_way_sid; struct map_pos pos; struct map_pos dest; struct map_pos pos_dest; // distance between pos and dest. unsigned long long int dest_way_id; unsigned short int dest_way_sid; struct map_pos dest_way_pos; char dest_way_name[MAP_W_NAMELEN]; fPoint dest_km; struct rtreflist reflist; int state; float distance; float angle; float closest_distance; float closest_lon; // debugging // float closest_lat; // debugging // // ways which are calculated struct rtwaylist ways; // elements needed to be calculated for routeing. (pointers only) // there are three different stack levels.. // needed to seperate the different roads therefor we can ignore // uninteresting routes. struct rtwaylist stack1; struct rtwaylist stack2; struct rtwaylist stack3; // elements which are on our way struct rtwaylist route; int cycle; }; extern struct rtdata *route; extern void route_start (struct map_pos startpos); extern void route_stop (); #endif