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);