/// \file /// \ingroup tutorial_sql /// \notebook -js /// /// This tutorial demonstrates how TSQLServer can be used to create a /// connection with a SQlite3 database. It accesses the Sqlite data base. /// Download from https://root.cern/files/root_download_stats.sqlite /// The world map is hold by a TH2Poly histogram which, after filling, will show /// the world wide dispersion of ROOT's users. /// To histogram filling, is done having as input parameters /// the two columns of the database: "IPLongitude' - for the longitude, and the /// "IPLatitude" - for the latitude. /// The data related to the latitude and the longitude has been provided from the /// log files storing the users IP. /// This product includes GeoLite2 data created by MaxMind, available from /// http://www.maxmind.com. /// /// \macro_code /// /// \author Alexandra-Maria Dobrescu 08/2018 #include #include #include #include #include void SQLiteIPLocation() { TSQLServer *db = TSQLServer::Connect("sqlite://root_download_stats.sqlite", "", ""); TFile *F = TFile::Open("http://root.cern.ch/files/WM.root"); TH2Poly *WM; WM = (TH2Poly*) F->Get("WM"); const char *location = "SELECT IPLatitude, IPLongitude FROM accesslog;"; TSQLResult *locationRes = db->Query(location); while (TSQLRow *row = locationRes->Next()) { if (!row->GetField(0)[0]) continue; std::string sLatitude(row->GetField(0)); std::string sLongitude(row->GetField(1)); float latitude = std::stof(sLatitude); float longitude = std::stof(sLongitude); WM->Fill(longitude, latitude); delete row; } TCanvas *locationHistogram = new TCanvas(); locationHistogram->SetLogz(1); locationHistogram->ToggleEventStatus(); WM->Draw("colz"); }