Skip to content

v0.2.47..v0.2.48 changeset MapComparator.cpp

Garret Voltz edited this page Sep 27, 2019 · 1 revision
diff --git a/hoot-core/src/main/cpp/hoot/core/scoring/MapComparator.cpp b/hoot-core/src/main/cpp/hoot/core/scoring/MapComparator.cpp
index 1980c5a..df076da 100644
--- a/hoot-core/src/main/cpp/hoot/core/scoring/MapComparator.cpp
+++ b/hoot-core/src/main/cpp/hoot/core/scoring/MapComparator.cpp
@@ -82,9 +82,9 @@ public:
    * Defaults to 5cm threshold
    */
   CompareVisitor(
-    std::shared_ptr<OsmMap> ref, bool ignoreUUID, bool useDateTime, Meters threshold = 0.05)
+    std::shared_ptr<OsmMap> refMap, bool ignoreUUID, bool useDateTime, Meters threshold = 0.05)
   {
-    _ref = ref;
+    _refMap = refMap;
     _threshold = threshold;
     _matches = true;
     _errorCount = 0;
@@ -98,17 +98,19 @@ public:
 
   virtual void visit(const std::shared_ptr<const Element>& e)
   {
-    CHECK_MSG(_ref->containsElement(e->getElementId()), "Did not find element: " <<
+    // e is the test element
+
+    CHECK_MSG(_refMap->containsElement(e->getElementId()), "Did not find element: " <<
               e->getElementId());
-    const std::shared_ptr<const Element>& re = _ref->getElement(e->getElementId());
+    const std::shared_ptr<const Element>& refElement = _refMap->getElement(e->getElementId());
 
-    Tags in1 = re->getTags();
-    Tags in2 = e->getTags();
+    Tags refTags = refElement->getTags();
+    Tags testTags = e->getTags();
 
     if (_ignoreUUID)
     {
-      in1.set("uuid", "None");  // Wipe out the UUID's
-      in2.set("uuid", "None");
+      refTags.set("uuid", "None");  // Wipe out the UUID's
+      testTags.set("uuid", "None");
     }
 
     // By default, hoot will usually set these tags when ingesting a file
@@ -116,22 +118,24 @@ public:
     // have the option to ignore it here.
     if (!_useDateTime)
     {
-      in1.set(MetadataTags::SourceIngestDateTime(), "None");  // Wipe out the ingest datetime
-      in2.set(MetadataTags::SourceIngestDateTime(), "None");
+      refTags.set(MetadataTags::SourceIngestDateTime(), "None");  // Wipe out the ingest datetime
+      testTags.set(MetadataTags::SourceIngestDateTime(), "None");
 
-      in1.set(MetadataTags::SourceDateTime(), "None");  // Wipe out the ingest datetime
-      in2.set(MetadataTags::SourceDateTime(), "None");
+      refTags.set(MetadataTags::SourceDateTime(), "None");  // Wipe out the ingest datetime
+      testTags.set(MetadataTags::SourceDateTime(), "None");
     }
 
-    if (in1 != in2)
+    if (refTags != testTags)
     {
       _matches = false;
       _errorCount++;
       if (_errorCount <= 10)
       {
-        LOG_WARN("Tags do not match:");
-        QStringList keys = in1.keys();
-        keys.append(in2.keys());
+        LOG_WARN(
+          "Tags do not match (ref: " << refElement->getElementId() << ", test: " <<
+          e->getElementId() << ":");
+        QStringList keys = refTags.keys();
+        keys.append(testTags.keys());
         keys.removeDuplicates();
         keys.sort();
 
@@ -140,93 +144,103 @@ public:
           for (int i = 0; i < keys.size(); i++)
           {
             QString k = keys[i];
-            if (in1[k] != in2[k])
+            if (refTags[k] != testTags[k])
             {
-              LOG_WARN("< " + k + " = " + in1[k]);
-              LOG_WARN("> " + k + " = " + in2[k]);
+              LOG_WARN("< " + k + " = " + refTags[k]);
+              LOG_WARN("> " + k + " = " + testTags[k]);
             }
           }
         }
       }
       return;
     }
-    //CHECK_MSG(in1 == in2, "Tags do not match: " << in1.toString() << " vs. " << in2.toString());
+    //CHECK_MSG(refTags == testTags, "Tags do not match: " << refTags.toString() << " vs. " << testTags.toString());
 
-    CHECK_DOUBLE(re->getCircularError(), e->getCircularError(), _threshold);
-    CHECK_MSG(re->getStatus() == e->getStatus(),
-          "Status does not match: " << re->getStatusString() << " vs. " << e->getStatusString());
-    switch(e->getElementType().getEnum())
+    CHECK_DOUBLE(refElement->getCircularError(), e->getCircularError(), _threshold);
+    CHECK_MSG(refElement->getStatus() == e->getStatus(),
+          "Status does not match: " << refElement->getStatusString() << " vs. " <<
+          e->getStatusString());
+    switch (e->getElementType().getEnum())
     {
     case ElementType::Unknown:
       _matches = false;
       LOG_WARN("Encountered an unexpected element type.");
       break;
     case ElementType::Node:
-      compareNode(re, e);
+      compareNode(refElement, e);
       break;
     case ElementType::Way:
-      compareWay(re, e);
+      compareWay(refElement, e);
       break;
     case ElementType::Relation:
-      compareRelation(re, e);
+      compareRelation(refElement, e);
       break;
     }
   }
 
-  void compareNode(const std::shared_ptr<const Element>& re, const std::shared_ptr<const Element>& e)
+  void compareNode(const std::shared_ptr<const Element>& refElement,
+                   const std::shared_ptr<const Element>& testElement)
   {
-    ConstNodePtr rn = std::dynamic_pointer_cast<const Node>(re);
-    ConstNodePtr n = std::dynamic_pointer_cast<const Node>(e);
+    ConstNodePtr refNode = std::dynamic_pointer_cast<const Node>(refElement);
+    ConstNodePtr testNode = std::dynamic_pointer_cast<const Node>(testElement);
 
-    if (GeometryUtils::haversine(rn->toCoordinate(), n->toCoordinate()) > _threshold)
+    if (GeometryUtils::haversine(refNode->toCoordinate(), testNode->toCoordinate()) > _threshold)
     {
       if (_errorCount <= 10)
       {
-        LOG_WARN("rn: " << std::fixed << std::setprecision(15) << rn->getX() << ", " << rn->getY() <<
-                 " n: " << n->getX() << ", " << n->getY());
+        LOG_WARN(
+          "refNode: " << std::fixed << std::setprecision(15) << refNode->getX() << ", " <<
+          refNode->getY() << " testNode: " << testNode->getX() << ", " << testNode->getY());
       }
       _matches = false;
       _errorCount++;
     }
   }
 
-  void compareWay(const std::shared_ptr<const Element>& re, const std::shared_ptr<const Element>& e)
+  void compareWay(const std::shared_ptr<const Element>& refElement,
+                  const std::shared_ptr<const Element>& testElement)
   {
-    ConstWayPtr rw = std::dynamic_pointer_cast<const Way>(re);
-    ConstWayPtr w = std::dynamic_pointer_cast<const Way>(e);
+    ConstWayPtr refWay = std::dynamic_pointer_cast<const Way>(refElement);
+    ConstWayPtr testWay = std::dynamic_pointer_cast<const Way>(testElement);
 
-    CHECK_MSG(rw->getNodeIds().size() == w->getNodeIds().size(),
+    CHECK_MSG(refWay->getNodeIds().size() == testWay->getNodeIds().size(),
               "Node count does not match.");
-    for (size_t i = 0; i < rw->getNodeIds().size(); ++i)
+    for (size_t i = 0; i < refWay->getNodeIds().size(); ++i)
     {
-      CHECK_MSG(rw->getNodeIds()[i] == w->getNodeIds()[i],
+      CHECK_MSG(refWay->getNodeIds()[i] == testWay->getNodeIds()[i],
         QString("Node IDs don't match. (%1 vs. %2)").
-        arg(hoot::toString(rw)).
-        arg(hoot::toString(w)));
+        arg(hoot::toString(refWay)).
+        arg(hoot::toString(testWay)));
     }
   }
 
-  void compareRelation(const std::shared_ptr<const Element>& re, const std::shared_ptr<const Element>& e)
+  void compareRelation(const std::shared_ptr<const Element>& refElement,
+                       const std::shared_ptr<const Element>& testElement)
   {
-    ConstRelationPtr rr = std::dynamic_pointer_cast<const Relation>(re);
-    ConstRelationPtr r = std::dynamic_pointer_cast<const Relation>(e);
+    ConstRelationPtr refRelation = std::dynamic_pointer_cast<const Relation>(refElement);
+    ConstRelationPtr testRelation = std::dynamic_pointer_cast<const Relation>(testElement);
 
-    QString relationStr = QString("%1 vs. %2").arg(hoot::toString(rr)).arg(hoot::toString(r));
+    QString relationStr =
+      QString("%1 vs. %2").arg(hoot::toString(refRelation)).arg(hoot::toString(testRelation));
 
-    CHECK_MSG(rr->getType() == r->getType(), "Types do not match. " + relationStr);
-    CHECK_MSG(rr->getMembers().size() == r->getMembers().size(),
+    CHECK_MSG(
+      refRelation->getType() == testRelation->getType(), "Types do not match. " + relationStr);
+    CHECK_MSG(refRelation->getMembers().size() == testRelation->getMembers().size(),
       "Member count does not match. " + relationStr);
-    for (size_t i = 0; i < rr->getMembers().size(); i++)
+    for (size_t i = 0; i < refRelation->getMembers().size(); i++)
     {
-      CHECK_MSG(rr->getMembers()[i].role == r->getMembers()[i].role,
+      CHECK_MSG(
+        refRelation->getMembers()[i].role == testRelation->getMembers()[i].role,
         "Member role does not match. " + relationStr);
-      CHECK_MSG(rr->getMembers()[i].getElementId() == r->getMembers()[i].getElementId(),
+      CHECK_MSG(
+        refRelation->getMembers()[i].getElementId() == testRelation->getMembers()[i].getElementId(),
         "Member element ID does not match. " + relationStr);
     }
   }
 
 private:
-  std::shared_ptr<OsmMap> _ref;
+
+  std::shared_ptr<OsmMap> _refMap;
   Meters _threshold;
   Degrees _thresholdDeg;
   bool _matches;
@@ -239,31 +253,31 @@ MapComparator::MapComparator():
   _ignoreUUID(false),
   _useDateTime(false)
 {
-  // blank
 }
 
-bool MapComparator::isMatch(const std::shared_ptr<OsmMap>& ref, const std::shared_ptr<OsmMap>& test)
+bool MapComparator::isMatch(const std::shared_ptr<OsmMap>& refMap,
+                            const std::shared_ptr<OsmMap>& testMap)
 {
   bool mismatch = false;
-  if (ref->getNodes().size() != test->getNodes().size())
+  if (refMap->getNodes().size() != testMap->getNodes().size())
   {
     LOG_WARN(
-      "Number of nodes does not match (1: " << ref->getNodes().size() << "; 2: " <<
-      test->getNodes().size() << ")");
+      "Number of nodes does not match (1: " << refMap->getNodes().size() << "; 2: " <<
+      testMap->getNodes().size() << ")");
     mismatch = true;
   }
-  else if (ref->getWays().size() != test->getWays().size())
+  else if (refMap->getWays().size() != testMap->getWays().size())
   {
     LOG_WARN(
-      "Number of ways does not match (1: " << ref->getWays().size() << "; 2: " <<
-      test->getWays().size() << ")");
+      "Number of ways does not match (1: " << refMap->getWays().size() << "; 2: " <<
+      testMap->getWays().size() << ")");
     mismatch = true;
   }
-  else if (ref->getRelations().size() != test->getRelations().size())
+  else if (refMap->getRelations().size() != testMap->getRelations().size())
   {
     LOG_WARN(
-      "Number of relations does not match (1: " << ref->getRelations().size() << "; 2: " <<
-      test->getRelations().size() << ")");
+      "Number of relations does not match (1: " << refMap->getRelations().size() << "; 2: " <<
+      testMap->getRelations().size() << ")");
     mismatch = true;
   }
   if (mismatch)
@@ -271,11 +285,9 @@ bool MapComparator::isMatch(const std::shared_ptr<OsmMap>& ref, const std::share
     return false;
   }
 
-  CompareVisitor v(ref, _ignoreUUID, _useDateTime);
-  test->visitRo(v);
-  bool r = v.isMatch();
-
-  return r;
+  CompareVisitor compareVis(refMap, _ignoreUUID, _useDateTime);
+  testMap->visitRo(compareVis);
+  return compareVis.isMatch();
 }
 
 }
Clone this wiki locally