You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sedona.apache.org by ji...@apache.org on 2025/05/30 16:20:18 UTC
(sedona) 27/35: [GH-1922] ST_X/Y/Z ON null geometries (#1923)
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 e55714fe8fb001afcb754e438780ab7a8fe233d9
Author: Javier Goday <jg...@gmail.com>
AuthorDate: Wed Apr 23 20:29:41 2025 +0200
[GH-1922] ST_X/Y/Z ON null geometries (#1923)
---
.../main/java/org/apache/sedona/common/Functions.java | 12 ++++++------
.../java/org/apache/sedona/common/FunctionsTest.java | 18 ++++++++++++++++++
2 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/common/src/main/java/org/apache/sedona/common/Functions.java b/common/src/main/java/org/apache/sedona/common/Functions.java
index 97e08b7b0f..4e14055d8c 100644
--- a/common/src/main/java/org/apache/sedona/common/Functions.java
+++ b/common/src/main/java/org/apache/sedona/common/Functions.java
@@ -603,28 +603,28 @@ public class Functions {
}
public static Double x(Geometry geometry) {
- if (geometry instanceof Point) {
+ if (geometry instanceof Point && geometry.getCoordinate() != null) {
return geometry.getCoordinate().x;
}
return null;
}
public static Double y(Geometry geometry) {
- if (geometry instanceof Point) {
+ if (geometry instanceof Point && geometry.getCoordinate() != null) {
return geometry.getCoordinate().y;
}
return null;
}
public static Double z(Geometry geometry) {
- if (geometry instanceof Point) {
+ if (geometry instanceof Point && geometry.getCoordinate() != null) {
return geometry.getCoordinate().z;
}
return null;
}
public static Double m(Geometry geom) {
- if (geom instanceof Point) {
+ if (geom instanceof Point && geom.getCoordinate() != null) {
return geom.getCoordinate().getM();
}
return null;
@@ -708,12 +708,12 @@ public class Functions {
public static boolean hasM(Geometry geom) {
Coordinate coord = geom.getCoordinate();
- return !Double.isNaN(coord.getM());
+ return coord != null && !Double.isNaN(coord.getM());
}
public static boolean hasZ(Geometry geom) {
Coordinate coord = geom.getCoordinate();
- return !Double.isNaN(coord.getZ());
+ return coord != null && !Double.isNaN(coord.getZ());
}
public static Geometry flipCoordinates(Geometry geometry) {
diff --git a/common/src/test/java/org/apache/sedona/common/FunctionsTest.java b/common/src/test/java/org/apache/sedona/common/FunctionsTest.java
index 4819384e70..748c0b6c12 100644
--- a/common/src/test/java/org/apache/sedona/common/FunctionsTest.java
+++ b/common/src/test/java/org/apache/sedona/common/FunctionsTest.java
@@ -4402,4 +4402,22 @@ public class FunctionsTest extends TestBase {
expected = 2.75;
assertEquals(expected, actual, 1e-6);
}
+
+ @Test
+ public void emptyPoint() throws ParseException {
+ Geometry point = Constructors.geomFromEWKT("POINT(1 1)");
+ Geometry emptyPoint = Constructors.geomFromEWKT("POINT EMPTY");
+
+ double actualX = Functions.x(point);
+ double expectedX = 1.0;
+ assertEquals(expectedX, actualX, 1e-6);
+
+ assertNull(Functions.x(emptyPoint));
+ assertNull(Functions.y(emptyPoint));
+ assertNull(Functions.z(emptyPoint));
+ assertNull(Functions.m(emptyPoint));
+
+ assertFalse(Functions.hasM(emptyPoint));
+ assertFalse(Functions.hasZ(emptyPoint));
+ }
}