v0.2.54..v0.2.55 changeset SampledAngleHistogramExtractor.cpp
Garret Voltz edited this page Aug 14, 2020
·
1 revision
diff --git a/hoot-core/src/main/cpp/hoot/core/algorithms/extractors/SampledAngleHistogramExtractor.cpp b/hoot-core/src/main/cpp/hoot/core/algorithms/extractors/SampledAngleHistogramExtractor.cpp
index 50214a2..a27967b 100644
--- a/hoot-core/src/main/cpp/hoot/core/algorithms/extractors/SampledAngleHistogramExtractor.cpp
+++ b/hoot-core/src/main/cpp/hoot/core/algorithms/extractors/SampledAngleHistogramExtractor.cpp
@@ -62,54 +62,83 @@ public:
_sampleDistance(sampleDistance),
_headingDelta(headingDelta)
{
-
}
virtual void visit(const std::shared_ptr<const Element>& e)
{
if (e->getElementType() == ElementType::Way)
{
- const ConstWayPtr& way = _map->getWay(e->getElementId());
+ _addWay(_map->getWay(e->getElementId()));
+ }
+ else if (e->getElementType() == ElementType::Relation)
+ {
+ const ConstRelationPtr relation = std::dynamic_pointer_cast<const Relation>(e);
+ const std::vector<RelationData::Entry> relationMembers = relation->getMembers();
+ for (size_t i = 0; i < relationMembers.size(); i++)
+ {
+ RelationData::Entry member = relationMembers[i];
+ if (member.getElementId().getType() == ElementType::Way)
+ {
+ _addWay(_map->getWay(member.getElementId()));
+ }
+ }
+ }
+ }
+
+ virtual QString getDescription() const { return ""; }
+ virtual std::string getClassName() const { return ""; }
+
+private:
+
+ Histogram& _angleHistogram;
+ double _sampleDistance;
+ double _headingDelta;
+ void _addWay(const ConstWayPtr& way)
+ {
+ if (way)
+ {
vector<long> wayNodes = way->getNodeIds();
+ LOG_VART(wayNodes.size());
if (wayNodes[0] != wayNodes[wayNodes.size() - 1])
{
wayNodes.push_back(wayNodes[0]);
}
+ LOG_VART(wayNodes.size());
+
+ LOG_VART(_sampleDistance);
+ LOG_VART(_headingDelta);
vector<WayLocation> discretizedLocs;
WayDiscretizer wayDiscretizer(_map->shared_from_this(), way);
wayDiscretizer.discretize(_sampleDistance, discretizedLocs);
WayLocation lastLoc = discretizedLocs.at(0);
+ LOG_VART(lastLoc);
for (size_t i = 1; i < discretizedLocs.size(); i++)
{
//select a loc sampledDistance meters along the way
WayLocation currentLoc = discretizedLocs.at(i);
+ LOG_VART(currentLoc);
const double distance = currentLoc.getCoordinate().distance(lastLoc.getCoordinate());
+ LOG_VART(distance);
//calculate the heading using some distance around the way
const double theta = WayHeading::calculateHeading(currentLoc, _headingDelta);
+ LOG_VART(theta);
if (! ::qIsNaN(theta))
{
_angleHistogram.addAngle(theta, distance);
}
lastLoc = currentLoc;
}
+ LOG_VART(_angleHistogram.numBins());
}
}
-
- virtual QString getDescription() const { return ""; }
- virtual std::string getClassName() const { return ""; }
-
-private:
-
- Histogram& _angleHistogram;
- double _sampleDistance;
- double _headingDelta;
};
SampledAngleHistogramExtractor::SampledAngleHistogramExtractor()
{
+ setConfiguration(conf());
}
void SampledAngleHistogramExtractor::setConfiguration(const Settings& conf)