This is an automated email from the ASF dual-hosted git repository.

jiayu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sedona.git


The following commit(s) were added to refs/heads/master by this push:
     new 251d070043 [SEDONA-734] Fix relation parsing in OSM reader (#1947)
251d070043 is described below

commit 251d070043d98f81f1aaaf85d52cdfdd511f1f90
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
     }
   }
 

Reply via email to