Skip to content

v0.2.48..v0.2.49 changeset UnconnectedWaySnapper.cpp

Garret Voltz edited this page Oct 2, 2019 · 1 revision
diff --git a/hoot-core/src/main/cpp/hoot/core/ops/UnconnectedWaySnapper.cpp b/hoot-core/src/main/cpp/hoot/core/ops/UnconnectedWaySnapper.cpp
index 9e84da9..e4da3b4 100644
--- a/hoot-core/src/main/cpp/hoot/core/ops/UnconnectedWaySnapper.cpp
+++ b/hoot-core/src/main/cpp/hoot/core/ops/UnconnectedWaySnapper.cpp
@@ -72,8 +72,8 @@ _markSnappedWays(false),
 _wayToSnapToCriterionClassName("hoot::WayCriterion"),
 _wayToSnapCriterionClassName("hoot::WayCriterion"),
 _wayNodeToSnapToCriterionClassName("hoot::WayNodeCriterion"),
-_snapWayStatus(Status::Unknown2),
-_snapToWayStatus(Status::Unknown1),
+_snapWayStatuses(QStringList(Status(Status::Unknown2).toString())),
+_snapToWayStatuses(QStringList(Status(Status::Unknown1).toString())),
 _numSnappedToWays(0),
 _numSnappedToWayNodes(0),
 _taskStatusUpdateInterval(1000)
@@ -102,8 +102,8 @@ void UnconnectedWaySnapper::setConfiguration(const Settings& conf)
   setMarkSnappedNodes(confOpts.getSnapUnconnectedWaysMarkSnappedNodes());
   setMarkSnappedWays(confOpts.getSnapUnconnectedWaysMarkSnappedWays());
 
-  setSnapWayStatus(confOpts.getSnapUnconnectedWaysSnapWayStatus().trimmed());
-  setSnapToWayStatus(confOpts.getSnapUnconnectedWaysSnapToWayStatus().trimmed());
+  setSnapWayStatuses(confOpts.getSnapUnconnectedWaysSnapWayStatuses());
+  setSnapToWayStatuses(confOpts.getSnapUnconnectedWaysSnapToWayStatuses());
 
   setWayToSnapCriterionClassName(confOpts.getSnapUnconnectedWaysSnapWayCriterion().trimmed());
   setWayToSnapToCriterionClassName(confOpts.getSnapUnconnectedWaysSnapToWayCriterion().trimmed());
@@ -197,6 +197,18 @@ void UnconnectedWaySnapper::setWayNodeToSnapToCriterionClassName(const QString&
   }
 }
 
+void UnconnectedWaySnapper::setSnapWayStatuses(const QStringList& statuses)
+{
+  _snapWayStatuses = statuses;
+  StringUtils::removeEmptyStrings(_snapWayStatuses);
+}
+
+ void UnconnectedWaySnapper::setSnapToWayStatuses(const QStringList& statuses)
+{
+  _snapToWayStatuses = statuses;
+  StringUtils::removeEmptyStrings(_snapToWayStatuses);
+}
+
 void UnconnectedWaySnapper::apply(OsmMapPtr& map)
 {
   _map = map;
@@ -213,18 +225,18 @@ void UnconnectedWaySnapper::apply(OsmMapPtr& map)
   // create feature crits for filtering what things we snap and snap to (will default to just
   // plain ways and way nodes if nothing was specified)
   ElementCriterionPtr wayToSnapCrit =
-    _createFeatureCriterion(_wayToSnapCriterionClassName, _snapWayStatus);
+    _createFeatureCriterion(_wayToSnapCriterionClassName, _snapWayStatuses);
   ElementCriterionPtr wayToSnapToCrit =
-    _createFeatureCriterion(_wayToSnapToCriterionClassName, _snapToWayStatus);
+    _createFeatureCriterion(_wayToSnapToCriterionClassName, _snapToWayStatuses);
   ElementCriterionPtr wayNodeToSnapToCrit;
   if (_snapToExistingWayNodes)
   {
     wayNodeToSnapToCrit =
-      _createFeatureCriterion(_wayNodeToSnapToCriterionClassName, _snapToWayStatus);
+      _createFeatureCriterion(_wayNodeToSnapToCriterionClassName, _snapToWayStatuses);
   }
   // The status of what contains an unconnected node doesn't matter, so we don't filter by status.
   ElementCriterionPtr unnconnectedWayNodeCrit =
-    _createFeatureCriterion(_wayToSnapCriterionClassName, "");
+    _createFeatureCriterion(_wayToSnapCriterionClassName, QStringList());
 
   // create needed geospatial indexes for surrounding feature searches; If the way node reuse option
   // was turned off, then no need to index way nodes.
@@ -358,15 +370,15 @@ long UnconnectedWaySnapper::_getPid(const ConstWayPtr& way) const
   return pid;
 }
 
-ElementCriterionPtr UnconnectedWaySnapper::_createFeatureCriterion(const QString& criterionClassName,
-                                                                   const QString& status)
+ElementCriterionPtr UnconnectedWaySnapper::_createFeatureCriterion(
+  const QString& criterionClassName, const QStringList& statuses)
 {
   const QString critClass = criterionClassName.trimmed();
   if (!critClass.isEmpty())
   {
     LOG_TRACE(
-      "Creating feature filtering criterion: " << criterionClassName << ", status: " <<
-      status << "...");
+      "Creating feature filtering criterion: " << criterionClassName << ", statuses: " <<
+      statuses << "...");
 
     // configure our element criterion, in case it needs it
     ElementCriterionPtr typeCrit(
@@ -384,17 +396,16 @@ ElementCriterionPtr UnconnectedWaySnapper::_createFeatureCriterion(const QString
       mapConsumer->setOsmMap(_map.get());
     }
 
-    if (!status.trimmed().isEmpty())
+    if (!statuses.isEmpty())
     {
       // create our criterion for the feature status
       ElementCriterionPtr statusCrit;
-      if (!status.contains(";"))
+      if (statuses.size() == 1)
       {
-        statusCrit.reset(new StatusCriterion(Status::fromString(status)));
+        statusCrit.reset(new StatusCriterion(Status::fromString(statuses.at(0))));
       }
       else
       {
-        const QStringList statuses = status.split(";");
         QList<std::shared_ptr<StatusCriterion>> statusCrits;
         for (int i = 0; i < statuses.size(); i++)
         {
Clone this wiki locally