예제 #1
0
        public async Task <Result <ListResult <RoutePoint> > > GetPoints(PagingRequestModel model, string routes)
        {
            try
            {
                var pager = new QueryPager();

                ApplyPaging(model, pager);

                var results = await _pointRepository.Search(pager);

                var listResult = new ListResult <RoutePoint>()
                {
                    Count   = results.Count,
                    HasNext = results.HasNext,
                    Results = results.Results.Select(r => new RoutePoint()
                    {
                        Id    = r.RouteInfo.ID,
                        Point = GeoPointConverter.GetPoint(r.Point)
                    }).ToList()
                };

                return(new Result <ListResult <RoutePoint> >(listResult));
            }
            catch (Exception ex)
            {
                ErrorResult error = GenerateError(ex);
                return(new Result <ListResult <RoutePoint> >(error));
            }
        }
예제 #2
0
        public void ConvertPoint()
        {
            string pointString = "POINT(431.33393335342407 3.82005181729661)";
            var    point       = GeoPointConverter.GetPoint(pointString);

            Assert.Equal(point.Lat.Value, 431.33M, 2);
            Assert.Equal(point.Lng.Value, 3.82M, 2);
        }
예제 #3
0
    public static double Distance(this GeoPoint x, GeoPoint y)
    {
        var converter = new GeoPointConverter();

        var xPoint = (Point)converter.ConvertToProvider(x);
        var yPoint = (Point)converter.ConvertToProvider(y);

        return(yPoint.Distance(xPoint));
    }
예제 #4
0
        public void ConvertLinetoPoints()
        {
            string line   = "LINESTRING(431.33393335342407 3.82005181729661,47.33685159683228 32.80960466650892)";
            var    points = GeoPointConverter.GetPoints(line);

            Assert.Equal(points.Count(), 2);
            Assert.Equal(points.ToArray()[0].Lat.Value, 431.33M, 2);
            Assert.Equal(points.ToArray()[0].Lng.Value, 3.82M, 2);

            string line2   = "LINESTRING(49.373544 20.078626 , 49.379992   20.087141   ,    49.384800 20.084377,49.389893 20.097433)";
            var    points2 = GeoPointConverter.GetPoints(line2);

            Assert.Equal(points2.Count(), 4);
            Assert.Equal(points2.ToArray()[0].Lat.Value, 49.37M, 2);
            Assert.Equal(points2.ToArray()[0].Lng.Value, 20.08M, 2);
        }
예제 #5
0
        public async Task <Result <RouteDetailsViewModel> > GetRouteById(IdModel model)
        {
            try
            {
                var query = new SearchQuery <RouteInfoEntity>();

                RouteInfoEntity result = await _routeRepository.GetSingleWithDependencies(model.Id);

                if (result == null)
                {
                    ErrorResult error = GenerateError("Route not found", "Id", "Invalid identifier", ErrorStatus.ObjectNotFound);
                    return(new Result <RouteDetailsViewModel>(error));
                }

                var viewModel = new RouteDetailsViewModel()
                {
                    Difficulty = result.Difficulty,
                    Id         = result.ID,
                    Name       = result.Name,
                    UserId     = result.UserId,
                    User       = new UserListItemModel()
                    {
                        Email       = result.User.Email,
                        Id          = result.User.ID,
                        Name        = result.User.Name,
                        RoutesCount = result.User.Routes.Count
                    },
                    Geometry = new RouteGeometry()
                    {
                        Id     = result.Geometry.ID,
                        Points = GeoPointConverter.GetPoints(result.Geometry.Line),
                    },
                    MainPoint = GeoPointConverter.GetPoint(result.Point.Point)
                };

                return(new Result <RouteDetailsViewModel>(viewModel));
            }
            catch (Exception ex)
            {
                ErrorResult error = GenerateError(ex);
                return(new Result <RouteDetailsViewModel>(error));
            }
        }
예제 #6
0
        public async Task <Result <IEnumerable <RouteGeometry> > > GetGeometries(string routes)
        {
            try
            {
                if (!string.IsNullOrEmpty(routes))
                {
                    var routesArr = routes.Split(',').Select <string, int>(int.Parse).ToArray();

                    var entities = await _routeRepository.GetGeometries(routesArr);

                    if (entities.Any())
                    {
                        var models = entities.Select(r => new RouteGeometry()
                        {
                            Id     = r.ID,
                            Points = GeoPointConverter.GetPoints(r.Line)
                        });
                        return(new Result <IEnumerable <RouteGeometry> >(models));
                    }
                    else
                    {
                        ErrorResult error = GenerateError("Routes not found", "Routes", "Invalid identifiers", ErrorStatus.ObjectNotFound);
                        return(new Result <IEnumerable <RouteGeometry> >(error));
                    }
                }
                else
                {
                    ErrorResult error = GenerateError("Route not found", "Routes", "Invalid identifier", ErrorStatus.ObjectNotFound);
                    return(new Result <IEnumerable <RouteGeometry> >(error));
                }
            }
            catch (Exception ex)
            {
                ErrorResult error = GenerateError(ex);
                return(new Result <IEnumerable <RouteGeometry> >(error));
            }
        }