@Override public Iterable<Relation> relations() { return Iterables.translate(this.relationIdentifierToAtlasIndices, identifier -> relation(identifier)); }
protected List<Relation> relationAllRelationsWithSameOsmIdentifier(final long identifier) { final List<Relation> result = new ArrayList<>(); final long osmIdentifier = this.relationIdentifierToRelationOsmIdentifier.get(identifier); for (final long candidateIdentifier : this.relationOsmIdentifierToRelationIdentifiers .get(osmIdentifier)) { result.add(relation(candidateIdentifier)); } return result; }
/** * Take all the relations an {@link AtlasEntity} belongs to, and replace them with the * corresponding relations linking back to this {@link MultiAtlas}. * * @param entity * The {@link AtlasEntity} * @return The relations of this entity, as viewed from this multi atlas. */ protected Set<Relation> multifyRelations(final AtlasEntity entity) { final Set<Relation> subRelations = entity.relations(); final Set<Relation> result = new HashSet<>(); for (final Relation relation : subRelations) { result.add(relation(relation.getIdentifier())); } return result; }
this.relationIdentifierToAtlasIndices.forEach(identifier -> final Relation relation = relation(identifier); if (relation.members().size() > 0 && relation.bounds() != null)
@Test public void testOneWaySubAtlasWithRelations() { final Atlas subAtlas1 = this.setup.oneWaySubAtlas1From1To3WithRelations(); final Atlas subAtlas2 = this.setup.oneWaySubAtlas2From1To3WithRelations(); final MultiAtlas multiAtlas = new MultiAtlas(subAtlas1, subAtlas2); // Verify first edge verifyEdge(multiAtlas.edge(123456789120001L), MultiAtlasBorderFixerTestRule.POINT_1_LOCATION, MultiAtlasBorderFixerTestRule.POINT_2_LOCATION); // Verify second edge verifyEdge(multiAtlas.edge(123456789120002L), MultiAtlasBorderFixerTestRule.POINT_2_LOCATION, MultiAtlasBorderFixerTestRule.POINT_3_LOCATION); // Verify relations Assert.assertEquals(multiAtlas.edge(123456789120001L).relations().size(), 2); Assert.assertEquals(multiAtlas.edge(123456789120002L).relations().size(), 2); // Verify that relation has members Assert.assertEquals(multiAtlas.relation(987654321L).members().size(), 2); Assert.assertEquals(multiAtlas.relation(887654321L).members().size(), 2); }
multiEntity = multiAtlas().relation(identifier);
@Test public void testSlicedRelation() { final Relation relation1 = this.multi.relation(1L); final RelationMemberList members = relation1.members(); Assert.assertEquals(4, members.size()); for (int i = 0; i < members.size(); i++) { Assert.assertTrue(members.get(i) != null); } // Members are ordered by entity type and ascending member identifier Assert.assertEquals(4, members.get(0).getEntity().getIdentifier()); Assert.assertEquals(1234, members.get(1).getEntity().getIdentifier()); Assert.assertEquals(-9, members.get(2).getEntity().getIdentifier()); Assert.assertEquals(9, members.get(3).getEntity().getIdentifier()); final Relation relation2 = this.multi.relation(2L); final RelationMemberList allMembers2 = relation2.allKnownOsmMembers(); final Relation relation3 = this.multi.relation(3L); final RelationMemberList allMembers3 = relation3.allKnownOsmMembers(); Assert.assertEquals(8, allMembers2.size()); Assert.assertEquals(8, allMembers3.size()); }
@Test public void testOneWaySubAtlasWithInconsistentRoadsAndARelation() { final Atlas subAtlas1 = this.setup.oneWaySubAtlas1WithInconsistentRoadsAndARelation(); final Atlas subAtlas2 = this.setup.oneWaySubAtlas2WithInconsistentRoadsAndARelation(); final MultiAtlas multiAtlas = new MultiAtlas(subAtlas1, subAtlas2); // Verify edges are NOT gone even though they were forming an inconsistent road Assert.assertNotNull(multiAtlas.edge(123456789120000L)); Assert.assertNotNull(multiAtlas.edge(123456789120001L)); Assert.assertNotNull(multiAtlas.edge(123456789120002L)); // Verify that relation has members Assert.assertEquals(multiAtlas.relation(987654321L).members().size(), 2); Assert.assertEquals(multiAtlas.relation(887654321L).members().size(), 1); // Verify fixed edges verifyEdge(multiAtlas.edge(223456789120001L), MultiAtlasBorderFixerTestRule.POINT_5_LOCATION, MultiAtlasBorderFixerTestRule.POINT_6_LOCATION); verifyEdge(multiAtlas.edge(223456789120002L), MultiAtlasBorderFixerTestRule.POINT_6_LOCATION, MultiAtlasBorderFixerTestRule.POINT_7_LOCATION); }