@Override public Polygon reversed() { return new Polygon(super.reversed().getPoints()); }
private void createEdgeFromRemainingPolyline(final Line line, final int startIndex, final boolean isReversed, final boolean hasReverseEdge, final WaySectionIdentifierFactory identifierFactory, final List<TemporaryEdge> newEdgesForLine) { // If we have a single way-section identifier left to use, we're going to run out // identifiers if we continue sectioning. At this point, take the rest of the // un-sectioned polyline and add it as the 999th edge. final PolyLine polyline = line.asPolyLine(); final PolyLine rawPolyLine = new PolyLine(polyline.truncate(startIndex, 0)); final PolyLine edgePolyLine = isReversed ? rawPolyLine.reversed() : rawPolyLine; final long edgeIdentifier = identifierFactory.nextIdentifier(); // Update the tags to indicate this edge wasn't way-sectioned final Map<String, String> tags = line.getTags(); tags.put(SyntheticInvalidWaySectionTag.KEY, SyntheticInvalidWaySectionTag.YES.toString()); // Add the edge newEdgesForLine.add(new TemporaryEdge(edgeIdentifier, edgePolyLine, tags, hasReverseEdge)); }
private void validateEdgePolyLinesMatch(final Edge forwardEdge, final Edge backwardEdge) { final BiPredicate<PolyLine, PolyLine> equal = (left, right) -> left .equals(right.reversed()); final long forwardEdgeIdentifier = forwardEdge.getIdentifier(); final PolyLine forwardPolyLine = forwardEdge.asPolyLine(); final PolyLine backwardPolyLine = backwardEdge.asPolyLine(); if (differ(forwardPolyLine, backwardPolyLine, equal)) { throw new CoreException( "Forward edge {} polyline {} does not match its backward edge polyline {}", forwardEdgeIdentifier, forwardPolyLine, backwardPolyLine); } } }
protected void validateReverseEdgePolyLineUpdated() { for (final Edge edge : this.atlas .edges(edge -> edge.hasReverseEdge() && edge.isMasterEdge())) { final Edge reversed = edge.reversed().orElseThrow(() -> new CoreException( "Edge {} should have a reverse, but does not.", edge.getIdentifier())); final PolyLine forward = edge.asPolyLine(); final PolyLine backward = reversed.asPolyLine(); if (!forward.equals(backward.reversed())) { throw new CoreException( "Edge {} and its reverse {} have mismatching PolyLines: Forward = {}, Backward = {}", edge.getIdentifier(), reversed.getIdentifier(), forward, backward); } } } }
newEdge.getReversedIdentifier(), polyLine.reversed(), currentIdentifier, previousIdentifier, tags); candidateEdgeList.add(newReverseEdge);
final PolyLine edgePolyline = isReversed ? rawPolyline.reversed() : rawPolyline;
.getBucketCollectionForShard(SlippyTile.forName("3-0-0")) .map(collection -> collection.contains(testLineAccrossBuckets)).orElse(false)); startLocationBuckets.add(testLineAccrossBuckets.reversed()); Assert.assertTrue( startLocationBuckets.getBucketCollectionForShard(SlippyTile.forName("3-3-3")) .map(collection -> collection.contains(testLineAccrossBuckets.reversed())) .orElse(false)); startLocationBuckets.clear();
@Test public void testMatchingEdgePolyLines() { final ChangeBuilder builder = new ChangeBuilder(); builder.add(new FeatureChange(ChangeType.ADD, new CompleteEdge(123L, PolyLine.TEST_POLYLINE, null, null, null, null))); builder.add(new FeatureChange(ChangeType.ADD, new CompleteEdge(-123L, PolyLine.TEST_POLYLINE.reversed(), null, null, null, null))); builder.get(); }
@Test public void testReversedOneWayLine() { // Based on https://www.openstreetmap.org/way/333112568 final Atlas slicedRawAtlas = this.setup.getReversedOneWayLineAtlas(); final Atlas finalAtlas = new WaySectionProcessor(slicedRawAtlas, AtlasLoadingOption.createOptionWithAllEnabled(COUNTRY_BOUNDARY_MAP)).run(); Assert.assertEquals("One edge", 1, finalAtlas.numberOfEdges()); Assert.assertEquals("Two nodes", 2, finalAtlas.numberOfNodes()); Assert.assertEquals("Verify that the direction of the original line was reversed", slicedRawAtlas.line(333112568000000L).asPolyLine(), finalAtlas.edge(333112568000000L).asPolyLine().reversed()); }
temporaryEdge.getPolyLine().reversed(), temporaryEdge.getTags());