private void AddRoute(MyWaypoint startPoint, MyWaypoint endPoint, string gvName) { List <MyWaypoint> routePoints = GetRoute(startPoint, endPoint); // create new GV and add the waypoints if (m_root.CurrentScenario.Children.Contains(AgESTKObjectType.eGroundVehicle, gvName)) { MessageBox.Show(gvName + " already exists, please pick a different name"); } else { if (routePoints != null && routePoints.Count > 0) { double turnRadius = 2.0; // meter double granularity = 1.1; // meter m_root.UnitPreferences.SetCurrentUnit("Distance", "m"); switch (speedUnitsComboBox.SelectedItem.ToString()) { case "km/h": //m_root.UnitPreferences.SetCurrentUnit("Distance", "km"); m_root.UnitPreferences.SetCurrentUnit("Time", "hr"); //turnRadius /= 1000.0; //granularity /= 1000.0; speedUnitMultiplier = 1000.0; break; case "mph": //m_root.UnitPreferences.SetCurrentUnit("Distance", "mi"); m_root.UnitPreferences.SetCurrentUnit("Time", "hr"); //turnRadius /= 1609.44; //granularity /= 1609.44; speedUnitMultiplier = 1609.44; break; case "m/s": //m_root.UnitPreferences.SetCurrentUnit("Distance", "m"); m_root.UnitPreferences.SetCurrentUnit("Time", "sec"); speedUnitMultiplier = 1.0; break; } switch (altUnitsComboBox.SelectedItem.ToString()) { case "m": altUnitMultiplier = 1.0; break; case "km": altUnitMultiplier = 1000.0; break; case "ft": altUnitMultiplier = 0.3048; break; } IAgStkObject gvObject = m_root.CurrentScenario.Children.New(AgESTKObjectType.eGroundVehicle, gvName); IAgGroundVehicle gv = gvObject as IAgGroundVehicle; gv.SetRouteType(AgEVePropagatorType.ePropagatorGreatArc); IAgVePropagatorGreatArc prop = gv.Route as IAgVePropagatorGreatArc; foreach (MyWaypoint thisPt in routePoints) { IAgVeWaypointsElement thisVeWaypoint = prop.Waypoints.Add(); thisVeWaypoint.Latitude = thisPt.Latitude; thisVeWaypoint.Longitude = thisPt.Longitude; thisVeWaypoint.Altitude = thisPt.Altitude * altUnitMultiplier; thisVeWaypoint.Speed = Convert.ToDouble(speedTextBox.Text) * speedUnitMultiplier; thisVeWaypoint.TurnRadius = turnRadius; } if (terrainCheckBox.Checked) { prop.SetAltitudeRefType(AgEVeAltitudeRef.eWayPtAltRefTerrain); IAgVeWayPtAltitudeRefTerrain altRef = prop.AltitudeRef as IAgVeWayPtAltitudeRefTerrain; altRef.Granularity = granularity; altRef.InterpMethod = AgEVeWayPtInterpMethod.eWayPtEllipsoidHeight; } prop.Propagate(); } } }
// old method /* public List<MyWaypoint> CreateRoute(MyWaypoint startPoint, MyWaypoint endPoint) * { * // create route from waypointString * RouteRequest routeRequest = new RouteRequest(); * * // Set the credentials using a valid Bing Maps key * routeRequest.Credentials = new BingRouteService.Credentials(); * routeRequest.Credentials.ApplicationId = m_bingMapKey; * * // tell them that we want points along the route * routeRequest.Options = new RouteOptions(); * routeRequest.Options.RoutePathType = RoutePathType.Points; * * //Parse user data to create array of waypoints * BingRouteService.Waypoint[] waypoints = new BingRouteService.Waypoint[2]; * * BingRouteService.Waypoint point1 = new BingRouteService.Waypoint(); * BingRouteService.Location location1 = new BingRouteService.Location(); * location1.Latitude = startPoint.Latitude; * location1.Longitude = startPoint.Longitude; * point1.Location = location1; * point1.Description = "Start"; * waypoints[0] = point1; * * BingRouteService.Waypoint point2 = new BingRouteService.Waypoint(); * BingRouteService.Location location2 = new BingRouteService.Location(); * location2.Latitude = endPoint.Latitude; * location2.Longitude = endPoint.Longitude; * point2.Location = location2; * point2.Description = "End"; * waypoints[1] = point2; * * routeRequest.Waypoints = waypoints; * * // Make the calculate route request * RouteServiceClient routeService = new RouteServiceClient("BasicHttpBinding_IRouteService"); * RouteResponse routeResponse = routeService.CalculateRoute(routeRequest); * * // pull out the lat/lon values * List<MyWaypoint> returnPoints = new List<MyWaypoint>(); * if (routeResponse.Result.Legs.Length > 0) * { * //MessageBox.Show("Distance: " + routeResponse.Result.Summary.Distance.ToString() * // + " Time: " + routeResponse.Result.Summary.TimeInSeconds.ToString()); * foreach (BingRouteService.Location thisPt in routeResponse.Result.RoutePath.Points) * { * MyWaypoint thisPoint = new MyWaypoint(); * * thisPoint.Latitude = thisPt.Latitude; * thisPoint.Longitude = thisPt.Longitude; * //thisPoint.Altitude = GetAltitude(thisPoint.Latitude, thisPoint.Longitude); * thisPoint.Altitude = 0.0; * * returnPoints.Add(thisPoint); * } * } * * return returnPoints; * } */ public void PopulateGvRoute(string gvName, List <Directions.MyWaypoint> routePoints, double speedValue, string speedUnits, bool useTerrain) { //MessageBox.Show($"Populate GvRoute method called! Name is {gvName}");// FOR DEBUGGING PURPOSES double turnRadius = 15.0; // meter double granularity = 100; // meter switch (speedUnits) { case "km/h": m_root.UnitPreferences.SetCurrentUnit("Distance", "km"); m_root.UnitPreferences.SetCurrentUnit("Time", "hr"); turnRadius /= 1000.0; granularity /= 1000.0; break; case "mph": m_root.UnitPreferences.SetCurrentUnit("Distance", "mi"); m_root.UnitPreferences.SetCurrentUnit("Time", "hr"); turnRadius /= 1609.44; granularity /= 1609.44; break; case "m/s": m_root.UnitPreferences.SetCurrentUnit("Distance", "m"); m_root.UnitPreferences.SetCurrentUnit("Time", "sec"); break; } IAgStkObject gvObject = m_root.CurrentScenario.Children.New(AgESTKObjectType.eGroundVehicle, gvName); IAgGroundVehicle gv = gvObject as IAgGroundVehicle; gv.Graphics.WaypointMarker.IsWaypointMarkersVisible = false; //gv.Graphics.WaypointMarker.IsTurnMarkersVisible = false; IAgVOModel gvModel = gv.VO.Model; gvModel.ModelType = AgEModelType.eModelFile; IAgVOModelFile modelFile = gvModel.ModelData as IAgVOModelFile; if (File.Exists(installDir + @"Plugins\GreatArcPlugin\Model\mercslk.mdl")) { modelFile.Filename = installDir + @"Plugins\GreatArcPlugin\Model\mercslk.mdl"; } gv.VO.Route.InheritTrackDataFrom2D = true; gv.SetRouteType(AgEVePropagatorType.ePropagatorGreatArc); IAgVePropagatorGreatArc prop = gv.Route as IAgVePropagatorGreatArc; foreach (Directions.MyWaypoint thisPt in routePoints) { IAgVeWaypointsElement thisVeWaypoint = prop.Waypoints.Add(); thisVeWaypoint.Latitude = thisPt.Latitude; thisVeWaypoint.Longitude = thisPt.Longitude; thisVeWaypoint.Altitude = thisPt.Altitude; thisVeWaypoint.Speed = speedValue; thisVeWaypoint.TurnRadius = turnRadius; } if (useTerrain) { prop.SetAltitudeRefType(AgEVeAltitudeRef.eWayPtAltRefTerrain); IAgVeWayPtAltitudeRefTerrain altRef = prop.AltitudeRef as IAgVeWayPtAltitudeRefTerrain; altRef.Granularity = granularity; altRef.InterpMethod = AgEVeWayPtInterpMethod.eWayPtTerrainHeight; } prop.Propagate(); //MessageBox.Show("GV route propagated!");// FOR DEBUGGING PURPOSES }