VectorXZ intersection = getLineSegmentIntersection(
side.p1, side.p2, r1, r2);
if (intersection != null) {
MapNode intersectionNode;
if (intersection.equals(r1)) {
intersectionNode = coastline.get(i);
} else if (intersection.equals(r2)) {
intersectionNode = coastline.get(i + 1);
} else {
intersectionNode = createFakeMapNode(intersection,
++highestNodeId, osmData, nodeMap, mapNodes);
coastline.add(i + 1, intersectionNode);
i += 1;
}
intersectionsSide.add(new NodeOnBBox(intersectionNode,
isRightOf(r1, side.p1, side.p2)));
}
}
}
/* add intersections for this side of the bbox,
* sorted by distance from corner */
Collections.sort(intersectionsSide, new Comparator<NodeOnBBox>() {
@Override public int compare(NodeOnBBox n1, NodeOnBBox n2) {
return Double.compare(
n1.node.getPos().distanceTo(side.p1),
n2.node.getPos().distanceTo(side.p1));
}
});
bBoxNodes.addAll(intersectionsSide);
MapNode cornerNode = createFakeMapNode(side.p2,
++highestNodeId, osmData, nodeMap, mapNodes);
bBoxNodes.add(new NodeOnBBox(cornerNode, null));
}