This is an automated email from the ASF dual-hosted git repository. jiayu pushed a commit to branch prepare-1.7.2 in repository https://gitbox.apache.org/repos/asf/sedona.git
commit 98317136228ae5d8373eb01eedccdecc5e23f253 Author: Paweł Tokaj <[email protected]> AuthorDate: Wed May 21 18:44:34 2025 +0200 [SEDONA-734] Fix relation parsing in OSM reader (#1947) * SEDONA-734 fix osm relation parsing * SEDONA-734 fix osm relation parsing --- .../osmpbf/extractors/RelationExtractor.java | 7 ++++--- .../scala/org/apache/sedona/sql/OsmReaderTest.scala | 19 ++++++++++++++++--- 2 files changed, 20 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..6bedc8f97a 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,20 @@ 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 } }
