Development: route load/save.
[speedfreak] / Client / gpsdata.cpp
index eca9efb..250728a 100644 (file)
@@ -73,6 +73,7 @@ void GPSData::resetAll()
     routeStopTime = "";
     recordingStatus = false;
     roundCounter = 0;
+    distance = 0;
 }
 
 /**
@@ -104,36 +105,42 @@ void GPSData::agnss()
         longitude   = location->getLongitude(); //Returns longitude.
         altitude    = location->getAltitude();  //Returns fix altitude in meters.
         speed       = location->getSpeed();     //Returns current speed in km/h.
+        track = location->getTrack(); //Returns direction of motion in degrees(0-359).
 
-        QFile routeTempFile("routetemp.xml");//Temp xml.
+        QFile routeTempFile("/home/user/MyDocs/speedfreak/route/routetemp.xml");//Temp xml.
 
-        //If first round
-        if (roundCounter == 0)
+        //If GPS find 4 or more satellite and signal stregth is 30 or more.
+        if (location->getSatellitesInUse() >= 4 && location->getSignalStrength() >= 30)
         {
-            if (!routeTempFile.open(QIODevice::WriteOnly | QIODevice::Text))
-                return;
-            writeRouteXml(&routeTempFile, 0);
-            routeTempFile.close();
-            roundCounter ++;
-        }
-
-        //Points writing round.
-        else
-        { 
-            sLatitudeNow.sprintf("%.4f", latitude);  //Latitude now to string
-            sLongitudeNow.sprintf("%.4f", longitude);//Longitude now to string
-            sLatitudePrevious.sprintf("%.4f", latitudePrevious);  //Previous latitude to string
-            sLongitudePrevious.sprintf("%.4f", longitudePrevious); //Previous longitude to string
-
-            //If latitude or longitude change
-            if ( sLatitudeNow != sLatitudePrevious || sLongitudeNow != sLongitudePrevious )
+            //If first round
+            if (roundCounter == 0)
             {
-                if (!routeTempFile.open(QIODevice::Append | QIODevice::Text))
+                if (!routeTempFile.open(QIODevice::WriteOnly | QIODevice::Text))
                     return;
-
                 writeRouteXml(&routeTempFile, 0);
-                roundCounter ++;
                 routeTempFile.close();
+                roundCounter ++;
+            }
+
+            //Points writing round.
+            else
+            {
+                sLatitudeNow.sprintf("%.4f", latitude);  //Latitude now to string
+                sLongitudeNow.sprintf("%.4f", longitude);//Longitude now to string
+                sLatitudePrevious.sprintf("%.4f", latitudePrevious);  //Previous latitude to string
+                sLongitudePrevious.sprintf("%.4f", longitudePrevious); //Previous longitude to string
+
+                //If latitude or longitude change
+                if ( sLatitudeNow != sLatitudePrevious || sLongitudeNow != sLongitudePrevious )
+                {
+                    if (!routeTempFile.open(QIODevice::Append | QIODevice::Text))
+                        return;
+
+                    distance += location->distance_between_two_points(latitudePrevious, longitudePrevious, latitude, longitude);
+                    writeRouteXml(&routeTempFile, 0);
+                    roundCounter ++;
+                    routeTempFile.close();
+                }
             }
         }
     }
@@ -225,7 +232,7 @@ void GPSData::stopRouteRecording()
         recordingStatus = false;
 
         //Write final xml.
-        QFile file("route.xml");
+        QFile file("/home/user/MyDocs/speedfreak/route/route.xml");
         if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
             return;
         writeRouteXml(&file, 1);
@@ -241,7 +248,7 @@ void GPSData::writeRouteXml(QIODevice *device, int round)
 {
     xmlwriter.setDevice(device);
 
-    //Write temp xml (routetemp.xml).
+    //Write temp xml (/home/user/MyDocs/speedfreak/route/routetemp.xml).
     if ( round == 0 )
     {
         xmlwriter.writeStartElement("Point");
@@ -252,7 +259,7 @@ void GPSData::writeRouteXml(QIODevice *device, int round)
         xmlwriter.writeEndElement();//Point
     }
 
-    //Write final xml (route.xml).
+    //Write final xml (/home/user/MyDocs/speedfreak/route/route.xml).
     else if ( round == 1 )
     {
         xmlwriter.writeStartDocument();
@@ -262,7 +269,7 @@ void GPSData::writeRouteXml(QIODevice *device, int round)
         xmlwriter.writeAttribute("Points", QString::number(roundCounter));
 
         //Open temp xml and read points
-        QFile tempFile("routetemp.xml");
+        QFile tempFile("/home/user/MyDocs/speedfreak/route/routetemp.xml");
         if (!tempFile.open(QIODevice::ReadOnly | QIODevice::Text))
             return;
         QTextStream readRoute(&tempFile);
@@ -274,3 +281,20 @@ void GPSData::writeRouteXml(QIODevice *device, int round)
         xmlwriter.writeEndDocument();     
     }
 }
+
+/**
+  *This function returns distance traveled since recording started.
+  */
+double GPSData::getDistanceTraveled()
+{
+    return distance;
+}
+
+/**
+  *This function returns direction of motion in degrees(0-359).
+  *@return double track
+  */
+double GPSData::getDirection()
+{
+    return track;
+}