]> git.mxchange.org Git - flightgear.git/commitdiff
Incremental insert of NE data to the index.
authorJames Turner <zakalawe@mac.com>
Tue, 9 Aug 2016 08:38:54 +0000 (09:38 +0100)
committerRoland Haeder <roland@mxchange.org>
Thu, 22 Sep 2016 21:27:48 +0000 (23:27 +0200)
src/GUI/QtLauncher.cxx
src/Navaids/PolyLine.cxx
src/Navaids/PolyLine.hxx

index 16a0a104d2c3bf8b984000c6c0418f0c70ee267d..9a1a23f9080a18340f32e39fffa01a142f368d9e 100644 (file)
@@ -263,7 +263,8 @@ class NaturalEarthDataLoaderThread : public QThread
     Q_OBJECT
 public:
 
-    NaturalEarthDataLoaderThread()
+    NaturalEarthDataLoaderThread() :
+        m_lineInsertCount(0)
     {
         connect(this, &QThread::finished, this, &NaturalEarthDataLoaderThread::onFinished);
     }
@@ -284,15 +285,22 @@ protected:
         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
+        flightgear::PolyLineList::const_iterator begin = m_parsedLines.begin() + m_lineInsertCount;
+        unsigned int numToAdd = std::min(1000UL, m_parsedLines.size() - m_lineInsertCount);
+        flightgear::PolyLineList::const_iterator end = begin + numToAdd;
+        flightgear::PolyLine::bulkAddToSpatialIndex(begin, end);
+
+        if (end == m_parsedLines.end()) {
+            deleteLater(); // commit suicide
+        } else {
+            m_lineInsertCount += 1000;
+            QTimer::singleShot(50, this, &NaturalEarthDataLoaderThread::onFinished);
+        }
     }
 
     void loadNaturalEarthFile(const std::string& aFileName,
@@ -310,6 +318,7 @@ private:
     }
     
     flightgear::PolyLineList m_parsedLines;
+    unsigned int m_lineInsertCount;
 };
 
 } // of anonymous namespace
index 38777c6538036f5aa5924ff4a90941cf2c0f609f..68c98de96653d669345b2686ce9b4bde6ce1bf4e 100644 (file)
@@ -101,11 +101,12 @@ PolyLineRef PolyLine::create(PolyLine::Type aTy, const SGGeodVec &aRawPoints)
     return new PolyLine(aTy, aRawPoints);
 }
 
-void PolyLine::bulkAddToSpatialIndex(const PolyLineList &lines)
+void PolyLine::bulkAddToSpatialIndex(PolyLineList::const_iterator begin,
+                                     PolyLineList::const_iterator end)
 {
     NavDataCache::Transaction txn( NavDataCache::instance());
     flightgear::PolyLineList::const_iterator it;
-    for (it=lines.begin(); it != lines.end(); ++it) {
+    for (it=begin; it != end; ++it) {
         (*it)->addToSpatialIndex();
     }
     txn.commit();
index 57e827c9722998083d294e2127d4bee59f5af8e8..0a33acf9deaa0a41a8b40ddf02cea22e648280cf 100644 (file)
@@ -91,7 +91,8 @@ public:
     
     static PolyLineRef create(Type aTy, const SGGeodVec& aRawPoints);
 
-    static void bulkAddToSpatialIndex(const PolyLineList& lines);
+    static void bulkAddToSpatialIndex(PolyLineList::const_iterator begin,
+                                      PolyLineList::const_iterator end);
 
     /**
      * retrieve all the lines within a range of a search point.