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); }