Async loading of NaturalEarth data for launcher.
This commit is contained in:
parent
8577d74430
commit
7cebc76b9d
1 changed files with 57 additions and 34 deletions
|
@ -47,6 +47,7 @@
|
||||||
#include <QSpinBox>
|
#include <QSpinBox>
|
||||||
#include <QDoubleSpinBox>
|
#include <QDoubleSpinBox>
|
||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
|
#include <QThread>
|
||||||
|
|
||||||
// Simgear
|
// Simgear
|
||||||
#include <simgear/timing/timestamp.hxx>
|
#include <simgear/timing/timestamp.hxx>
|
||||||
|
@ -257,6 +258,60 @@ private:
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class NaturalEarthDataLoaderThread : public QThread
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
|
||||||
|
NaturalEarthDataLoaderThread()
|
||||||
|
{
|
||||||
|
connect(this, &QThread::finished, this, &NaturalEarthDataLoaderThread::onFinished);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void run() Q_DECL_OVERRIDE
|
||||||
|
{
|
||||||
|
SGTimeStamp st;
|
||||||
|
st.stamp();
|
||||||
|
|
||||||
|
loadNaturalEarthFile("ne_10m_coastline.shp", flightgear::PolyLine::COASTLINE, false);
|
||||||
|
loadNaturalEarthFile("ne_10m_rivers_lake_centerlines.shp", flightgear::PolyLine::RIVER, false);
|
||||||
|
loadNaturalEarthFile("ne_10m_lakes.shp", flightgear::PolyLine::LAKE, true);
|
||||||
|
|
||||||
|
qDebug() << "load basic data took" << st.elapsedMSec();
|
||||||
|
|
||||||
|
st.stamp();
|
||||||
|
loadNaturalEarthFile("ne_10m_urban_areas.shp", flightgear::PolyLine::URBAN, true);
|
||||||
|
|
||||||
|
qDebug() << "loading urban areas took:" << st.elapsedMSec();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void onFinished()
|
||||||
|
{
|
||||||
|
flightgear::PolyLine::bulkAddToSpatialIndex(m_parsedLines);
|
||||||
|
qDebug() << "finished loading Natural Earth data";
|
||||||
|
deleteLater(); // commit suicide
|
||||||
|
}
|
||||||
|
|
||||||
|
void loadNaturalEarthFile(const std::string& aFileName,
|
||||||
|
flightgear::PolyLine::Type aType,
|
||||||
|
bool areClosed)
|
||||||
|
{
|
||||||
|
SGPath path(globals->get_fg_root());
|
||||||
|
path.append( "Geodata" );
|
||||||
|
path.append(aFileName);
|
||||||
|
if (!path.exists())
|
||||||
|
return; // silently fail for now
|
||||||
|
|
||||||
|
flightgear::PolyLineList lines;
|
||||||
|
flightgear::SHPParser::parsePolyLines(path, aType, m_parsedLines, areClosed);
|
||||||
|
}
|
||||||
|
|
||||||
|
flightgear::PolyLineList m_parsedLines;
|
||||||
|
};
|
||||||
|
|
||||||
} // of anonymous namespace
|
} // of anonymous namespace
|
||||||
|
|
||||||
class AircraftProxyModel : public QSortFilterProxyModel
|
class AircraftProxyModel : public QSortFilterProxyModel
|
||||||
|
@ -405,39 +460,6 @@ void initApp(int& argc, char** argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadNaturalEarthFile(const std::string& aFileName,
|
|
||||||
flightgear::PolyLine::Type aType,
|
|
||||||
bool areClosed)
|
|
||||||
{
|
|
||||||
SGPath path(globals->get_fg_root());
|
|
||||||
path.append( "Geodata" );
|
|
||||||
path.append(aFileName);
|
|
||||||
if (!path.exists())
|
|
||||||
return; // silently fail for now
|
|
||||||
|
|
||||||
flightgear::PolyLineList lines;
|
|
||||||
flightgear::SHPParser::parsePolyLines(path, aType, lines, areClosed);
|
|
||||||
flightgear::PolyLine::bulkAddToSpatialIndex(lines);
|
|
||||||
}
|
|
||||||
|
|
||||||
void loadNaturalEarthData()
|
|
||||||
{
|
|
||||||
SGTimeStamp st;
|
|
||||||
st.stamp();
|
|
||||||
|
|
||||||
loadNaturalEarthFile("ne_10m_coastline.shp", flightgear::PolyLine::COASTLINE, false);
|
|
||||||
loadNaturalEarthFile("ne_10m_rivers_lake_centerlines.shp", flightgear::PolyLine::RIVER, false);
|
|
||||||
loadNaturalEarthFile("ne_10m_lakes.shp", flightgear::PolyLine::LAKE, true);
|
|
||||||
|
|
||||||
qDebug() << "load basic data took" << st.elapsedMSec();
|
|
||||||
|
|
||||||
|
|
||||||
st.stamp();
|
|
||||||
loadNaturalEarthFile("ne_10m_urban_areas.shp", flightgear::PolyLine::URBAN, true);
|
|
||||||
|
|
||||||
qDebug() << "loading urban areas took:" << st.elapsedMSec();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool runLauncherDialog()
|
bool runLauncherDialog()
|
||||||
{
|
{
|
||||||
// startup the nav-cache now. This pre-empts normal startup of
|
// startup the nav-cache now. This pre-empts normal startup of
|
||||||
|
@ -460,7 +482,8 @@ bool runLauncherDialog()
|
||||||
// will happen as normal
|
// will happen as normal
|
||||||
http->init();
|
http->init();
|
||||||
|
|
||||||
loadNaturalEarthData();
|
NaturalEarthDataLoaderThread* naturalEarthLoader = new NaturalEarthDataLoaderThread;
|
||||||
|
naturalEarthLoader->start();
|
||||||
|
|
||||||
// avoid double Apple menu and other weirdness if both Qt and OSG
|
// avoid double Apple menu and other weirdness if both Qt and OSG
|
||||||
// try to initialise various Cocoa structures.
|
// try to initialise various Cocoa structures.
|
||||||
|
|
Loading…
Reference in a new issue