This is an automated email from the ASF dual-hosted git repository. imbruced pushed a commit to branch SEDONA-734-fix-relation-parsing in repository https://gitbox.apache.org/repos/asf/sedona.git
commit bff958d8a38b54e8948824f523e825ec236b5b52 Author: pawelkocinski <[email protected]> AuthorDate: Wed May 21 00:00:45 2025 +0200 SEDONA-734 fix osm relation parsing --- .../osmpbf/extractors/RelationExtractor.java | 7 ++++--- .../scala/org/apache/sedona/sql/OsmReaderTest.scala | 20 +++++++++++++++++--- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/spark/common/src/main/java/org/apache/sedona/sql/datasources/osmpbf/extractors/RelationExtractor.java b/spark/common/src/main/java/org/apache/sedona/sql/datasources/osmpbf/extractors/RelationExtractor.java index 19edd837c1..aa04189caa 100644 --- a/spark/common/src/main/java/org/apache/sedona/sql/datasources/osmpbf/extractors/RelationExtractor.java +++ b/spark/common/src/main/java/org/apache/sedona/sql/datasources/osmpbf/extractors/RelationExtractor.java @@ -72,12 +72,13 @@ public class RelationExtractor { long[] memberIds = new long[relation.getMemidsCount()]; if (relation.getMemidsCount() != 0) { - long firstId = relation.getMemids(0); + long idValue = relation.getMemids(0); - memberIds[0] = firstId; + memberIds[0] = idValue; for (int i = 1; i < relation.getMemidsCount(); i++) { - memberIds[i] = relation.getMemids(i) + firstId; + idValue += relation.getMemids(i); + memberIds[i] = idValue; } } diff --git a/spark/common/src/test/scala/org/apache/sedona/sql/OsmReaderTest.scala b/spark/common/src/test/scala/org/apache/sedona/sql/OsmReaderTest.scala index d3f9a52c1c..bdcbd1767a 100644 --- a/spark/common/src/test/scala/org/apache/sedona/sql/OsmReaderTest.scala +++ b/spark/common/src/test/scala/org/apache/sedona/sql/OsmReaderTest.scala @@ -175,7 +175,7 @@ class OsmReaderTest extends TestBaseScala with Matchers { .join(nodes, col("r.ref") === nodes("id")) .groupBy("r.id") .count() - .count() shouldEqual (113) + .count() shouldEqual (162) relations .selectExpr("explode(refs) AS ref", "id") @@ -183,7 +183,7 @@ class OsmReaderTest extends TestBaseScala with Matchers { .join(ways, col("r.ref") === ways("id")) .groupBy("r.id") .count() - .count() shouldEqual (162) + .count() shouldEqual (261) relations .selectExpr("explode(refs) AS ref", "id") @@ -191,7 +191,21 @@ class OsmReaderTest extends TestBaseScala with Matchers { .join(relations.as("r2"), col("r1.ref") === col("r2.id")) .groupBy("r1.id") .count() - .count() shouldEqual (31) + .count() shouldEqual (54) + + val relationsList = relations + .where("id == 7360676") + .selectExpr("refs") + .as[Seq[String]] + .collect() + .head + + val expectedRelationsList = Seq( + "252356770", "503642591", "4939150452", "1373711177", "4939150459", "503642592" + ) + + relationsList.length shouldEqual (expectedRelationsList.length) + relationsList should contain theSameElementsAs expectedRelationsList } }
