Exemplo n.º 1
0
void WaypointAltitudeFromTerrain(WAYPOINT* Temp) {
  double myalt = AltitudeFromTerrain(Temp->Latitude, Temp->Longitude);
  if (myalt>0) {
    Temp->Altitude = myalt;
  } else {
    // error, can't find altitude for waypoint!
  }
}
Exemplo n.º 2
0
void UpdateTargetAltitude(TASK_POINT& TskPt) {
    TskPt.AATTargetAltitude = AltitudeFromTerrain(TskPt.AATTargetLat, TskPt.AATTargetLon);
    if(!DoOptimizeRoute() && AATEnabled) {
        // for AAT task, use center Alt if target point alt is less than center...
        TskPt.AATTargetAltitude = std::max(WayPointList[TskPt.Index].Altitude, TskPt.AATTargetAltitude);
    }
    if(TskPt.AATTargetAltitude <= 0) {
        TskPt.AATTargetAltitude = WayPointList[TskPt.Index].Altitude;
    }
}
Exemplo n.º 3
0
void
WayPointFile::check_altitude(Waypoint &new_waypoint,
                             const RasterTerrain *terrain,
                             bool alt_ok)
{
  if (terrain == NULL || alt_ok)
    return;

  // Load waypoint altitude from terrain
  const short t_alt = AltitudeFromTerrain(new_waypoint.Location, *terrain);
  if (RasterBuffer::is_special(t_alt)) {
    new_waypoint.Altitude = fixed_zero;
  } else { // TERRAIN_VALID
    new_waypoint.Altitude = (fixed)t_alt;
  }
}
Exemplo n.º 4
0
void PGTaskMgr::Optimize(NMEA_INFO *Basic, DERIVED_INFO *Calculated) {
    if (((size_t) ActiveTaskPoint) >= m_Task.size()) {
        return;
    }
    
    double w0lat = Basic->Latitude;
    double w0lon = Basic->Longitude;
    
    ProjPt PrevPos;
    LatLon2Grid(deg2rad(w0lat), deg2rad(w0lon), PrevPos.m_Y, PrevPos.m_X);
    
    double NextAltitude = Basic->Altitude;
    for (size_t i = ActiveTaskPoint; i < m_Task.size(); ++i) {
        
        // Calc Arrival Altitude
        double w1lat, w1lon;
        getOptimized(i, w1lat, w1lon);
        double Distance, Bearing;
        DistanceBearing(w0lat, w0lon, w1lat, w1lon, &Distance, &Bearing);
        double GrndAlt = AltitudeFromTerrain(w1lat, w1lon);
        if(NextAltitude > GrndAlt) {
            NextAltitude  -= GlidePolar::MacCreadyAltitude( MACCREADY, Distance, Bearing, Calculated->WindSpeed, Calculated->WindBearing, 0, 0, true, 0);
        }

        if(NextAltitude < GrndAlt) {
            NextAltitude = GrndAlt;
        }
        
        // Optimize
        if ((i + 1) < m_Task.size()) {
            m_Task[i]->Optimize(PrevPos, m_Task[i + 1]->getOptimized(), NextAltitude);
        } else {
            m_Task[i]->Optimize(PrevPos, ProjPt::null, NextAltitude);
        }

        // Update previous Position for Next Loop
        PrevPos = m_Task[i]->getOptimized();
        getOptimized(i, w0lat, w0lon);
    }
}