private AreaEstimate[] GetAreaEstimates(SimVehicleState svs)
        {
            List <AreaEstimate> estimates = new List <AreaEstimate>();

            foreach (IVehicleArea iva in this.RoadNetwork.VehicleAreas)
            {
                if (iva.ContainsVehicle(svs.Position, svs.Length, svs.Width, svs.Heading))
                {
                    AreaEstimate ae = new AreaEstimate();
                    ae.AreaId = iva.DefaultAreaId();
                    if (iva is ArbiterInterconnect)
                    {
                        ae.AreaType = StateAreaType.Interconnect;
                    }
                    else if (iva is ArbiterLane)
                    {
                        ae.AreaType = StateAreaType.Lane;
                    }
                    else
                    {
                        ae.AreaType = StateAreaType.Zone;
                    }
                    ae.Probability = 1;
                    estimates.Add(ae);
                }
            }

            return(estimates.ToArray());
        }
        /// <summary>
        /// Make a vehicle state from a sim vehicle state
        /// </summary>
        /// <param name="simState"></param>
        /// <returns></returns>
        public VehicleState VehicleStateFromSim(SimVehicleState simState)
        {
            // vehicle state
            VehicleState vs = new VehicleState();

            // area
            vs.Area = new List <AreaEstimate>();

            // ae
            AreaEstimate ae = new AreaEstimate();

            ae.Probability = 1;

            // get string id
            string id = "";

            // set id
            ae.AreaId   = id;
            ae.AreaType = StateAreaType.Interconnect;

            // get area
            IAreaSubtypeId iasi = this.GetAreaId(simState);

            if (iasi is ArbiterPerimeterId)
            {
                id          = ((ArbiterPerimeterId)iasi).ToString();
                ae.AreaType = StateAreaType.Zone;
            }
            else if (iasi is ArbiterLaneId)
            {
                ae.AreaId   = ((ArbiterLaneId)iasi).ToString() + ".1";
                ae.AreaType = StateAreaType.Lane;
            }

            // add ae
            vs.Area.Add(ae);

            // set others
            vs.Heading  = simState.Heading;
            vs.Position = simState.Position;

            // return
            return(vs);
        }