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 <[email protected]> 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);
