You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sedona.apache.org by ma...@apache.org on 2022/06/12 19:06:27 UTC

[incubator-sedona] 02/02: Add ST_Point

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

malka pushed a commit to branch SEDONA-121]-constructors-from-spark2flink
in repository https://gitbox.apache.org/repos/asf/incubator-sedona.git

commit d5ba3e71dc09ebc0c3dfe82c704684c6d2b714f7
Author: Netanel Malka <ne...@gmail.com>
AuthorDate: Sun Jun 12 22:01:53 2022 +0300

    Add ST_Point
---
 docs/api/flink/Constructor.md                      | 14 +++++++++++
 .../main/java/org/apache/sedona/flink/Catalog.java |  1 +
 .../sedona/flink/expressions/Constructors.java     |  9 ++++++++
 .../org/apache/sedona/flink/ConstructorTest.java   | 27 ++++++++++++++++++++++
 4 files changed, 51 insertions(+)

diff --git a/docs/api/flink/Constructor.md b/docs/api/flink/Constructor.md
index e8568b01..b193fe9f 100644
--- a/docs/api/flink/Constructor.md
+++ b/docs/api/flink/Constructor.md
@@ -1,3 +1,17 @@
+## ST_Point
+
+Introduction: Construct a Point from X and Y
+
+Format: `ST_Point (X:decimal, Y:decimal)`
+
+Since: `v1.2.1`
+
+SQL example:
+```SQL
+SELECT ST_Point(x, y) AS pointshape
+FROM pointtable
+```
+
 ## ST_GeomFromWKT
 
 Introduction: Construct a Geometry from Wkt
diff --git a/flink/src/main/java/org/apache/sedona/flink/Catalog.java b/flink/src/main/java/org/apache/sedona/flink/Catalog.java
index 9e4ff44a..81c2a457 100644
--- a/flink/src/main/java/org/apache/sedona/flink/Catalog.java
+++ b/flink/src/main/java/org/apache/sedona/flink/Catalog.java
@@ -20,6 +20,7 @@ import org.apache.sedona.flink.expressions.*;
 public class Catalog {
     public static UserDefinedFunction[] getFuncs() {
         return new UserDefinedFunction[]{
+                new Constructors.ST_Point(),
                 new Constructors.ST_PointFromText(),
                 new Constructors.ST_LineStringFromText(),
                 new Constructors.ST_LineFromText(),
diff --git a/flink/src/main/java/org/apache/sedona/flink/expressions/Constructors.java b/flink/src/main/java/org/apache/sedona/flink/expressions/Constructors.java
index 97900ede..fc006e18 100644
--- a/flink/src/main/java/org/apache/sedona/flink/expressions/Constructors.java
+++ b/flink/src/main/java/org/apache/sedona/flink/expressions/Constructors.java
@@ -33,6 +33,15 @@ public class Constructors {
         return formatUtils.readGeometry(geom);
     }
 
+    public static class ST_Point extends ScalarFunction {
+        @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class)
+        public Geometry eval(@DataTypeHint("Double") Double x, @DataTypeHint("Double") Double y) throws ParseException {
+            Coordinate coordinates = new Coordinate(x, y);
+            GeometryFactory geometryFactory = new GeometryFactory();
+            return geometryFactory.createPoint(coordinates);
+        }
+    }
+
     public static class ST_PointFromText extends ScalarFunction {
         @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class)
         public Geometry eval(@DataTypeHint("String") String s, @DataTypeHint("String") String inputDelimiter) throws ParseException {
diff --git a/flink/src/test/java/org/apache/sedona/flink/ConstructorTest.java b/flink/src/test/java/org/apache/sedona/flink/ConstructorTest.java
index dd8925d6..077130d5 100644
--- a/flink/src/test/java/org/apache/sedona/flink/ConstructorTest.java
+++ b/flink/src/test/java/org/apache/sedona/flink/ConstructorTest.java
@@ -43,6 +43,33 @@ public class ConstructorTest extends TestBase{
         initialize();
     }
 
+    @Test
+    public void test2DPoint() {
+        List<Row> data = new ArrayList<>();
+        data.add(Row.of(1.0, 2.0 , "point"));
+        String[] colNames = new String[]{"x", "y", "name_point"};
+
+        TypeInformation<?>[] colTypes = {
+                BasicTypeInfo.DOUBLE_TYPE_INFO,
+                BasicTypeInfo.DOUBLE_TYPE_INFO,
+                BasicTypeInfo.STRING_TYPE_INFO};
+        RowTypeInfo typeInfo = new RowTypeInfo(colTypes, colNames);
+        DataStream<Row> ds = env.fromCollection(data).returns(typeInfo);
+        Table pointTable = tableEnv.fromDataStream(ds);
+
+        Table geomTable = pointTable
+                .select(call(Constructors.ST_Point.class.getSimpleName(), $(colNames[0]), $(colNames[1]))
+                        .as(colNames[2]));
+
+        String result = first(geomTable)
+                .getFieldAs(colNames[2])
+                .toString();
+
+        String expected = "POINT (1 2)";
+
+        assertEquals(result, expected);
+    }
+
     @Test
     public void testPointFromText() {
         List<Row> data = createPointWKT(testDataSize);