SEAPORT,
RUNWAY,
TAXIWAY,
+ PAVEMENT,
PARK_STAND,
FIX,
VOR,
const SGGeod& geod() const
{ return mPosition; }
+ /**
+ * Compute the cartesian position associated with this object
+ */
+ SGVec3d cart() const;
+
SGBucket bucket() const;
double latitude() const
virtual bool pass(FGPositioned* aPos) const
{ return true; }
+ virtual Type minType() const
+ { return INVALID; }
+
+ virtual Type maxType() const
+ { return INVALID; }
+
+ /**
+ * Test if this filter has a non-empty type range
+ */
+ bool hasTypeRange() const;
+
+ /**
+ * Assuming hasTypeRange is true, test if a given type passes the range
+ */
+ bool passType(Type aTy) const;
+
bool operator()(FGPositioned* aPos) const
{ return pass(aPos); }
};
*/
static FGPositionedRef findNextWithPartialId(FGPositionedRef aCur, const std::string& aId, Filter* aFilter = NULL);
+ /**
+ * As above, but searches using an offset index
+ */
+ static FGPositionedRef findWithPartialId(const std::string& aId, Filter* aFilter, int aOffset, bool& aNext);
+
+ /**
+ * As above, but search names instead of idents
+ */
+ static FGPositionedRef findWithPartialName(const std::string& aName, Filter* aFilter, int aOffset, bool& aNext);
+
/**
* Find all items with the specified ident, and return then sorted by
* distance from a position
*/
static List findAllWithIdentSortedByRange(const std::string& aIdent, const SGGeod& aPos, Filter* aFilter = NULL);
+ /**
+ * As above, but searches names instead of idents
+ */
+ static List findAllWithNameSortedByRange(const std::string& aName, const SGGeod& aPos, Filter* aFilter = NULL);
+
/**
* Find the closest item to a position, which pass the specified filter
* A cutoff range in NM must be specified, to constrain the search acceptably.
* Very large cutoff values will make this slow.
*
* @result The matches (possibly less than N, depending on the filter and cutoff),
- * sorted by distance from the search pos
+ * sorted by distance from the search pos
* @param aN - number of matches to find
* @param aCutoffNm - maximum distance to search within, in nautical miles
*/
static List findClosestN(const SGGeod& aPos, unsigned int aN, double aCutoffNm, Filter* aFilter = NULL);
+ /**
+ * Find the closest match based on partial id (with an offset to allow selecting the n-th closest).
+ * Cutoff distance is limited internally, to avoid making this very slow.
+ */
+ static FGPositionedRef findClosestWithPartialId(const SGGeod& aPos, const std::string& aId, Filter* aFilter, int aOffset, bool& aNext);
+
+ /**
+ * As above, but matches on name
+ */
+ static FGPositionedRef findClosestWithPartialName(const SGGeod& aPos, const std::string& aName, Filter* aFilter, int aOffset, bool& aNext);
+
+ /**
+ * Map a candidate type string to a real type. Returns INVALID if the string
+ * does not correspond to a defined type.
+ */
+ static Type typeFromName(const std::string& aName);
/**
- * Debug helper, map a type to a human-readable string
+ * Map a type to a human-readable string
*/
static const char* nameForType(Type aTy);
+
+ static FGPositioned* createUserWaypoint(const std::string& aIdent, const SGGeod& aPos);
protected:
FGPositioned(Type ty, const std::string& aIdent, const SGGeod& aPos, bool aIndex = true);