[Positioning] Include algorithm name in results

This commit is contained in:
Matteo Cypriani 2011-03-31 19:42:35 +02:00
parent 670dfdc867
commit 4752198ce7
14 changed files with 44 additions and 22 deletions

View File

@ -26,8 +26,6 @@
normaux. normaux.
- Positioning - Positioning
° Afficher le nom de chaque algorithme lors de la sortie d'un
résultat.
° Pour une requête, la sortie des résultats de tous les algos ° Pour une requête, la sortie des résultats de tous les algos
devrait se faire simultanément sur le medium de sortie, ce qui devrait se faire simultanément sur le medium de sortie, ce qui
permettrait par exemple de créer un tableau pour l'affichage CSV permettrait par exemple de créer un tableau pour l'affichage CSV

View File

@ -5,5 +5,5 @@
Result CartographyAlgorithm::compute(const Request &request) Result CartographyAlgorithm::compute(const Request &request)
{ {
Point3D position(select_point(request)) ; Point3D position(select_point(request)) ;
return Result(&request, position) ; return Result(&request, position, name) ;
} }

View File

@ -10,7 +10,7 @@ protected:
float friis_index(const AccessPoint *const ap) const ; float friis_index(const AccessPoint *const ap) const ;
public: public:
FBCM(void) {} FBCM(void): PositioningAlgorithm("FBCM") {}
~FBCM(void) {} ~FBCM(void) {}
float estimate_distance(const Measurement &measurement) ; float estimate_distance(const Measurement &measurement) ;

View File

@ -12,7 +12,7 @@ Result FRBHMBasic::compute(const Request &_request)
compute_ap_distance_circles() ; compute_ap_distance_circles() ;
Point3D position(multilaterate_2d(closest_in_ss->get_z())) ; Point3D position(multilaterate_2d(closest_in_ss->get_z())) ;
return Result(request, position) ; return Result(request, position, name) ;
} }

View File

@ -13,7 +13,8 @@ protected:
float friis_index(const AccessPoint *const ap) const ; float friis_index(const AccessPoint *const ap) const ;
public: public:
FRBHMBasic(void): closest_in_ss(NULL) {} FRBHMBasic(void):
PositioningAlgorithm("FRBHMBasic"), closest_in_ss(NULL) {}
~FRBHMBasic(void) {} ~FRBHMBasic(void) {}
/** @name Operations */ /** @name Operations */

View File

@ -7,7 +7,7 @@
class InterlinkNetworks: public MultilaterationAlgorithm class InterlinkNetworks: public MultilaterationAlgorithm
{ {
public: public:
InterlinkNetworks(void) {} InterlinkNetworks(void): PositioningAlgorithm("InterlinkNetworks") {}
~InterlinkNetworks(void) {} ~InterlinkNetworks(void) {}
float estimate_distance(const Measurement &measurement) ; float estimate_distance(const Measurement &measurement) ;

View File

@ -58,7 +58,7 @@ Result MultilaterationAlgorithm::compute(const Request &_request)
compute_ap_distance_circles() ; compute_ap_distance_circles() ;
Point3D position(multilaterate()) ; Point3D position(multilaterate()) ;
return Result(request, position) ; return Result(request, position, name) ;
} }

View File

@ -27,6 +27,8 @@ const string OutputCSV::result_to_csv(const Result &result)
else else
csv_line << ";;;" ; csv_line << ";;;" ;
csv_line << ';' << result.get_algorithm() ;
Point3D position = result.get_position() ; Point3D position = result.get_position() ;
csv_line csv_line
<< ';' << position.get_x() << ';' << position.get_x()

View File

