diff --git a/coverage.cc b/coverage.cc index 24e85fe..69d39c6 100644 --- a/coverage.cc +++ b/coverage.cc @@ -40,40 +40,47 @@ xDOP getDOP(Point& us, vector sats) // cout<=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; }; -covmap_t emitCoverage() +covmap_t emitCoverage(const vector& sats) { covmap_t ret; ofstream cmap("covmap.csv"); cmap<<"latitude longitude count5 count10 count20"< sats; - auto galileoalma = g_galileoalmakeeper.get(); - auto svstats = g_statskeeper.get(); - auto pseudoTow = (time(0) - 820368000) % (7*86400); - // cout<<"pseudoTow "< -90; latitude-=0.5) { // north-south + for(double latitude = 90 ; latitude > -90; latitude-=2) { // north-south double phi = M_PI* latitude / 180; double longsteps = 1 + 360.0 * cos(phi); - double step = 180.0 / longsteps; - vector> latvect; + double step = 4*180.0 / longsteps; + vector> latvect; for(double longitude = -180; longitude < 180; longitude += step) { // east - west Point p; // phi = latitude, lambda = longitude @@ -93,17 +100,17 @@ covmap_t emitCoverage() vector satposs5, satposs10, satposs20; for(const auto& s : sats) { // double getElevationDeg(const Point& sat, const Point& our); - double elev = getElevationDeg(s.second, p); + double elev = getElevationDeg(s, p); if(elev > 5.0) { - satposs5.push_back(s.second); + satposs5.push_back(s); numsats5++; } if(elev > 10.0) { - satposs10.push_back(s.second); + satposs10.push_back(s); numsats10++; } if(elev > 20.0) { - satposs20.push_back(s.second); + satposs20.push_back(s); numsats20++; } } @@ -111,7 +118,14 @@ covmap_t emitCoverage() numsats5, numsats10, numsats20, getDOP(p, satposs5).pdop, getDOP(p, satposs10).pdop, - getDOP(p, satposs20).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 <<" " < sats; + auto galileoalma = g_galileoalmakeeper.get(); + auto gpsalma = g_gpsalmakeeper.get(); + auto beidoualma = g_beidoualmakeeper.get(); + auto svstats = g_statskeeper.get(); + // cout<<"pseudoTow "<path); + + bool doGalileo{true}, doGPS{false}, doBeidou{false}; + auto pos = path.find("gps="); + if(pos != string::npos) { + doGPS = (path[pos+4]=='1'); + } + pos = path.find("galileo="); + if(pos != string::npos) { + doGalileo = (path[pos+8]=='1'); + } + pos = path.find("beidou="); + if(pos != string::npos) { + doBeidou = (path[pos+7]=='1'); + } + + if(doGalileo) + for(const auto &g : galileoalma) { + Point sat; + getCoordinates(latestTow(2, svstats), g.second, &sat); + + if(g.first < 0) + continue; + SatID id{2,(uint32_t)g.first,1}; + if(svstats[id].completeIOD() && svstats[id].liveIOD().sisa == 255) { + continue; + } + if(svstats[id].e1bhs || svstats[id].e1bdvs) + continue; + sats.push_back(sat); + } + + if(doGPS) + for(const auto &g : gpsalma) { + Point sat; + getCoordinates(latestTow(0, svstats), g.second, &sat); + + if(g.first < 0) + continue; + SatID id{0,(uint32_t)g.first,0}; + if(svstats[id].completeIOD() && svstats[id].ura == 16) { + // cout<<"Skipping G"<(longpair))); jsdatum.push_back((int)(10*get<5>(longpair))); jsdatum.push_back((int)(10*get<6>(longpair))); + + jsdatum.push_back((int)(10*get<7>(longpair))); + jsdatum.push_back((int)(10*get<8>(longpair))); + jsdatum.push_back((int)(10*get<9>(longpair))); + + jsdatum.push_back((int)(10*get<10>(longpair))); + jsdatum.push_back((int)(10*get<11>(longpair))); + jsdatum.push_back((int)(10*get<12>(longpair))); + + jslongvect.push_back(jsdatum); } jslatvect.push_back(latvect.first); diff --git a/navparse.hh b/navparse.hh index 5cef2dc..e4e822d 100644 --- a/navparse.hh +++ b/navparse.hh @@ -143,17 +143,16 @@ struct SVStat typedef std::map svstats_t; // a vector of pairs of latidude,vector -typedef vector > > > covmap_t; - -covmap_t emitCoverage(); +typedef vector > > > covmap_t; +covmap_t emitCoverage(const vector& sats); struct xDOP { double gdop{-1}; double pdop{-1}; double tdop{-1}; - // double hdop; - // double vdop; + double hdop{-1}; + double vdop{-1}; }; xDOP getDOP(Point& us, vector sats);