Exemple #1
0
        private MovingVehicleInfo CalculateLocationOnPath(
            MovingVehicleInfo mvi,
            RouteSegmentPaths path,
            double distance,
            RouteSegments routeSegment
            )
        {
            var fraction = distance / path.Distance;
            var lat1     = path.StartPoint.Y / 180 * pi;
            var lng1     = path.StartPoint.X / 180 * pi;
            var lat2     = path.EndPoint.Y / 180 * pi;
            var lng2     = path.EndPoint.X / 180 * pi;
            var lng      = lng1 + (lng2 - lng1) * fraction;

            if (lng2 == lng1)
            {
                lng2 += Math.Pow(10.0, -15.0);
            }
            var lat = Math.Atan(
                (Math.Tan(lat1) * Math.Sin(lng2 - lng) +
                 Math.Tan(lat2) * Math.Sin(lng - lng1)) / Math.Sin(lng2 - lng1)
                );
            var normalized = new Point(lng * 180 / pi, lat * 180 / pi);

            mvi.MovingVehicle.Normalized           = normalized;
            mvi.MovingVehicle.RouteSegmentId       = routeSegment.Id;
            mvi.MovingVehicle.LastPathPosition     = path.Position;
            mvi.MovingVehicle.DistanceFromLastPath = distance;
            mvi.MovingVehicle.UpdatedAt            = _nextTime;
            return(mvi);
        }
        public void Insert(List <MovingVehicleInfo> movingVehicleInfos)
        {
            var list = new List <MovingVehicles>();

            foreach (var item in movingVehicleInfos)
            {
                var cityId = item.Route.CityId;
                var routes = Routes.Where(e => e.CityId == cityId).ToList();
                if (routes.Count <= 0)
                {
                    continue;
                }
                int r             = rnd.Next(routes.Count);
                var route         = routes[r];
                var routeSegments = route.RouteSegments.ToList();
                if (routeSegments.Count <= 0)
                {
                    continue;
                }
                r = rnd.Next(routeSegments.Count);
                var routeSegment = routeSegments[r];

                List <RouteSegmentPaths> routeSegmentPaths;
                if (!RouteSegmentPaths.TryGetValue(routeSegment.Id, out routeSegmentPaths))
                {
                    continue;
                }
                if (routeSegmentPaths.Count <= 0)
                {
                    continue;
                }
                var path = routeSegmentPaths[0];
                var now  = DateTime.UtcNow;
                var mv   = new MovingVehicles()
                {
                    RouteId              = routeSegment.RouteId,
                    RouteSegmentId       = routeSegment.Id,
                    SegmentId            = item.MovingVehicle.SegmentId,
                    SourceType           = "bot",
                    AverageSpeed         = 25,
                    Real                 = path.StartPoint,
                    Normalized           = path.StartPoint,
                    CreatedAt            = now,
                    UpdatedAt            = now,
                    ConfirmedAt          = now,
                    LastPathPosition     = 1,
                    DistanceFromLastPath = 0.0,
                    Relevance            = 100
                };
                list.Add(mv);
                //_context.MovingVehicles.Add(mv);
            }
            //_context.SaveChanges();
            _context.BulkInsert(list);
        }