public static IEnumerable <PointF> GetPointsFromRoadDB(bool IncludeBoundary = true, bool IncludeSubpoints = true) { var roads = new GisContext().Roads.ToList(); foreach (var road in roads) { if (IncludeBoundary) { yield return(GetPointFromDbGeometry(road.Shape.PointAt(1))); } if (IncludeSubpoints) { for (int i = 2; i < road.Shape.PointCount; i++) { var point1 = road.Shape.PointAt(i); yield return(GetPointFromDbGeometry(point1)); } } if (IncludeBoundary) { yield return(GetPointFromDbGeometry(road.Shape.PointAt(road.Shape.PointCount.Value))); } } }
public static void SetTaskAsFavourite(int taskId) { var task = new GisContext().Tasks.FirstOrDefault <Task>(t => t.Id == taskId); if (task != null) { task.isFavorite = true; } }
public static IEnumerable <Task> GetTasksByUserId(int userId) { IEnumerable <Task> tasks = new GisContext().Tasks.ToList(); foreach (var task in tasks) { if (task.UserId == userId) { yield return(task); } } }
public static IEnumerable <Tuple <PointF, PointF> > GetLinesFromRoadDB() { var roads = new GisContext().Roads.ToList(); foreach (var road in roads) { for (int i = 1; i < road.Shape.PointCount; i++) { var point1 = road.Shape.PointAt(i); var point2 = road.Shape.PointAt(i + 1); yield return(new Tuple <PointF, PointF>(GetPointFromDbGeometry(point1), GetPointFromDbGeometry(point2))); } } }
public static void CreateNewTask(string name, string mode, DateTime time, DbGeometry route, bool IsFavorite, User user, ICollection <Point> points, int userId = -1) { var dbContext = new GisContext(); dbContext.Tasks.Add(new Task { Name = name, Mode = mode, Time = time, Route = route, isFavorite = IsFavorite, User = user, Points = points, UserId = userId }); dbContext.SaveChanges(); }
public void GraphInit() { //Init vertices vertices = RouteUtility.GetPointsFromRoadDB(true, false).Select(point => new GraphVertex { Coordinates = point }).ToList(); for (int i = 0; i < vertices.Count; i++) { vertices[i].Id = i; } //init roads var roads = new GisContext().Roads.ToList(); for (int i = 0; i < roads.Count; i++) { var edge = roads[i]; var point1 = RouteUtility.GetPointFromDbGeometry(edge.Shape.StartPoint); var point2 = RouteUtility.GetPointFromDbGeometry(edge.Shape.EndPoint); var vert1 = vertices.First(v => v.Coordinates.X == point1.X && v.Coordinates.Y == point1.Y); var vert2 = vertices.First(v => v.Coordinates.X == point2.X && v.Coordinates.Y == point2.Y); var points = RouteUtility.GetPointsByRoad(edge); //TO-DO: учитывать односторонние дороги var newEdge1 = new GraphEdge { Length = Convert.ToSingle(edge.Length), Time = Convert.ToSingle(edge.Length) / edge.Speed, Vert1 = vert1, Vert2 = vert2, Shape = points.ToList() }; var newEdge2 = new GraphEdge { Length = Convert.ToSingle(edge.Length), Time = Convert.ToSingle(edge.Length) / edge.Speed, Vert1 = vert2, Vert2 = vert1, Shape = points.Reverse().ToList() }; vert1.Edges.Add(newEdge1); vert2.Edges.Add(newEdge2); } }
//构造函数把TodoContext 作为参数,Asp.net core 框架可以自动注入TodoContext对象 public GisController(GisContext context) { this.gisDb = context; }