Ejemplo n.º 1
0
        public void SetupTheRightDistanceWhenCitiesAreAtMediumDistance()
        {
            // Arrange
            var distanceHelper = new DistanceHelper();

            // Act
            var distance1 = distanceHelper.GetDistance(City.Barcelona, City.London);
            var distance2 = distanceHelper.GetDistance(City.London, City.Barcelona);

            // Assert
            Assert.AreEqual(Distance.Medium, distance1);
            Assert.AreEqual(Distance.Medium, distance2);
        }
Ejemplo n.º 2
0
        public void SetupTheRightDistanceWhenCitiesAreAtShortDistance()
        {
            // Arrange
            var distanceHelper = new DistanceHelper();

            // Act
            var barcelonaDistance = distanceHelper.GetDistance(City.Barcelona, City.Barcelona);
            var sydneyDistance    = distanceHelper.GetDistance(City.Sydney, City.Sydney);
            var londonDistance    = distanceHelper.GetDistance(City.London, City.London);

            // Assert
            Assert.AreEqual(Distance.Short, barcelonaDistance);
            Assert.AreEqual(Distance.Short, sydneyDistance);
            Assert.AreEqual(Distance.Short, londonDistance);
        }
Ejemplo n.º 3
0
        public void SetupTheRightDistanceWhenCitiesAreAtLongDistance()
        {
            // Arrange
            var distanceHelper = new DistanceHelper();

            // Act
            var distance1 = distanceHelper.GetDistance(City.Sydney, City.Barcelona);
            var distance2 = distanceHelper.GetDistance(City.Barcelona, City.Sydney);
            var distance3 = distanceHelper.GetDistance(City.London, City.Sydney);
            var distance4 = distanceHelper.GetDistance(City.Sydney, City.London);

            // Assert
            Assert.AreEqual(Distance.Long, distance1);
            Assert.AreEqual(Distance.Long, distance2);
            Assert.AreEqual(Distance.Long, distance3);
            Assert.AreEqual(Distance.Long, distance4);
        }
Ejemplo n.º 4
0
        public void AssignRide(Ride r, int curStep)
        {
            Ride = r;
            int distanceToStart = DistanceHelper.GetDistance(Location, r.Start);
            int stepsAtStart    = Math.Max(curStep + distanceToStart, r.EarliestStart);
            int stepAtEnd       = stepsAtStart + DistanceHelper.GetDistance(r.Start, r.End);

            NextEndTime = stepAtEnd;
        }
Ejemplo n.º 5
0
        public bool DoIHaveToWaitIfILeaveNow(int curStep, Location currentLocation)
        {
            var distStart = DistanceHelper.GetDistance(currentLocation, Start);

            if ((curStep + distStart) >= EarliestStart)
            {
                return(true);
            }
            return(false);
        }
Ejemplo n.º 6
0
        public Ride GetNextRide(int curStep, Cart cart)
        {
            List <Ride>            rides  = new List <Ride>();
            List <RidesByDistance> toSort = new List <RidesByDistance>();

            foreach (Ride r in Rides)
            {
                if (r.IsCurrentlyPossibleFromLocation(curStep, cart.Location) && !r.IsDone && !r.IsInUse)
                {
                    rides.Add(r);
                    if (rides.Count > 50)
                    {
                        break;
                    }
                }
            }

            if (!rides.Any())
            {
                return(null);
            }

            foreach (Ride ride in rides)
            {
                var distStart = DistanceHelper.GetDistance(cart.Location, ride.Start);
                //if (distStart >= (curStep - ride.EarliestStart))
                //{
                toSort.Add(new RidesByDistance()
                {
                    Ride = ride,
                    DistanceFromStart = distStart,
                    DistanceToEnd     = DistanceHelper.GetDistance(cart.Location, ride.End),
                    TimeToWait        = ride.TimeToWaitIfILeaveNow(curStep, cart.Location)
                                        //DistanceToEnd = distStart + ride.StepsRequired
                });
                //}
            }

            if (toSort.Count == 0)
            {
                return(null);
            }

            return(toSort.OrderBy(r => r.DistanceFromStart).ThenBy(cur => cur.TimeToWait).FirstOrDefault().Ride);

            return(toSort.OrderBy(cur => cur.DistanceFromStart).ThenBy(cur => cur.DistanceToEnd).FirstOrDefault().Ride);

            return(rides.OrderBy(r => r.DistanceFromStart).ThenBy(r => r.LatestFinish).FirstOrDefault());

            return(rides.OrderBy(r => r.LatestStart).FirstOrDefault());
        }
