diff --git a/hoot-core/src/main/cpp/hoot/core/conflate/highway/HighwayMatchCreator.cpp b/hoot-core/src/main/cpp/hoot/core/conflate/highway/HighwayMatchCreator.cpp
index 9fc9163..ff24f1f 100644
--- a/hoot-core/src/main/cpp/hoot/core/conflate/highway/HighwayMatchCreator.cpp
+++ b/hoot-core/src/main/cpp/hoot/core/conflate/highway/HighwayMatchCreator.cpp
@@ -22,7 +22,7 @@
* This will properly maintain the copyright information. DigitalGlobe
* copyrights will be updated automatically.
*
- * @copyright Copyright (C) 2015, 2016, 2017, 2018, 2019 DigitalGlobe (http://www.digitalglobe.com/)
+ * @copyright Copyright (C) 2015, 2016, 2017, 2018, 2019, 2020 DigitalGlobe (http://www.digitalglobe.com/)
*/
#include "HighwayMatchCreator.h"
@@ -41,7 +41,7 @@
#include <hoot/core/util/ConfPath.h>
#include <hoot/core/util/ConfigOptions.h>
#include <hoot/core/util/Units.h>
-#include <hoot/core/visitors/IndexElementsVisitor.h>
+#include <hoot/core/visitors/SpatialIndexer.h>
#include <hoot/core/conflate/highway/HighwayClassifier.h>
#include <hoot/core/algorithms/subline-matching/SublineStringMatcher.h>
#include <hoot/core/util/NotImplementedException.h>
@@ -135,7 +135,7 @@ public:
// find other nearby candidates
set<ElementId> neighbors =
- IndexElementsVisitor::findNeighbors(*env, getIndex(), _indexToEid, getMap());
+ SpatialIndexer::findNeighbors(*env, getIndex(), _indexToEid, getMap());
ElementId from(e->getElementType(), e->getId());
@@ -243,6 +243,8 @@ public:
{
if (!_index)
{
+ LOG_INFO("Creating highway feature index...");
+
// No tuning was done, I just copied these settings from OsmMapIndex.
// 10 children - 368 - see #3054
std::shared_ptr<MemoryPageStore> mps(new MemoryPageStore(728));
@@ -254,7 +256,7 @@ public:
std::shared_ptr<ArbitraryCriterion> pCrit(new ArbitraryCriterion(f));
// Instantiate our visitor
- IndexElementsVisitor v(
+ SpatialIndexer v(
_index, _indexToEid, pCrit,
std::bind(&HighwayMatchVisitor::getSearchRadius, this, placeholders::_1), getMap());
@@ -320,20 +322,39 @@ MatchPtr HighwayMatchCreator::createMatch(const ConstOsmMapPtr& map, ElementId e
_tagAncestorDiff, map->getElement(eid1), map->getElement(eid2));
}
-void HighwayMatchCreator::createMatches(const ConstOsmMapPtr& map, std::vector<ConstMatchPtr>& matches,
- ConstMatchThresholdPtr threshold)
+void HighwayMatchCreator::createMatches(
+ const ConstOsmMapPtr& map, std::vector<ConstMatchPtr>& matches, ConstMatchThresholdPtr threshold)
{
QElapsedTimer timer;
timer.start();
- LOG_INFO("Looking for matches with: " << className() << "...");
+
+ QString searchRadiusStr;
+ const double searchRadius = ConfigOptions().getSearchRadiusHighway();
+ if (searchRadius < 0)
+ {
+ searchRadiusStr = "within a feature dependent search radius";
+ }
+ else
+ {
+ searchRadiusStr =
+ "within a search radius of " + QString::number(searchRadius, 'g', 2) + " meters";
+ }
+ LOG_STATUS("Looking for matches with: " << className() << " " << searchRadiusStr << "...");
LOG_VARD(*threshold);
+ const int matchesSizeBefore = matches.size();
+
HighwayMatchVisitor v(
map, matches, _classifier, _sublineMatcher, Status::Unknown1, threshold, _tagAncestorDiff,
_filter);
- map->visitRo(v);
- LOG_INFO(
+ map->visitWaysRo(v);
+ map->visitRelationsRo(v);
+ const int matchesSizeAfter = matches.size();
+
+ LOG_STATUS(
"Found " << StringUtils::formatLargeNumber(v.getNumMatchCandidatesFound()) <<
- " highway match candidates in: " << StringUtils::millisecondsToDhms(timer.elapsed()) << ".");
+ " highway match candidates and " <<
+ StringUtils::formatLargeNumber(matchesSizeAfter - matchesSizeBefore) <<
+ " total matches in: " << StringUtils::millisecondsToDhms(timer.elapsed()) << ".");
}
vector<CreatorDescription> HighwayMatchCreator::getAllCreators() const