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();
                }
            }
        }
Пример #2
0
        // 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
        }