if(via == null) {
via = w;
}
}
} else if(m.isNode()) {
Node n = m.getNode();
if("via".equals(m.getRole()) && via == null) {
via = n;
}
}
}
}
if (fromWay == null || toWay == null || via == null)
return;
Node viaNode;
if(via instanceof Node)
{
viaNode = (Node) via;
if(!fromWay.isFirstLastNode(viaNode))
return;
}
else
{
Way viaWay = (Way) via;
Node firstNode = viaWay.firstNode();
Node lastNode = viaWay.lastNode();
Boolean onewayvia = false;
String onewayviastr = viaWay.get("oneway");
if(onewayviastr != null)
{
if("-1".equals(onewayviastr)) {
onewayvia = true;
Node tmp = firstNode;
firstNode = lastNode;
lastNode = tmp;
} else {
onewayvia = OsmUtils.getOsmBoolean(onewayviastr);
if (onewayvia == null) {
onewayvia = false;
}
}
}
if(fromWay.isFirstLastNode(firstNode)) {
viaNode = firstNode;
} else if (!onewayvia && fromWay.isFirstLastNode(lastNode)) {
viaNode = lastNode;
} else
return;
}
/* find the "direct" nodes before the via node */
Node fromNode;
if(fromWay.firstNode() == via) {
fromNode = fromWay.getNode(1);
} else {
fromNode = fromWay.getNode(fromWay.getNodesCount()-2);
}