Ejemplo n.º 1
0
        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)));
                }
            }
        }
Ejemplo n.º 2
0
        public static void SetTaskAsFavourite(int taskId)
        {
            var task = new GisContext().Tasks.FirstOrDefault <Task>(t => t.Id == taskId);

            if (task != null)
            {
                task.isFavorite = true;
            }
        }
Ejemplo n.º 3
0
        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);
                }
            }
        }
Ejemplo n.º 4
0
        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)));
                }
            }
        }
Ejemplo n.º 5
0
        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();
        }
Ejemplo n.º 6
0
        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);
            }
        }
Ejemplo n.º 7
0
 //构造函数把TodoContext 作为参数,Asp.net core 框架可以自动注入TodoContext对象
 public GisController(GisContext context)
 {
     this.gisDb = context;
 }