Ejemplo n.º 7
0
        private void SetText()
        {
            var dist = DistanceHelper.GetDistance(_l1, _l2);

            if (dist < 1000)
            {
                _text.Text = dist.ToString("F0") + " " + Properties.Resources.MapControl_ScaleRuler_MPostfix;
            }
            else if (dist < 1000000)
            {
                _text.Text = (dist / 1000).ToString("G3") + " " + Properties.Resources.MapControl_ScaleRuler_KmPostfix;
            }
            else
            {
                _text.Text = (dist / 1000).ToString("G4") + " " + Properties.Resources.MapControl_ScaleRuler_KmPostfix;
            }
        }
Ejemplo n.º 8
0
        public Ride GetOriginalRide(int curStep, Cart cart)
        {
            List <Ride>            rides  = new List <Ride>();
            List <RidesByDistance> toSort = new List <RidesByDistance>();

            //Winning
            foreach (Ride r in Rides)
            {
                if (r.IsCurrentlyPossibleFromLocation(curStep, cart.Location) && !r.IsDone && !r.IsInUse)
                {
                    rides.Add(r);
                    if (rides.Count > 50)
                    {
                        break;
                    }
                }
            }

            if (!rides.Any())
            {
                return(null);
            }

            foreach (Ride ride in rides)
            {
                var distStart = DistanceHelper.GetDistance(cart.Location, ride.Start);

                toSort.Add(new RidesByDistance()
                {
                    Ride = ride,
                    DistanceFromStart = distStart,
                    DistanceToEnd     = DistanceHelper.GetDistance(cart.Location, ride.End)
                });
            }

            if (toSort.Count == 0)
            {
                return(null);
            }

            return(toSort.OrderBy(cur => cur.DistanceFromStart).ThenBy(cur => cur.DistanceToEnd).FirstOrDefault().Ride);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 获取周边网点
        /// </summary>
        /// <param name="locationx">经度</param>
        /// <param name="locationy">纬度</param>
        /// <returns></returns>
        public IList <BranchDTO> GetBranch(double locationx, double locationy)
        {
            IList <Branch> listBranch = this.GetALL().Where(b => b.Status == 1).ToList();
            //计算距离
            IList <BranchDTO> listBranchDTO = new List <BranchDTO>();

            foreach (Branch branch in listBranch)
            {
                BranchDTO dtoBranch = new BranchDTO(branch);
                dtoBranch.Distance = DistanceHelper.GetDistance(locationy, locationx, double.Parse(dtoBranch.Latitude ?? "24.737727"), double.Parse(dtoBranch.Longitude ?? "118.656141"));
                listBranchDTO.Add(dtoBranch);
            }

            if (listBranchDTO != null && listBranchDTO.Count > 0)
            {
                listBranchDTO = listBranchDTO.OrderBy(b => b.Distance).ToList();
            }

            listBranchDTO = listBranchDTO.Take(8).ToList();
            return(listBranchDTO);
        }
Ejemplo n.º 10
0
        public ActionResult BranchListMap()
        {
            IList <Branch> listBranch = _branchService.GetALL().Where(b => b.Status == 1).ToList();
            string         point      = RQuery["point"];
            string         _X         = "0.00"; //经度
            string         _Y         = "0.00"; //纬度

            if (!string.IsNullOrWhiteSpace(point))
            {
                string[] arrPoint = point.Split(',');

                if (arrPoint.Length > 1)
                {
                    _X = arrPoint[0]; //经度
                    _Y = arrPoint[1]; //纬度
                }
            }

            ViewBag.longitude = _X;
            ViewBag.latitude  = _Y;
            //计算距离
            IList <BranchDTO> listBranchDTO = new List <BranchDTO>();

            foreach (Branch branch in listBranch)
            {
                BranchDTO dtoBranch = new BranchDTO(branch);
                dtoBranch.Distance = DistanceHelper.GetDistance(double.Parse(_Y), double.Parse(_X), double.Parse(dtoBranch.Latitude ?? "24.737727"), double.Parse(dtoBranch.Longitude ?? "118.656141"));
                listBranchDTO.Add(dtoBranch);
            }

            if (listBranchDTO != null && listBranchDTO.Count > 0)
            {
                listBranchDTO = listBranchDTO.OrderBy(b => b.Distance).ToList();
            }

            listBranchDTO = listBranchDTO.Take(10).ToList();
            return(View(listBranchDTO));
        }
Ejemplo n.º 11
0
        public int TimeToWaitIfILeaveNow(int curStep, Location currentLocation)
        {
            var distStart = DistanceHelper.GetDistance(currentLocation, Start);

            return(EarliestStart - curStep - distStart);
        }
Ejemplo n.º 12
0
        public bool IsCurrentlyPossibleFromLocation(int currentStep, Location location)
        {
            int distanceStart = DistanceHelper.GetDistance(location, Start);

            return(IsCurrentlyPossible(currentStep) && ((distanceStart + currentStep + StepsRequired) <= LatestFinish));
        }
Ejemplo n.º 13
0
 public int GetRoughDistance(Location curLocation)
 {
     return(Convert.ToInt32(DistanceHelper.GetDistance(curLocation, Start) / 400));
 }
Ejemplo n.º 14
0
 public int GetDistance(Location curLocation)
 {
     return(DistanceHelper.GetDistance(curLocation, Start));
 }
Ejemplo n.º 15
0
        public MapView()
        {
            InitializeComponent();

            _model      = ((App)Application.Current).MapViewModel;
            DataContext = _model;

            ShowAllCommand = new DelegateCommand(ShowAll, CanShowAll);

            Map.MapProvider = GMapProviders.GoogleTerrainMap;

            Map.Layers = new ObservableCollection <IGMapElementsLayer>();
            Map.Layers.Clear();
            Map.Layers.Add(ShapesLayer);
            Map.Layers.Add(PointsLayer);

            ResourceDictionary res = ResourceUtil.GetRelativeResourceDictionary(@"Themes\GeoLayoutTheme.xaml");

            AddPointLayer.PanelUI     = new AddPointMapView();
            AddPointLayer.LayerAction = lng => {
                _model.GeoLayoutBuildingService.WaypointBuilder.Latitude  = lng.Lat;
                _model.GeoLayoutBuildingService.WaypointBuilder.Longitude = lng.Lng;
                _model.GeoLayoutBuildingService.WaypointBuilder.Apply();
            };
            AddPointLayer.IsActive   = true;
            AddPointLayer.MapControl = Map;

            InitalizeLayerButtons(AddPointLayer);

            AddPointLayer.PropertyChanged += (sender, args) => {
                if (args.PropertyName == "Point")
                {
                    var point = AddPointLayer.Point;
                    _model.GeoLayoutBuildingService.WaypointBuilder.SetPosition(point.Lat, point.Lng);

                    if (!Map.GMapControl.ViewArea.Contains(AddPointLayer.Point))
                    {
                        Map.GMapControl.Position = AddPointLayer.Point;
                    }
                }
            };

            ShiftPointLayer.Content     = new ShiftPointMapView();
            ShiftPointLayer.ShiftAction = (marker, latLng) => {
                if (marker.Data is Waypoint wpt)
                {
                    wpt.Location = new GeoLocation(latLng.Lat, latLng.Lng, wpt.Location.Elevation);
                }
            };
            ShiftPointLayer.PropertyChanged += (sender, args) => {
                if (args.PropertyName == "CurrentPosition")
                {
                    _model.GeoLayoutBuildingService.ShiftModifier.Location = new GeoLocation(
                        ShiftPointLayer.CurrentPosition.Lat,
                        ShiftPointLayer.CurrentPosition.Lng,
                        _model.GeoLayoutBuildingService.ShiftModifier.SelectedWaypoint?.Location.Elevation ?? 0.0);
                }
            };
            ShiftPointLayer.MapControl = Map;

            _model.GeoLayoutBuildingService.WaypointBuilder.PropertyChanged += (sender, args) => {
                if (args.PropertyName == "Latitude" || args.PropertyName == "Longitude")
                {
                    var builder = _model.GeoLayoutBuildingService.WaypointBuilder;

                    AddPointLayer.Point = new PointLatLng(builder.Latitude, builder.Longitude);
                }
            };

            var multiRulerTextBlock = new TextBlock()
            {
                Margin = new Thickness(3)
            };

            MultiRulerToolLayer.MapControl    = Map;
            MultiRulerToolLayer.Ok.Visibility = Visibility.Collapsed;
            MultiRulerToolLayer.PanelUI       = multiRulerTextBlock;
            MultiRulerToolLayer.Close.Style   = (Style)res["MapToolButtonStyle"];
            MultiRulerToolLayer.Close.Content = new Image {
                Source = new BitmapImage(new Uri("../Images/Delete.png", UriKind.Relative))
            };
            MultiRulerToolLayer.RouteChanged += (sender, args) => {
                var c = MultiRulerToolLayer.Coordinates;

                double dist = 0.0;
                for (int i = 1; i < c.Count; i++)
                {
                    dist += DistanceHelper.GetDistance(c[i], c[i - 1]);
                }

                if (dist < 1000)
                {
                    multiRulerTextBlock.Text = dist.ToString("F0") + " " + Nordwest.Wpf.Controls.Properties.Resources.MapControl_ScaleRuler_MPostfix;
                }
                else if (dist < 1000000)
                {
                    multiRulerTextBlock.Text = (dist / 1000).ToString("G3") + " " + Nordwest.Wpf.Controls.Properties.Resources.MapControl_ScaleRuler_KmPostfix;
                }
                else
                {
                    multiRulerTextBlock.Text = (dist / 1000).ToString("G4") + " " + Nordwest.Wpf.Controls.Properties.Resources.MapControl_ScaleRuler_KmPostfix;
                }
            };

            RouteToolLayer.MapControl      = Map;
            RouteToolLayer.PanelUI         = new CreateProfileMapView();
            RouteToolLayer.RouteToolAction = points => {
                _model.GeoLayoutBuildingService.ProfileBuilder.Build(points.ConvertAll(p => new Waypoint("", new GeoLocation(p.Lat, p.Lng, 0.0))));
            };
            InitalizeLayerButtons(RouteToolLayer);

            RectangleToolLayer.MapControl     = Map;
            RectangleToolLayer.RectToolAction = (corner, p1, p2) => {
                _model.GeoLayoutBuildingService.GridBuilder.SetupWithGridFrame(new GridFrame(
                                                                                   new GeoLocation(corner.Lat, corner.Lng, 0),
                                                                                   new GeoLocation(p1.Lat, p1.Lng, 0),
                                                                                   new GeoLocation(p2.Lat, p2.Lng, 0)));
                _model.GeoLayoutBuildingService.GridBuilder.Apply();
            };
            RectangleToolLayer.PanelUI = new CreateGridMapView();
            InitalizeLayerButtons(RectangleToolLayer);

            PolygonToolLayer.MapControl = Map;
            InitalizeLayerButtons(PolygonToolLayer);
            PolygonToolLayer.PanelUI           = new CropByPolygonMapView();
            PolygonToolLayer.PolygonToolAction = lngs => {
                var crop = _model.GeoLayoutBuildingService.CropModifier;

                crop.PolygonVertices.Clear();

                lngs.ConvertAll(l => new Waypoint("", new GeoLocation(l.Lat, l.Lng, 0)))
                .ForEach(wpt => crop.PolygonVertices.Add(wpt));

                crop.Apply();
            };

            PointsLayer.SelectedItems.CollectionChanged += SelectedItems_CollectionChanged;
            _model.WaypointsService.SelectedWaypoints.CollectionChanged += SelectedWaypoints_CollectionChanged;
            _model.GroupsService.Shapes.CollectionChanged += Shapes_CollectionChanged;
        }
 public override double Calculate(int from, int to, DoubleMatrix coordinates)
 {
     return(DistanceHelper.GetDistance(DistanceMeasure.RoundedEuclidean, coordinates[from, 0], coordinates[from, 1], coordinates[to, 0], coordinates[to, 1]));
 }
Ejemplo n.º 17
0
        public ActionResult Distance()
        {
            var distance = DistanceHelper.GetDistance(31.97603, 118.761916, 31.97601, 118.761916);

            return(Content(distance.ToString()));
        }