v0.2.47..v0.2.48 changeset NetworkDetails.cpp
Garret Voltz edited this page Sep 27, 2019
·
1 revision
diff --git a/hoot-core/src/main/cpp/hoot/core/conflate/network/NetworkDetails.cpp b/hoot-core/src/main/cpp/hoot/core/conflate/network/NetworkDetails.cpp
index 9391d12..457d327 100644
--- a/hoot-core/src/main/cpp/hoot/core/conflate/network/NetworkDetails.cpp
+++ b/hoot-core/src/main/cpp/hoot/core/conflate/network/NetworkDetails.cpp
@@ -115,12 +115,16 @@ Radians NetworkDetails::calculateHeading(ConstEdgeLocationPtr el) const
return WayHeading::calculateHeading(wl);
}
-Radians NetworkDetails::calculateHeadingAtVertex(ConstNetworkEdgePtr e, ConstNetworkVertexPtr v)
- const
-{
+Radians NetworkDetails::calculateHeadingAtVertex(ConstNetworkEdgePtr e,
+ ConstNetworkVertexPtr v) const
+{
+ // Is it possible if e is a relation and has one way member, then we should use that for the way
+ // here? Haven't seen evidence of that yet, so not implementing it.
+
if (e->getMembers().size() != 1 || e->getMembers()[0]->getElementType() != ElementType::Way)
{
LOG_VART(e);
+ LOG_VART(e->getMembers()[0]);
throw IllegalArgumentException("The input edge must have exactly 1 way as its member.");
}
@@ -391,6 +395,10 @@ double NetworkDetails::_getEdgeAngleScore(ConstNetworkVertexPtr v1, ConstNetwork
{
double score = 1.0;
+ LOG_VART(e1->getMembers().size());
+ LOG_VART(e1->getMembers()[0]->getElementId());
+ LOG_VART(e2->getMembers().size());
+ LOG_VART(e2->getMembers()[0]->getElementId());
// if this edge is a simple way type.
if (e1->getMembers().size() == 1 && e1->getMembers()[0]->getElementType() == ElementType::Way &&
e2->getMembers().size() == 1 && e2->getMembers()[0]->getElementType() == ElementType::Way)
@@ -998,39 +1006,51 @@ bool NetworkDetails::isStringCandidate(ConstNetworkEdgePtr e1, ConstNetworkEdgeP
if (e1->isStub() || e2->isStub())
{
- result = false;
- }
- else if (e2->contains(e1->getFrom()))
- {
- Radians r1, r2;
- if (e1->getFrom() == e2->getFrom())
- {
- r1 = calculateHeadingAtVertex(e1, e1->getFrom());
- r2 = calculateHeadingAtVertex(e2, e2->getFrom());
- }
- else
- {
- r1 = calculateHeadingAtVertex(e1, e1->getFrom());
- r2 = calculateHeadingAtVertex(e2, e2->getTo());
- }
- result = WayHeading::deltaMagnitude(r1, r2) > toRadians(45);
- LOG_VART(toDegrees(WayHeading::deltaMagnitude(r1, r2)));
+ return result;
}
- else if (e2->contains(e1->getTo()))
+
+ LOG_VART(e1->getMembers().size());
+ LOG_VART(e1->getMembers()[0]->getElementId());
+ LOG_VART(e2->getMembers().size());
+ LOG_VART(e2->getMembers()[0]->getElementId());
+
+ if (e1->getMembers().size() == 1 &&
+ e2->getMembers().size() == 1 &&
+ e1->getMembers()[0]->getElementType() == ElementType::Way &&
+ e2->getMembers()[0]->getElementType() == ElementType::Way)
{
- Radians r1, r2;
- if (e1->getTo() == e2->getTo())
+ if (e2->contains(e1->getFrom()))
{
- r1 = calculateHeadingAtVertex(e1, e1->getTo());
- r2 = calculateHeadingAtVertex(e2, e2->getTo());
+ Radians r1, r2;
+ if (e1->getFrom() == e2->getFrom())
+ {
+ r1 = calculateHeadingAtVertex(e1, e1->getFrom());
+ r2 = calculateHeadingAtVertex(e2, e2->getFrom());
+ }
+ else
+ {
+ r1 = calculateHeadingAtVertex(e1, e1->getFrom());
+ r2 = calculateHeadingAtVertex(e2, e2->getTo());
+ }
+ result = WayHeading::deltaMagnitude(r1, r2) > toRadians(45);
+ LOG_VART(toDegrees(WayHeading::deltaMagnitude(r1, r2)));
}
- else
+ else if (e2->contains(e1->getTo()))
{
- r1 = calculateHeadingAtVertex(e1, e1->getTo());
- r2 = calculateHeadingAtVertex(e2, e2->getFrom());
+ Radians r1, r2;
+ if (e1->getTo() == e2->getTo())
+ {
+ r1 = calculateHeadingAtVertex(e1, e1->getTo());
+ r2 = calculateHeadingAtVertex(e2, e2->getTo());
+ }
+ else
+ {
+ r1 = calculateHeadingAtVertex(e1, e1->getTo());
+ r2 = calculateHeadingAtVertex(e2, e2->getFrom());
+ }
+ result = WayHeading::deltaMagnitude(r1, r2) > toRadians(45);
+ LOG_VART(toDegrees(WayHeading::deltaMagnitude(r1, r2)));
}
- result = WayHeading::deltaMagnitude(r1, r2) > toRadians(45);
- LOG_VART(toDegrees(WayHeading::deltaMagnitude(r1, r2)));
}
return result;