Commit dd4ccd3c authored by thillux's avatar thillux
Browse files

removed Position struct

parent 6456c13f
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -34,10 +34,10 @@ GeographicNode::GeographicNode() {
}

GeographicNode::GeographicNode(int id, double lat, double lon)
    : GeographicPosition<double>(lat, lon), _id(id) {
    : GeographicPosition(lat, lon), _id(id) {
}

GeographicNode::GeographicNode(const GeographicNode& other) : GeographicPosition<double>(other._latitude, other._longitude), _id(other._id) {
GeographicNode::GeographicNode(const GeographicNode& other) : GeographicPosition(other._latitude, other._longitude), _id(other._id) {
}

GeographicNode& GeographicNode::operator=(const GeographicNode& other)  {
+1 −1
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@
#include <vector>
#include <memory>

class GeographicNode : public GeographicPosition<double> {
class GeographicNode : public GeographicPosition {
   public:
    GeographicNode();
    GeographicNode(const GeographicNode& other);
+9 −10
Original line number Diff line number Diff line
#ifndef GEOGRAPHICPOSITION_HPP
#define GEOGRAPHICPOSITION_HPP

#include "util/Util.hpp"
#include <cassert>
#include <utility>

typedef std::pair<double,double> GeographicPositionTuple;

template <typename T>
class GeographicPosition {
public:
    GeographicPosition() : _latitude(0), _longitude(0), _valid(false) {}

    GeographicPosition(T latitude, T longitude) : _latitude(latitude), _longitude(longitude), _valid(true) {
        assert(-90.0 <= latitude && latitude <= 90.0);
        assert(-180.0 <= longitude && longitude <= 180.0);
    GeographicPosition(double latitude, double longitude) : _latitude(latitude), _longitude(longitude), _valid(true) {
        assert(Util::checkBounds(latitude, longitude));
    }

    virtual void setLat(T val) {
    virtual void setLat(double val) {
        _latitude = val;
    }

    virtual void setLon(T val) {
    virtual void setLon(double val) {
        _longitude = val;
    }

    T lat() {
    double lat() {
        return _latitude;
    }

    T lon() {
    double lon() {
        return _longitude;
    }

@@ -45,8 +44,8 @@ public:
    }

protected:
    T _latitude;
    T _longitude;
    double _latitude;
    double _longitude;
    bool _valid;
};

+13 −17
Original line number Diff line number Diff line
@@ -41,42 +41,38 @@ static const double DEG_TO_RAD = 0.017453292519943295769236907684886;

// http://blog.julien.cayzac.name/2008/10/arc-and-distance-between-two-points-on.html
// use the law of haversines for numerical stability
double GeometricHelpers::sphericalDist(Position& from, Position& to) {
    double latitudeArc = (from.lat - to.lat) * DEG_TO_RAD;
    double longitudeArc = (from.lon - to.lon) * DEG_TO_RAD;
double GeometricHelpers::sphericalDist(GeographicPosition& from, GeographicPosition& to) {
    double latitudeArc = (from.lat() - to.lat()) * DEG_TO_RAD;
    double longitudeArc = (from.lon() - to.lon()) * DEG_TO_RAD;
    double latitudeH = sin(latitudeArc * 0.5);
    latitudeH *= latitudeH;
    double lontitudeH = sin(longitudeArc * 0.5);
    lontitudeH *= lontitudeH;
    double tmp = cos(from.lat * DEG_TO_RAD) * cos(to.lat * DEG_TO_RAD);
    double tmp = cos(from.lat() * DEG_TO_RAD) * cos(to.lat() * DEG_TO_RAD);
    return 2.0 * asin(sqrt(latitudeH + tmp * lontitudeH));
}

double GeometricHelpers::sphericalDist(GeographicNode_Ptr& from, GeographicNode_Ptr& to) {
    Position p1;
    p1.lat = from->lat();
    p1.lon = from->lon();
    Position p2;
    p2.lat = to->lat();
    p2.lon = to->lon();
    GeographicPosition p1(from->lat(), from->lon());
    GeographicPosition p2(to->lat(), to->lon());
    return GeometricHelpers::sphericalDist(p1, p2);
}

GeographicPositionTuple GeometricHelpers::getMidPointCoordinates(GeographicNode_Ptr& from, GeographicNode_Ptr& to) {
    Position p1(from->lat(), from->lon());
    Position p2(to->lat(), to->lon());
    GeographicPosition p1(from->lat(), from->lon());
    GeographicPosition p2(to->lat(), to->lon());
    return GeometricHelpers::getMidPointCoordinates(p1, p2);
}

GeographicPositionTuple GeometricHelpers::getMidPointCoordinates(Position& n1, Position& n2) {
GeographicPositionTuple GeometricHelpers::getMidPointCoordinates(GeographicPosition& n1, GeographicPosition& n2) {
    // calculate midpoint
    // http://www.movable-type.co.uk/scripts/latlong.html

    double lat1 = deg2rad(n1.lat);
    double lon1 = deg2rad(n1.lon);
    double lat2 = deg2rad(n2.lat);
    double lat1 = deg2rad(n1.lat());
    double lon1 = deg2rad(n1.lon());
    double lat2 = deg2rad(n2.lat());

    double dLon = deg2rad(n2.lon - n1.lon);
    double dLon = deg2rad(n2.lon() - n1.lon());

    double Bx = cos(lat2) * cos(dLon);
    double By = cos(lat2) * sin(dLon);
+2 −3
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@

#include "GeographicNode.hpp"
#include "GeographicPosition.hpp"
#include "Position.hpp"
#include <utility>

namespace GeometricHelpers {
@@ -40,11 +39,11 @@ double deg2rad(double deg);
double rad2deg(double rad);

double sphericalDist(GeographicNode_Ptr& from, GeographicNode_Ptr& to);
double sphericalDist(Position& from, Position& to);
double sphericalDist(GeographicPosition& from, GeographicPosition& to);
double sphericalDistToKM(double dist);

GeographicPositionTuple getMidPointCoordinates(GeographicNode_Ptr& n1, GeographicNode_Ptr& n2);
GeographicPositionTuple getMidPointCoordinates(Position& n1, Position& n2);
GeographicPositionTuple getMidPointCoordinates(GeographicPosition& n1, GeographicPosition& n2);
};

#endif
Loading