Fix runway elevations when threshold.xml is used.
SGGeodesy::direct doesn't preserve elevations, oops.
This commit is contained in:
parent
f48ad2f20b
commit
f3dec6a64d
2 changed files with 8 additions and 12 deletions
|
@ -61,18 +61,15 @@ FGRunwayBase::FGRunwayBase(PositionedID aGuid, Type aTy, const string& aIdent,
|
||||||
|
|
||||||
SGGeod FGRunwayBase::pointOnCenterline(double aOffset) const
|
SGGeod FGRunwayBase::pointOnCenterline(double aOffset) const
|
||||||
{
|
{
|
||||||
SGGeod result;
|
|
||||||
double dummyAz2;
|
|
||||||
double halfLengthMetres = lengthM() * 0.5;
|
double halfLengthMetres = lengthM() * 0.5;
|
||||||
|
|
||||||
SGGeodesy::direct(mPosition, _heading,
|
SGGeod result = SGGeodesy::direct(mPosition, _heading,
|
||||||
aOffset - halfLengthMetres,
|
aOffset - halfLengthMetres);
|
||||||
result, dummyAz2);
|
result.setElevationM(mPosition.getElevationM());
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SGGeod FGRunwayBase::pointOffCenterline(double aOffset, double lateralOffset) const
|
SGGeod FGRunwayBase::pointOffCenterline(double aOffset, double lateralOffset) const
|
||||||
{
|
{
|
||||||
SGGeod result;
|
SGGeod result;
|
||||||
|
|
|
@ -997,7 +997,7 @@ FGPositioned* NavDataCache::NavDataCachePrivate::loadById(sqlite3_int64 rowid)
|
||||||
double lat = sqlite3_column_double(loadPositioned, 6);
|
double lat = sqlite3_column_double(loadPositioned, 6);
|
||||||
double elev = sqlite3_column_double(loadPositioned, 7);
|
double elev = sqlite3_column_double(loadPositioned, 7);
|
||||||
SGGeod pos = SGGeod::fromDegM(lon, lat, elev);
|
SGGeod pos = SGGeod::fromDegM(lon, lat, elev);
|
||||||
|
|
||||||
reset(loadPositioned);
|
reset(loadPositioned);
|
||||||
|
|
||||||
switch (ty) {
|
switch (ty) {
|
||||||
|
@ -1562,10 +1562,9 @@ void NavDataCache::updateRunwayThreshold(PositionedID runwayID, const SGGeod &aT
|
||||||
|
|
||||||
// compute the new runway center, based on the threshold lat/lon and length,
|
// compute the new runway center, based on the threshold lat/lon and length,
|
||||||
double offsetFt = (0.5 * d->runwayLengthFt(runwayID));
|
double offsetFt = (0.5 * d->runwayLengthFt(runwayID));
|
||||||
SGGeod newCenter;
|
SGGeod newCenter= SGGeodesy::direct(aThreshold, aHeading, offsetFt * SG_FEET_TO_METER);
|
||||||
double dummy;
|
newCenter.setElevationM(aThreshold.getElevationM());
|
||||||
SGGeodesy::direct(aThreshold, aHeading, offsetFt * SG_FEET_TO_METER, newCenter, dummy);
|
|
||||||
|
|
||||||
// now update the positional data
|
// now update the positional data
|
||||||
updatePosition(runwayID, newCenter);
|
updatePosition(runwayID, newCenter);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue