-SGVec3d FGNavRecord::get_cart() const
-{
- return SGVec3d::fromGeod(geod());
-}
-
-
-static FGPositioned::Type
-mapRobinTypeToFGPType(int aTy)
-{
- switch (aTy) {
- // case 1:
- case 2: return FGPositioned::NDB;
- case 3: return FGPositioned::VOR;
- case 4: return FGPositioned::LOC;
- case 5: return FGPositioned::ILS;
- case 6: return FGPositioned::GS;
- case 7: return FGPositioned::OM;
- case 8: return FGPositioned::MM;
- case 9: return FGPositioned::IM;
- case 12:
- case 13: return FGPositioned::DME;
- case 99: return FGPositioned::INVALID; // end-of-file code
- default:
- throw sg_range_exception("Got a nav.dat type we don't recgonize", "FGNavRecord::createFromStream");
- }
-}
-
-FGNavRecord* FGNavRecord::createFromStream(std::istream& aStream)
-{
- int rawType;
- aStream >> rawType;
- if (aStream.eof()) {
- return NULL; // happens with, eg, carrier_nav.dat
- }
-
- Type type = mapRobinTypeToFGPType(rawType);
- if (type == INVALID) return NULL;
-
- double lat, lon, elev_ft, multiuse;
- int freq, range;
- std::string apt_id, name, ident;
- aStream >> lat >> lon >> elev_ft >> freq >> range >> multiuse >> ident;
- getline(aStream, name);
-
- // silently multiply adf frequencies by 100 so that adf
- // vs. nav/loc frequency lookups can use the same code.
- if (type == NDB) {
- freq *= 100;
- }
-
- FGNavRecord* result = new FGNavRecord(type, ident,
- simgear::strutils::strip(name), SGGeod::fromDegFt(lon, lat, elev_ft),
- freq, range, multiuse);
-
- return result;
-}
-