v0.2.53..v0.2.54 changeset NonConflatableCriterion.cpp
Garret Voltz edited this page Mar 31, 2020
·
1 revision
diff --git a/hoot-core/src/main/cpp/hoot/core/criterion/NonConflatableCriterion.cpp b/hoot-core/src/main/cpp/hoot/core/criterion/NonConflatableCriterion.cpp
index 910246d..d43fb49 100644
--- a/hoot-core/src/main/cpp/hoot/core/criterion/NonConflatableCriterion.cpp
+++ b/hoot-core/src/main/cpp/hoot/core/criterion/NonConflatableCriterion.cpp
@@ -37,13 +37,17 @@ namespace hoot
HOOT_FACTORY_REGISTER(ElementCriterion, NonConflatableCriterion)
NonConflatableCriterion::NonConflatableCriterion() :
-_ignoreChildren(false)
+_ignoreChildren(false),
+_geometryTypeFilter(GeometryTypeCriterion::GeometryType::Unknown),
+_ignoreGenericConflators(false)
{
}
NonConflatableCriterion::NonConflatableCriterion(ConstOsmMapPtr map) :
_map(map),
-_ignoreChildren(false)
+_ignoreChildren(false),
+_geometryTypeFilter(GeometryTypeCriterion::GeometryType::Unknown),
+_ignoreGenericConflators(false)
{
}
@@ -72,18 +76,36 @@ bool NonConflatableCriterion::isSatisfied(const ConstElementPtr& e) const
}
}
- if (crit->isSatisfied(e))
+ if (_ignoreGenericConflators)
+ {
+ std::shared_ptr<ConflatableElementCriterion> conflatableCrit =
+ std::dynamic_pointer_cast<ConflatableElementCriterion>(crit);
+ assert(conflatableCrit);
+ if (!conflatableCrit->supportsSpecificConflation())
+ {
+ continue;
+ }
+ }
+
+ bool satisfiesGeometryFilter = true;
+ if (_geometryTypeFilter != GeometryTypeCriterion::GeometryType::Unknown)
+ {
+ std::shared_ptr<GeometryTypeCriterion> geometryCrit =
+ std::dynamic_pointer_cast<GeometryTypeCriterion>(crit);
+ satisfiesGeometryFilter = geometryCrit->getGeometryType() == _geometryTypeFilter;
+ }
+
+ if (crit->isSatisfied(e) && satisfiesGeometryFilter)
{
// It is something we can conflate.
- // TODO: change back to trace
- LOG_DEBUG("Element: " << e->getElementId() << " is conflatable with: " << itr.key());
+ LOG_TRACE("Element: " << e->getElementId() << " is conflatable with: " << itr.key());
return false;
}
}
// Technically, there could also be something like a building way with a POI child and you'd want
- // to check for ways here as well. Will wait to support that until an actual use case is
- // encountered.
+ // to check for ways here as well. Will wait to support that situation until an actual use case
+ // is encountered.
if (!_ignoreChildren && e->getElementType() == ElementType::Relation)
{
// We need to verify that none of the child relation members are conflatable in order to sign
@@ -98,7 +120,7 @@ bool NonConflatableCriterion::isSatisfied(const ConstElementPtr& e) const
if (memberElement && isSatisfied(memberElement))
{
// It is something we can conflate.
- LOG_DEBUG(
+ LOG_TRACE(
"Element: " << e->getElementId() << " has a child that is conflatable: " <<
memberElement->getElementId() << ", and member children are not being ignored, " <<
"therefore it is conflatable.");
@@ -108,7 +130,7 @@ bool NonConflatableCriterion::isSatisfied(const ConstElementPtr& e) const
}
// It is not something we can conflate.
- LOG_DEBUG("Element: " << e->getElementId() << " is not conflatable.");
+ LOG_TRACE("Element: " << e->getElementId() << " is not conflatable.");
LOG_VART(e);
return true;
}