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 2022/11/16 03:31:28 UTC
[incubator-sedona] branch master updated: [SEDONA-193] Regression in ST_AsBinary (#713)
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/incubator-sedona.git
The following commit(s) were added to refs/heads/master by this push:
new 5c88ab49 [SEDONA-193] Regression in ST_AsBinary (#713)
5c88ab49 is described below
commit 5c88ab4997de9d09c14b06234d72e384728cd9e0
Author: Martin Andersson <u....@gmail.com>
AuthorDate: Wed Nov 16 04:31:22 2022 +0100
[SEDONA-193] Regression in ST_AsBinary (#713)
---
common/src/main/java/org/apache/sedona/common/Functions.java | 4 ++++
.../src/main/java/org/apache/sedona/common/utils/GeomUtils.java | 9 +++++++++
.../org/apache/spark/sql/sedona_sql/expressions/Functions.scala | 4 ++--
sql/src/test/scala/org/apache/sedona/sql/functionTestScala.scala | 9 +++++++++
4 files changed, 24 insertions(+), 2 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 7d98bbad..46755855 100644
--- a/common/src/main/java/org/apache/sedona/common/Functions.java
+++ b/common/src/main/java/org/apache/sedona/common/Functions.java
@@ -242,6 +242,10 @@ public class Functions {
return GeomUtils.getEWKB(geometry);
}
+ public static byte[] asWKB(Geometry geometry) {
+ return GeomUtils.getWKB(geometry);
+ }
+
public static String asGeoJson(Geometry geometry) {
if (geometry == null) {
return null;
diff --git a/common/src/main/java/org/apache/sedona/common/utils/GeomUtils.java b/common/src/main/java/org/apache/sedona/common/utils/GeomUtils.java
index b3d3cc7c..736b5bcc 100644
--- a/common/src/main/java/org/apache/sedona/common/utils/GeomUtils.java
+++ b/common/src/main/java/org/apache/sedona/common/utils/GeomUtils.java
@@ -158,6 +158,15 @@ public class GeomUtils {
return writer.write(geometry);
}
+ public static byte[] getWKB(Geometry geometry) {
+ if (geometry == null) {
+ return null;
+ }
+ int endian = ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN ? ByteOrderValues.BIG_ENDIAN : ByteOrderValues.LITTLE_ENDIAN;
+ WKBWriter writer = new WKBWriter(GeomUtils.getDimension(geometry), endian, false);
+ return writer.write(geometry);
+ }
+
public static Geometry get2dGeom(Geometry geom) {
Coordinate[] coordinates = geom.getCoordinates();
GeometryFactory geometryFactory = new GeometryFactory();
diff --git a/sql/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Functions.scala b/sql/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Functions.scala
index a51231c9..298174c2 100644
--- a/sql/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Functions.scala
+++ b/sql/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Functions.scala
@@ -298,14 +298,14 @@ case class ST_AsGeoJSON(inputExpressions: Seq[Expression])
// TODO: sernetcdf is bundled with an ancient version of apache commons-codec, which
// causes spark sql to throw NoSuchMethodError when folding binary expressions.
case class ST_AsBinary(inputExpressions: Seq[Expression])
- extends InferredUnaryExpression(Functions.asEWKB) {
+ extends InferredUnaryExpression(Functions.asWKB) {
protected def withNewChildrenInternal(newChildren: IndexedSeq[Expression]) = {
copy(inputExpressions = newChildren)
}
}
-// TODO: ST_AsEWKB is an alias of ST_AsBinary, which is also affected by the sernetcdf
+// TODO: ST_AsEWKB is similar to ST_AsBinary, which is also affected by the sernetcdf
// problem.
case class ST_AsEWKB(inputExpressions: Seq[Expression])
extends InferredUnaryExpression(Functions.asEWKB) {
diff --git a/sql/src/test/scala/org/apache/sedona/sql/functionTestScala.scala b/sql/src/test/scala/org/apache/sedona/sql/functionTestScala.scala
index 99d68d51..a0cd4a33 100644
--- a/sql/src/test/scala/org/apache/sedona/sql/functionTestScala.scala
+++ b/sql/src/test/scala/org/apache/sedona/sql/functionTestScala.scala
@@ -373,6 +373,15 @@ class functionTestScala extends TestBaseScala with Matchers with GeometrySample
assert(Hex.encodeHexString(df.first().get(0).asInstanceOf[Array[Byte]]) == s)
}
+ it("Passed ST_AsBinary with srid") {
+ // ST_AsBinary should return a WKB.
+ // WKB does not contain any srid.
+ val df = sparkSession.sql("SELECT ST_AsBinary(ST_SetSRID(ST_Point(1.0,1.0), 3021)), ST_AsBinary(ST_Point(1.0,1.0))")
+ val withSrid: Array[Byte] = df.first().getAs(0)
+ val withoutSrid: Array[Byte] = df.first().getAs(1)
+ assert(withSrid.seq == withoutSrid.seq)
+ }
+
it("Passed ST_AsGML") {
val df = sparkSession.sql("SELECT ST_GeomFromWKT('POLYGON((1 1, 8 1, 8 8, 1 8, 1 1))') AS polygon")
df.createOrReplaceTempView("table")