#include #include "galileo.hh" #include "minivec.hh" #include "navmon.hh" #include "navparse.hh" #include "ephemeris.hh" #include "fmt/format.h" #include "fmt/printf.h" #include #include using Eigen::MatrixXd; using namespace std; xDOP getDOP(Point& us, vector sats) { xDOP ret; if(sats.size() < 4) { return ret; } MatrixXd G(sats.size(), 4); // 4 columns // (x1 - x)/R1 (y1 -y)/R1 (z1 - z)/R1 -1 for(size_t n = 0 ; n < sats.size(); ++n) { const auto& s = sats[n]; auto R = Vector(us, s).length(); G(n, 0) = (s.x - us.x)/R; G(n, 1) = (s.y - us.y)/R; G(n, 2) = (s.z - us.z)/R; G(n, 3) = -1; } // cout<<"Matrix: "<=0 && Qenu(1,1) >=0) ret.hdop = sqrt(Qenu(0,0) + Qenu(1,1)); if(Qenu(2,2)>=0) ret.vdop = sqrt(Qenu(2,2)); return ret; }; // in covmap: // 0 // lon, // 1 2 3 // numsats5, numsats10, numsats20 // 4 5 6 // pdop5, pdop10, pdop20 // hdop5, hdop10, hdop10 // vdop5, vdop10, vdop20 covmap_t emitCoverage(const vector& sats) { covmap_t ret; // ofstream cmap("covmap.csv"); // cmap<<"latitude longitude count5 count10 count20"< -90; latitude-=2) { // north-south double phi = M_PI* latitude / 180; double longsteps = 1 + 360.0 * cos(phi); double step = 4*180.0 / longsteps; // this does sorta equi-distanced measurements vector> latvect; for(double longitude = -180; longitude < 180; longitude += step) { // east - west Point p; // phi = latitude, lambda = longitude double lambda = M_PI* longitude / 180; p.x = R * cos(phi) * cos(lambda); p.y = R * cos(phi) * sin(lambda); p.z = R * sin(phi); if(longitude == -180) { // auto longlat = getLongLat(p.x, p.y, p.z); // cout< satposs5, satposs10, satposs20; for(const auto& s : sats) { // double getElevationDeg(const Point& sat, const Point& our); double elev = getElevationDeg(s, p); if(elev > 5.0) { satposs5.push_back(s); numsats5++; } if(elev > 10.0) { satposs10.push_back(s); numsats10++; } if(elev > 20.0) { satposs20.push_back(s); numsats20++; } } latvect.push_back(make_tuple(longitude, numsats5, numsats10, numsats20, getDOP(p, satposs5).pdop, getDOP(p, satposs10).pdop, getDOP(p, satposs20).pdop, getDOP(p, satposs5).hdop, getDOP(p, satposs10).hdop, getDOP(p, satposs20).hdop, getDOP(p, satposs5).vdop, getDOP(p, satposs10).vdop, getDOP(p, satposs20).vdop )); // cmap << longitude <<" " <