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
}
}