How does WSDOT calculate travel times? (Detailed answer)
After logging into our mainframe, the program downloads a list of loops and stations (stations are lanes added together). The program receives the data every 20 seconds but only unpacks it once every minute.
The Speed is calculated as follows:
lpOneVaxData->iSpeed = (int)(
((((double)(lpOneVaxData->usVolume)) * (60 * 12)))
(((double)(lpOneVaxData->usScanCount)) * ((double)(lpOneVaxData->ucLoops)) * SPEEDFACTOR )
This is equivalent to volume per lane per hour divided by percent occupancy times 2.4. The use of the double precision variables eliminates truncation during the division (actually its overkill). The casting to integer causes the result to be truncate to the lowest even mile per hour.
The speed is bounded as follows:
If occupancy is less than 12 percent, the speed is set to 60 MPH
If occupancy is greater than 95 percent the speed is set to 0 MPH
If the calculated speed is less than 10 MPH it is set to 10 MPH
If the calculated speed is greater than 60 MPH it is set to 60 MPH
The 20-second speed is saved and summed for five consecutive periods. This summed speed divided by the period count is used in the travel time algorithm.
The travel time module loads database (route) files that list the data stations along each route. Ramps are designated with an "R", which "R" tells the algorithm to look up the ramp speed and distance in an accompanying file
An average travel time database file accompanies the route files. The average time files have one line for each five-minute time of day for each day of the week in a 24-hour format.
The module loads all of the route and average files in the specified local directory. The module generates travel time data for each route file found in the directory and archives the resulting data to be used to generate future average times.
Travel times are calculated by averaging the speed of 2 adjacent stations. The travel times for each link are summed up and the resulting total time becomes the current time. The resulting distance is also summed up over the route. When adjacent stations are on different roadways the module looks up the distance for the link (ramp) and the maximum speed for the link is also in a text file. This is exactly the same method used for the ",R" coded ramp loops. If the calculated speed is slower than maximum speed it is used, otherwise the ramp maximum speed it used. If the route has multiple loops from a single cabinet, the loop data is averaged into a single station.