@ -7,8 +7,13 @@
/// Super-class of all positioning algorithms /// Super-class of all positioning algorithms
class PositioningAlgorithm class PositioningAlgorithm
{ {
protected:
/// Name of the algorithm
const std::string name ;
public: public:
PositioningAlgorithm(void) {} PositioningAlgorithm(const std::string _name = "UnknownAlgorithm"):
name(_name) {}
virtual ~PositioningAlgorithm(void) {} virtual ~PositioningAlgorithm(void) {}
virtual Result compute(const Request &request) = 0 ; virtual Result compute(const Request &request) = 0 ;

View File

@ -13,7 +13,7 @@
class RADAR: public CartographyAlgorithm class RADAR: public CartographyAlgorithm
{ {
public: public:
RADAR(void) {} RADAR(void): PositioningAlgorithm("RADAR") {}
~RADAR(void) {} ~RADAR(void) {}
const ReferencePoint& select_point(const Request &request) ; const ReferencePoint& select_point(const Request &request) ;

View File

@ -14,8 +14,8 @@ Result RealPosition::compute(const Request &request)
Point3D *coordinates = Point3D *coordinates =
static_cast<Point3D*>( static_cast<Point3D*>(
calibration_request->get_reference_point()) ; calibration_request->get_reference_point()) ;
return Result(&request, *coordinates) ; return Result(&request, *coordinates, name) ;
} }
return Result(&request) ; return Result(&request, name) ;
} }

View File

@ -11,6 +11,8 @@
class RealPosition: public PositioningAlgorithm class RealPosition: public PositioningAlgorithm
{ {
public: public:
RealPosition(void): PositioningAlgorithm("RealPosition") {}
Result compute(const Request &request) ; Result compute(const Request &request) ;
} ; } ;

View File

@ -11,6 +11,7 @@ const Result& Result::operator=(const Result &source)
if (this == &source) if (this == &source)
return *this ; return *this ;
algorithm = source.algorithm ;
position = source.position ; position = source.position ;
request = source.request ; request = source.request ;
@ -21,6 +22,7 @@ const Result& Result::operator=(const Result &source)
bool Result::operator==(const Result &source) const bool Result::operator==(const Result &source) const
{ {
return return
algorithm == source.algorithm &&
position == source.position && position == source.position &&
request == source.request ; request == source.request ;
} }
@ -30,12 +32,11 @@ bool Result::operator==(const Result &source) const
std::ostream& operator<<(std::ostream &os, const Result &r) std::ostream& operator<<(std::ostream &os, const Result &r)
{ {
if (r.request == NULL) if (r.request == NULL)
os << "For an unknown request, the result is: " ; os << "For an unknown request, the " ;
else else
os os << "For the following request: " << *(r.request) << "\nThe " ;
<< "For the following request: " os
<< *(r.request) << "result of the algorithm " << r.algorithm
<< "\nThe result is: " ; << " is: " << r.position ;
os << r.position ;
return os ; return os ;
} }

View File

@ -5,22 +5,29 @@ class Request ;
#include "point3d.hh" #include "point3d.hh"
#include <string>
/// Represents a result computed by a positioning algorithm /// Represents a result computed by a positioning algorithm
class Result class Result
{ {
protected: protected:
Point3D position ; Point3D position ;
Request *request ; Request *request ;
std::string algorithm ;
public: public:
Result(const Request *_request = NULL): Result(const Request *_request = NULL,
request(const_cast<Request*>(_request)) {} const std::string &_algorithm = "UnknownAlgorithm"):
Result(const Request *_request, const Point3D &_position): request(const_cast<Request*>(_request)), algorithm(_algorithm) {}
position(_position), request(const_cast<Request*>(_request)) {} Result(const Request *_request, const Point3D &_position,
const std::string &_algorithm):
position(_position), request(const_cast<Request*>(_request)),
algorithm(_algorithm) {}
~Result(void) {} ~Result(void) {}
/** @name Read accessors */ /** @name Read accessors */
//@{ //@{
const std::string& get_algorithm(void) const ;
const Point3D& get_position(void) const ; const Point3D& get_position(void) const ;
const Request* get_request(void) const ; const Request* get_request(void) const ;
//@} //@}
@ -41,6 +48,12 @@ public:
/* *** Read accessors *** */ /* *** Read accessors *** */
inline const std::string& Result::get_algorithm() const
{
return algorithm ;
}
inline const Point3D& Result::get_position() const inline const Point3D& Result::get_position() const
{ {
return position ; return position ;