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); }
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); }
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); }
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; }
public bool DoIHaveToWaitIfILeaveNow(int curStep, Location currentLocation) { var distStart = DistanceHelper.GetDistance(currentLocation, Start); if ((curStep + distStart) >= EarliestStart) { return(true); } return(false); }
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()); }
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; } }
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); }
/// <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); }
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)); }
public int TimeToWaitIfILeaveNow(int curStep, Location currentLocation) { var distStart = DistanceHelper.GetDistance(currentLocation, Start); return(EarliestStart - curStep - distStart); }
public bool IsCurrentlyPossibleFromLocation(int currentStep, Location location) { int distanceStart = DistanceHelper.GetDistance(location, Start); return(IsCurrentlyPossible(currentStep) && ((distanceStart + currentStep + StepsRequired) <= LatestFinish)); }
public int GetRoughDistance(Location curLocation) { return(Convert.ToInt32(DistanceHelper.GetDistance(curLocation, Start) / 400)); }
public int GetDistance(Location curLocation) { return(DistanceHelper.GetDistance(curLocation, Start)); }
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])); }
public ActionResult Distance() { var distance = DistanceHelper.GetDistance(31.97603, 118.761916, 31.97601, 118.761916); return(Content(distance.ToString())); }