]> git.mxchange.org Git - flightgear.git/blobdiff - src/Navaids/awynet.cxx
Merge branch 'master' into next
[flightgear.git] / src / Navaids / awynet.cxx
index 564b4bfb78bc1feb8a280dc49c12e922bc48bfda..32e08ac03cf30ea02f497ae548d7c3b51c43b7f5 100755 (executable)
@@ -25,6 +25,7 @@
 
 #include <math.h>
 #include <algorithm>
+#include <iostream>
 
 #include <simgear/compiler.h>
 
 
 #include "awynet.hxx"
 
-SG_USING_STD(sort);
+using std::sort;
+
+using std::cerr;
+using std::endl;
 
 /**************************************************************************
  * FGNode
@@ -43,11 +47,18 @@ FGNode::FGNode()
 {
 }
 
+FGNode::FGNode(double lt, double ln, int idx, std::string id) :
+  ident(id),
+  geod(SGGeod::fromDeg(ln, lt)),
+  index(idx)
+{
+}
+
 bool FGNode::matches(string id, double lt, double ln)
 {
   if ((ident == id) &&
-      (fabs(lt - lat) < 1.0) &&
-      (fabs(ln - lon) < 1.0))
+      (fabs(lt - geod.getLatitudeDeg()) < 1.0) &&
+      (fabs(ln - geod.getLongitudeDeg()) < 1.0))
     return true;
   else
     return false;
@@ -88,15 +99,7 @@ void FGAirway::setEnd(node_map *nodes)
 // doing this.
 void FGAirway::setTrackDistance()
 {
-  double course;
-  SGWayPoint first  (start->getLongitude(),
-                    start->getLatitude(),
-                    0);
-  SGWayPoint second (end->getLongitude(),
-                    end->getLatitude(),
-                    0);
-  first.CourseAndDistance(second, &course, &length);
-
+  length = SGGeodesy::distanceM(start->getPosition(), end->getPosition());
 }
 
 /***************************************************************************
@@ -141,6 +144,12 @@ FGAirwayNetwork::FGAirwayNetwork()
   maxDistance = 0;
 }
 
+FGAirwayNetwork::~FGAirwayNetwork()
+{
+    for (unsigned int it = 0; it < nodes.size(); it++) {
+       delete nodes[ it];
+    }
+}
 void FGAirwayNetwork::addAirway(const FGAirway &seg)
 {
   segments.push_back(seg);
@@ -204,14 +213,7 @@ void FGAirwayNetwork::load(SGPath path)
   in >> skipeol;
 
   // read in each remaining line of the file
-
-#ifdef __MWERKS__
-  char c = 0;
-  while ( in.get(c) && c != '\0' ) {
-    in.putback(c);
-#else
     while ( ! in.eof() ) {
-#endif
       string token;
       in >> token;
 
@@ -221,6 +223,7 @@ void FGAirwayNetwork::load(SGPath path)
       // Read each line from the database
       identStart = token;
       in >> latStart >> lonStart >> identEnd >> latEnd >> lonEnd >> type >> base >> top >> name;
+      in >> skipeol;
       /*out << identStart << " "
        << latStart   << " "
        << lonStart   << " "
@@ -262,7 +265,8 @@ void FGAirwayNetwork::load(SGPath path)
       char buffer[32];
       string startNode, endNode;
       // Start
-      snprintf(buffer, 32, "%s%d%d", identStart.c_str(), (int) latStart, (int) lonStart);
+      buffer[sizeof(buffer)-1] = 0;
+      snprintf(buffer, sizeof(buffer)-1, "%s%d%d", identStart.c_str(), (int) latStart, (int) lonStart);
       startNode = buffer;
 
       node_map_iterator itr = nodesMap.find(string(buffer));
@@ -311,22 +315,11 @@ void FGAirwayNetwork::load(SGPath path)
   double minDist = HUGE_VAL;
   double distsqrt, lat2, lon2;
   int index;
-  SGWayPoint first  (lon,
-                    lat,
-                    0);
   //cerr << "Lat " << lat << " lon " << lon << endl;
   for (FGNodeVectorIterator
         itr = nodes.begin();
        itr != nodes.end(); itr++)
     {
-      //double course;
-      //if ((fabs(lat - ((*itr)->getLatitude())) < 0.001) &&
-      //  (fabs(lon - ((*itr)->getLongitude()) < 0.001)))
-      //cerr << "Warning: nodes are near" << endl;
-      //SGWayPoint second ((*itr)->getLongitude(),
-      //                (*itr)->getLatitude(),
-      //                0);
-      //first.CourseAndDistance(second, &course, &dist);
       lat2 = (*itr)->getLatitude();
       lon2 = (*itr)->getLongitude();
       // Note: This equation should adjust for decreasing distance per longitude