diff --git a/flink/src/main/java/org/apache/sedona/flink/GeometryArrayTypeSerializer.java b/flink/src/main/java/org/apache/sedona/flink/GeometryArrayTypeSerializer.java new file mode 100644 index 0000000000..0a5b32e52d --- /dev/null +++ b/flink/src/main/java/org/apache/sedona/flink/GeometryArrayTypeSerializer.java @@ -0,0 +1,174 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sedona.flink; + +import java.io.IOException; +import org.apache.flink.api.common.typeutils.TypeSerializer; +import org.apache.flink.api.common.typeutils.TypeSerializerSchemaCompatibility; +import org.apache.flink.api.common.typeutils.TypeSerializerSnapshot; +import org.apache.flink.core.memory.DataInputView; +import org.apache.flink.core.memory.DataOutputView; +import org.locationtech.jts.geom.Geometry; + +public class GeometryArrayTypeSerializer extends TypeSerializer { + private static final long serialVersionUID = 1L; + + public static final GeometryArrayTypeSerializer INSTANCE = new GeometryArrayTypeSerializer(); + + public GeometryArrayTypeSerializer() {} + + @Override + public boolean isImmutableType() { + return false; + } + + @Override + public TypeSerializer duplicate() { + return this; + } + + @Override + public Geometry[] createInstance() { + return new Geometry[0]; + } + + @Override + public Geometry[] copy(Geometry[] from) { + if (from == null) { + return null; + } + Geometry[] newArray = new Geometry[from.length]; + for (int i = 0; i < from.length; i++) { + if (from[i] != null) { + newArray[i] = GeometryTypeSerializer.INSTANCE.copy(from[i]); + } else { + newArray[i] = null; + } + } + return newArray; + } + + @Override + public Geometry[] copy(Geometry[] from, Geometry[] reuse) { + return copy(from); + } + + @Override + public int getLength() { + return -1; + } + + @Override + public void serialize(Geometry[] record, DataOutputView target) throws IOException { + if (record == null) { + target.writeInt(-1); + } else { + target.writeInt(record.length); + for (Geometry geom : record) { + GeometryTypeSerializer.INSTANCE.serialize(geom, target); + } + } + } + + @Override + public Geometry[] deserialize(DataInputView source) throws IOException { + int length = source.readInt(); + if (length == -1) { + return null; + } + + Geometry[] array = new Geometry[length]; + for (int i = 0; i < length; i++) { + array[i] = GeometryTypeSerializer.INSTANCE.deserialize(source); + } + return array; + } + + @Override + public Geometry[] deserialize(Geometry[] reuse, DataInputView source) throws IOException { + return deserialize(source); + } + + @Override + public void copy(DataInputView source, DataOutputView target) throws IOException { + int length = source.readInt(); + target.writeInt(length); + + if (length > 0) { + for (int i = 0; i < length; i++) { + GeometryTypeSerializer.INSTANCE.copy(source, target); + } + } + } + + @Override + public boolean equals(Object obj) { + return obj instanceof GeometryArrayTypeSerializer; + } + + @Override + public int hashCode() { + return getClass().hashCode(); + } + + @Override + public TypeSerializerSnapshot snapshotConfiguration() { + return new GeometryArraySerializerSnapshot(); + } + + public static final class GeometryArraySerializerSnapshot + implements TypeSerializerSnapshot { + private static final int CURRENT_VERSION = 1; + + @Override + public int getCurrentVersion() { + return CURRENT_VERSION; + } + + @Override + public void writeSnapshot(DataOutputView out) throws IOException {} + + @Override + public void readSnapshot(int readVersion, DataInputView in, ClassLoader userCodeClassLoader) + throws IOException { + if (readVersion != CURRENT_VERSION) { + throw new IOException( + "Cannot read snapshot: Incompatible version " + + readVersion + + ". Expected version " + + CURRENT_VERSION); + } + } + + @Override + public TypeSerializer restoreSerializer() { + return GeometryArrayTypeSerializer.INSTANCE; + } + + @Override + public TypeSerializerSchemaCompatibility resolveSchemaCompatibility( + TypeSerializer newSerializer) { + if (newSerializer instanceof GeometryArrayTypeSerializer) { + return TypeSerializerSchemaCompatibility.compatibleAsIs(); + } else { + return TypeSerializerSchemaCompatibility.incompatible(); + } + } + } +} diff --git a/flink/src/main/java/org/apache/sedona/flink/GeometryTypeSerializer.java b/flink/src/main/java/org/apache/sedona/flink/GeometryTypeSerializer.java new file mode 100644 index 0000000000..d59fd3a686 --- /dev/null +++ b/flink/src/main/java/org/apache/sedona/flink/GeometryTypeSerializer.java @@ -0,0 +1,159 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sedona.flink; + +import java.io.IOException; +import org.apache.flink.api.common.typeutils.TypeSerializer; +import org.apache.flink.api.common.typeutils.TypeSerializerSchemaCompatibility; +import org.apache.flink.api.common.typeutils.TypeSerializerSnapshot; +import org.apache.flink.core.memory.DataInputView; +import org.apache.flink.core.memory.DataOutputView; +import org.locationtech.jts.geom.Geometry; +import org.locationtech.jts.geom.GeometryFactory; + +public class GeometryTypeSerializer extends TypeSerializer { + + private static final long serialVersionUID = 1L; + + public static final GeometryTypeSerializer INSTANCE = new GeometryTypeSerializer(); + + private static final GeometryFactory GEOMETRY_FACTORY = new GeometryFactory(); + + public GeometryTypeSerializer() {} + + @Override + public boolean isImmutableType() { + return false; + } + + @Override + public TypeSerializer duplicate() { + return this; + } + + @Override + public Geometry createInstance() { + return GEOMETRY_FACTORY.createPoint(); + } + + @Override + public Geometry copy(Geometry from) { + return (Geometry) from.copy(); + } + + @Override + public Geometry copy(Geometry from, Geometry reuse) { + return copy(from); + } + + @Override + public int getLength() { + return -1; + } + + @Override + public void serialize(Geometry record, DataOutputView target) throws IOException { + if (record == null) { + target.writeInt(-1); + } else { + byte[] data = org.apache.sedona.common.geometrySerde.GeometrySerializer.serialize(record); + target.writeInt(data.length); + target.write(data); + } + } + + @Override + public Geometry deserialize(DataInputView source) throws IOException { + int length = source.readInt(); + if (length == -1) { + return null; + } + byte[] data = new byte[length]; + source.readFully(data); + return org.apache.sedona.common.geometrySerde.GeometrySerializer.deserialize(data); + } + + @Override + public Geometry deserialize(Geometry reuse, DataInputView source) throws IOException { + return deserialize(source); + } + + @Override + public void copy(DataInputView source, DataOutputView target) throws IOException { + int length = source.readInt(); + target.writeInt(length); + if (length > 0) { + target.write(source, length); + } + } + + @Override + public boolean equals(Object obj) { + return obj instanceof GeometryTypeSerializer; + } + + @Override + public int hashCode() { + return getClass().hashCode(); + } + + @Override + public TypeSerializerSnapshot snapshotConfiguration() { + return new GeometrySerializerSnapshot(); + } + + public static final class GeometrySerializerSnapshot implements TypeSerializerSnapshot { + private static final int CURRENT_VERSION = 1; + + @Override + public int getCurrentVersion() { + return CURRENT_VERSION; + } + + @Override + public void writeSnapshot(DataOutputView out) throws IOException {} + + @Override + public void readSnapshot(int readVersion, DataInputView in, ClassLoader userCodeClassLoader) + throws IOException { + if (readVersion != CURRENT_VERSION) { + throw new IOException( + "Cannot read snapshot: Incompatible version " + + readVersion + + ". Expected version " + + CURRENT_VERSION); + } + } + + @Override + public TypeSerializer restoreSerializer() { + return GeometryTypeSerializer.INSTANCE; + } + + @Override + public TypeSerializerSchemaCompatibility resolveSchemaCompatibility( + TypeSerializer newSerializer) { + if (newSerializer instanceof GeometryTypeSerializer) { + return TypeSerializerSchemaCompatibility.compatibleAsIs(); + } else { + return TypeSerializerSchemaCompatibility.incompatible(); + } + } + } +} diff --git a/flink/src/main/java/org/apache/sedona/flink/SedonaModule.java b/flink/src/main/java/org/apache/sedona/flink/SedonaModule.java new file mode 100644 index 0000000000..d57439deab --- /dev/null +++ b/flink/src/main/java/org/apache/sedona/flink/SedonaModule.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sedona.flink; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.apache.flink.table.functions.FunctionDefinition; +import org.apache.flink.table.module.Module; + +public class SedonaModule implements Module { + + private Map functions = new HashMap<>(); + + public SedonaModule() { + Stream funcs = Arrays.stream(Catalog.getFuncs()); + Stream predicates = Arrays.stream(Catalog.getPredicates()); + + this.functions = + Stream.concat(funcs, predicates) + .collect( + Collectors.toMap( + func -> func.getClass().getSimpleName().toLowerCase(), func -> func)); + } + + @Override + public Set listFunctions() { + return functions.keySet(); + } + + @Override + public Optional getFunctionDefinition(String name) { + return Optional.ofNullable(functions.get(name.toLowerCase())); + } +} diff --git a/flink/src/main/java/org/apache/sedona/flink/SedonaModuleFactory.java b/flink/src/main/java/org/apache/sedona/flink/SedonaModuleFactory.java new file mode 100644 index 0000000000..4d80285544 --- /dev/null +++ b/flink/src/main/java/org/apache/sedona/flink/SedonaModuleFactory.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sedona.flink; + +import java.util.Collections; +import java.util.Set; +import org.apache.flink.configuration.ConfigOption; +import org.apache.flink.table.factories.ModuleFactory; +import org.apache.flink.table.module.Module; + +public class SedonaModuleFactory implements ModuleFactory { + + public static final String IDENTIFIER = "sedona"; + + @Override + public Module createModule(Context context) { + return new SedonaModule(); + } + + @Override + public String factoryIdentifier() { + return IDENTIFIER; + } + + @Override + public Set> requiredOptions() { + return Collections.emptySet(); + } + + @Override + public Set> optionalOptions() { + return Collections.emptySet(); + } +} diff --git a/flink/src/main/java/org/apache/sedona/flink/expressions/Accumulators.java b/flink/src/main/java/org/apache/sedona/flink/expressions/Accumulators.java index 4ed3627452..f51784870a 100644 --- a/flink/src/main/java/org/apache/sedona/flink/expressions/Accumulators.java +++ b/flink/src/main/java/org/apache/sedona/flink/expressions/Accumulators.java @@ -19,6 +19,7 @@ package org.apache.sedona.flink.expressions; import org.apache.flink.table.annotation.DataTypeHint; +import org.apache.sedona.flink.GeometryTypeSerializer; import org.locationtech.jts.geom.Geometry; /** Mutable accumulator of structured type for the aggregate function */ @@ -39,7 +40,10 @@ void reset() { } public static class AccGeometry { - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry geom; } diff --git a/flink/src/main/java/org/apache/sedona/flink/expressions/Aggregators.java b/flink/src/main/java/org/apache/sedona/flink/expressions/Aggregators.java index de3d2f525d..edffbadb9b 100644 --- a/flink/src/main/java/org/apache/sedona/flink/expressions/Aggregators.java +++ b/flink/src/main/java/org/apache/sedona/flink/expressions/Aggregators.java @@ -20,6 +20,7 @@ import org.apache.flink.table.annotation.DataTypeHint; import org.apache.flink.table.functions.AggregateFunction; +import org.apache.sedona.flink.GeometryTypeSerializer; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; @@ -27,7 +28,10 @@ public class Aggregators { // Compute the rectangular boundary of a number of geometries - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public static class ST_Envelope_Aggr extends AggregateFunction { Geometry createPolygon(double minX, double minY, double maxX, double maxY) { @@ -47,14 +51,21 @@ public Accumulators.Envelope createAccumulator() { } @Override - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry getValue(Accumulators.Envelope acc) { return createPolygon(acc.minX, acc.minY, acc.maxX, acc.maxY); } public void accumulate( Accumulators.Envelope acc, - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) Object o) { + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o) { Envelope envelope = ((Geometry) o).getEnvelopeInternal(); acc.minX = Math.min(acc.minX, envelope.getMinX()); acc.minY = Math.min(acc.minY, envelope.getMinY()); @@ -70,7 +81,11 @@ public void accumulate( */ public void retract( Accumulators.Envelope acc, - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) Object o) { + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o) { Geometry geometry = (Geometry) o; assert (false); } @@ -91,7 +106,10 @@ public void resetAccumulator(Accumulators.Envelope acc) { // Compute the Union boundary of numbers of geometries // - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public static class ST_Intersection_Aggr extends AggregateFunction { @@ -101,14 +119,21 @@ public Accumulators.AccGeometry createAccumulator() { } @Override - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry getValue(Accumulators.AccGeometry acc) { return acc.geom; } public void accumulate( Accumulators.AccGeometry acc, - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) Object o) { + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o) { if (acc.geom == null) { acc.geom = (Geometry) o; } else { @@ -124,7 +149,11 @@ public void accumulate( */ public void retract( Accumulators.AccGeometry acc, - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) Object o) { + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o) { Geometry geometry = (Geometry) o; assert (false); } @@ -147,7 +176,10 @@ public void resetAccumulator(Accumulators.AccGeometry acc) { // Compute the Union boundary of numbers of geometries // - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public static class ST_Union_Aggr extends AggregateFunction { @Override @@ -156,14 +188,21 @@ public Accumulators.AccGeometry createAccumulator() { } @Override - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry getValue(Accumulators.AccGeometry acc) { return acc.geom; } public void accumulate( Accumulators.AccGeometry acc, - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) Object o) { + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o) { if (acc.geom == null) { acc.geom = (Geometry) o; } else { @@ -179,7 +218,11 @@ public void accumulate( */ public void retract( Accumulators.AccGeometry acc, - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) Object o) { + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o) { Geometry geometry = (Geometry) o; assert (false); } 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 2e43f4c76d..68c3d90621 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 @@ -25,6 +25,7 @@ import org.apache.sedona.common.enums.GeometryType; import org.apache.sedona.common.utils.FormatUtils; import org.apache.sedona.common.utils.GeoHashDecoder; +import org.apache.sedona.flink.GeometryTypeSerializer; import org.locationtech.jts.geom.*; import org.locationtech.jts.io.ParseException; import org.locationtech.jts.io.gml2.GMLReader; @@ -43,7 +44,10 @@ private static Geometry getGeometryByType( } public static class ST_Point extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("Double") Double x, @DataTypeHint("Double") Double y) throws ParseException { return org.apache.sedona.common.Constructors.point(x, y); @@ -51,7 +55,10 @@ public Geometry eval(@DataTypeHint("Double") Double x, @DataTypeHint("Double") D } public static class ST_PointZ extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("Double") Double x, @DataTypeHint("Double") Double y, @@ -60,7 +67,10 @@ public Geometry eval( return eval(x, y, z, 0); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("Double") Double x, @DataTypeHint("Double") Double y, @@ -72,7 +82,10 @@ public Geometry eval( } public static class ST_PointM extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("Double") Double x, @DataTypeHint("Double") Double y, @@ -81,7 +94,10 @@ public Geometry eval( return eval(x, y, m, 0); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("Double") Double x, @DataTypeHint("Double") Double y, @@ -93,7 +109,10 @@ public Geometry eval( } public static class ST_PointZM extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("Double") Double x, @DataTypeHint("Double") Double y, @@ -103,7 +122,10 @@ public Geometry eval( return eval(x, y, z, m, 0); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("Double") Double x, @DataTypeHint("Double") Double y, @@ -116,21 +138,30 @@ public Geometry eval( } public static class ST_PointFromText extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("String") String s, @DataTypeHint("String") String inputDelimiter) throws ParseException { return getGeometryByType(s, inputDelimiter, GeometryType.POINT); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String s) throws ParseException { return eval(s, null); } } public static class ST_MakePointM extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("Double") Double x, @DataTypeHint("Double") Double y, @@ -141,13 +172,19 @@ public Geometry eval( } public static class ST_MakePoint extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("Double") Double x, @DataTypeHint("Double") Double y) throws ParseException { return org.apache.sedona.common.Constructors.makePoint(x, y, null, null); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("Double") Double x, @DataTypeHint("Double") Double y, @@ -156,7 +193,10 @@ public Geometry eval( return org.apache.sedona.common.Constructors.makePoint(x, y, z, null); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("Double") Double x, @DataTypeHint("Double") Double y, @@ -168,7 +208,10 @@ public Geometry eval( } public static class ST_LineFromText extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("String") String lineString, @DataTypeHint("String") String inputDelimiter) throws ParseException { @@ -176,14 +219,20 @@ public Geometry eval( return getGeometryByType(lineString, inputDelimiter, GeometryType.LINESTRING); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String lineString) throws ParseException { return eval(lineString, null); } } public static class ST_LineStringFromText extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("String") String lineString, @DataTypeHint("String") String inputDelimiter) throws ParseException { @@ -191,14 +240,20 @@ public Geometry eval( return new ST_LineFromText().eval(lineString, inputDelimiter); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String lineString) throws ParseException { return eval(lineString, null); } } public static class ST_PolygonFromText extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("String") String polygonString, @DataTypeHint("String") String inputDelimiter) throws ParseException { @@ -206,14 +261,20 @@ public Geometry eval( return getGeometryByType(polygonString, inputDelimiter, GeometryType.POLYGON); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String polygonString) throws ParseException { return eval(polygonString, null); } } public static class ST_MakeEnvelope extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("Double") Double minX, @DataTypeHint("Double") Double minY, @@ -223,7 +284,10 @@ public Geometry eval( return org.apache.sedona.common.Constructors.makeEnvelope(minX, minY, maxX, maxY, srid); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("Double") Double minX, @DataTypeHint("Double") Double minY, @@ -234,7 +298,10 @@ public Geometry eval( } public static class ST_PolygonFromEnvelope extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("Double") Double minX, @DataTypeHint("Double") Double minY, @@ -258,12 +325,18 @@ private static Geometry getGeometryByFileData(String wktString, FileDataSplitter } public static class ST_GeomFromWKT extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String wktString) throws ParseException { return org.apache.sedona.common.Constructors.geomFromWKT(wktString, 0); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("String") String wktString, @DataTypeHint("Int") Integer srid) throws ParseException { @@ -272,19 +345,28 @@ public Geometry eval( } public static class ST_GeomFromEWKT extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String wktString) throws ParseException { return org.apache.sedona.common.Constructors.geomFromEWKT(wktString); } } public static class ST_GeometryFromText extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String wktString) throws ParseException { return org.apache.sedona.common.Constructors.geomFromWKT(wktString, 0); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("String") String wktString, @DataTypeHint("Int") Integer srid) throws ParseException { @@ -293,12 +375,18 @@ public Geometry eval( } public static class ST_GeomFromText extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String wktString) throws ParseException { return org.apache.sedona.common.Constructors.geomFromWKT(wktString, 0); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("String") String wktString, @DataTypeHint("Int") Integer srid) throws ParseException { @@ -307,31 +395,46 @@ public Geometry eval( } public static class ST_GeomFromWKB extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String wkbString) throws ParseException { return getGeometryByFileData(wkbString, FileDataSplitter.WKB); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("Bytes") byte[] wkb) throws ParseException { return org.apache.sedona.common.Constructors.geomFromWKB(wkb); } } public static class ST_GeomFromEWKB extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String wkbString) throws ParseException { return getGeometryByFileData(wkbString, FileDataSplitter.WKB); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("Bytes") byte[] wkb) throws ParseException { return org.apache.sedona.common.Constructors.geomFromWKB(wkb); } } public static class ST_PointFromWKB extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String wkbString) throws ParseException { Geometry geometry = getGeometryByFileData(wkbString, FileDataSplitter.WKB); if (geometry instanceof Point) { @@ -340,7 +443,10 @@ public Geometry eval(@DataTypeHint("String") String wkbString) throws ParseExcep return null; // Return null if geometry is not a Point } - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String wkbString, int srid) throws ParseException { Geometry geometry = getGeometryByFileData(wkbString, FileDataSplitter.WKB); if (geometry instanceof Point) { @@ -350,19 +456,28 @@ public Geometry eval(@DataTypeHint("String") String wkbString, int srid) throws return null; // Return null if geometry is not a Point } - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("Bytes") byte[] wkb) throws ParseException { return org.apache.sedona.common.Constructors.pointFromWKB(wkb); } - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("Bytes") byte[] wkb, int srid) throws ParseException { return org.apache.sedona.common.Constructors.pointFromWKB(wkb, srid); } } public static class ST_LineFromWKB extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String wkbString) throws ParseException { Geometry geometry = getGeometryByFileData(wkbString, FileDataSplitter.WKB); if (geometry instanceof LineString) { @@ -371,7 +486,10 @@ public Geometry eval(@DataTypeHint("String") String wkbString) throws ParseExcep return null; // Return null if geometry is not a Point } - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String wkbString, int srid) throws ParseException { Geometry geometry = getGeometryByFileData(wkbString, FileDataSplitter.WKB); if (geometry instanceof LineString) { @@ -381,19 +499,28 @@ public Geometry eval(@DataTypeHint("String") String wkbString, int srid) throws return null; // Return null if geometry is not a Linestring } - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("Bytes") byte[] wkb) throws ParseException { return org.apache.sedona.common.Constructors.lineFromWKB(wkb); } - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("Bytes") byte[] wkb, int srid) throws ParseException { return org.apache.sedona.common.Constructors.lineFromWKB(wkb, srid); } } public static class ST_LinestringFromWKB extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String wkbString) throws ParseException { Geometry geometry = getGeometryByFileData(wkbString, FileDataSplitter.WKB); if (geometry instanceof LineString) { @@ -402,7 +529,10 @@ public Geometry eval(@DataTypeHint("String") String wkbString) throws ParseExcep return null; // Return null if geometry is not a Linestring } - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String wkbString, int srid) throws ParseException { Geometry geometry = getGeometryByFileData(wkbString, FileDataSplitter.WKB); if (geometry instanceof LineString) { @@ -412,26 +542,38 @@ public Geometry eval(@DataTypeHint("String") String wkbString, int srid) throws return null; // Return null if geometry is not a Linestring } - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("Bytes") byte[] wkb) throws ParseException { return org.apache.sedona.common.Constructors.lineFromWKB(wkb); } - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("Bytes") byte[] wkb, int srid) throws ParseException { return org.apache.sedona.common.Constructors.lineFromWKB(wkb, srid); } } public static class ST_GeomFromGeoJSON extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String geoJson) throws ParseException { return getGeometryByFileData(geoJson, FileDataSplitter.GEOJSON); } } public static class ST_GeomFromGeoHash extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("String") String value, @DataTypeHint("Int") Integer precision) throws ParseException, GeoHashDecoder.InvalidGeoHashException { @@ -439,7 +581,10 @@ public Geometry eval( return GeoHashDecoder.decode(value, precision); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String value) throws ParseException, GeoHashDecoder.InvalidGeoHashException { return eval(value, null); @@ -447,21 +592,30 @@ public Geometry eval(@DataTypeHint("String") String value) } public static class ST_PointFromGeoHash extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint("String") String value, @DataTypeHint("Int") Integer precision) { // The default precision is the geohash length. Otherwise, use the precision given by the user return org.apache.sedona.common.Constructors.pointFromGeoHash(value, precision); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String value) { return eval(value, null); } } public static class ST_GeomFromGML extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String gml) throws ParseException { GMLReader reader = new GMLReader(); try { @@ -473,63 +627,90 @@ public Geometry eval(@DataTypeHint("String") String gml) throws ParseException { } public static class ST_GeomFromKML extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint("String") String kml) throws ParseException { return new KMLReader().read(kml); } } public static class ST_MPolyFromText extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint(value = "String") String wkt, @DataTypeHint("Int") Integer srid) throws ParseException { return org.apache.sedona.common.Constructors.mPolyFromText(wkt, srid); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint(value = "String") String wkt) throws ParseException { return org.apache.sedona.common.Constructors.mPolyFromText(wkt, 0); } } public static class ST_MLineFromText extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint(value = "String") String wkt, @DataTypeHint("Int") Integer srid) throws ParseException { return org.apache.sedona.common.Constructors.mLineFromText(wkt, srid); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint(value = "String") String wkt) throws ParseException { return org.apache.sedona.common.Constructors.mLineFromText(wkt, 0); } } public static class ST_MPointFromText extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint(value = "String") String wkt, @DataTypeHint("Int") Integer srid) throws ParseException { return org.apache.sedona.common.Constructors.mPointFromText(wkt, srid); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint(value = "String") String wkt) throws ParseException { return org.apache.sedona.common.Constructors.mPointFromText(wkt, 0); } } public static class ST_GeomCollFromText extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( @DataTypeHint(value = "String") String wkt, @DataTypeHint("Int") Integer srid) throws ParseException { return org.apache.sedona.common.Constructors.geomCollFromText(wkt, srid); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint(value = "String") String wkt) throws ParseException { return org.apache.sedona.common.Constructors.geomCollFromText(wkt, 0); } diff --git a/flink/src/main/java/org/apache/sedona/flink/expressions/Functions.java b/flink/src/main/java/org/apache/sedona/flink/expressions/Functions.java index 39fb3da564..6be5c0f562 100644 --- a/flink/src/main/java/org/apache/sedona/flink/expressions/Functions.java +++ b/flink/src/main/java/org/apache/sedona/flink/expressions/Functions.java @@ -24,6 +24,8 @@ import org.apache.flink.table.annotation.InputGroup; import org.apache.flink.table.functions.ScalarFunction; import org.apache.sedona.common.FunctionsGeoTools; +import org.apache.sedona.flink.GeometryArrayTypeSerializer; +import org.apache.sedona.flink.GeometryTypeSerializer; import org.geotools.api.referencing.FactoryException; import org.geotools.api.referencing.operation.TransformException; import org.locationtech.jts.geom.Geometry; @@ -33,7 +35,10 @@ public class Functions { public static class GeometryType extends ScalarFunction { @DataTypeHint("String") public String eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.geometryTypeWithMeasured(geom); @@ -41,25 +46,45 @@ public String eval( } public static class ST_LabelPoint extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.labelPoint(geom); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Integer") Integer gridResolution) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.labelPoint(geom, gridResolution); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Integer") Integer gridResolution, @DataTypeHint("Double") Double goodnessThreshold) { Geometry geom = (Geometry) o; @@ -70,7 +95,10 @@ public Geometry eval( public static class ST_Area extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.area(geom); @@ -80,7 +108,10 @@ public Double eval( public static class ST_AreaSpheroid extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.sphere.Spheroid.area(geom); @@ -90,9 +121,15 @@ public Double eval( public static class ST_Azimuth extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -101,17 +138,30 @@ public Double eval( } public static class ST_ApproximateMedialAxis extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.approximateMedialAxis(geom); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Integer") Integer maxVertices) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.approximateMedialAxis(geom, maxVertices); @@ -119,9 +169,15 @@ public Geometry eval( } public static class ST_Boundary extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.boundary(geom); @@ -129,18 +185,32 @@ public Geometry eval( } public static class ST_Buffer extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double radius) throws FactoryException, TransformException { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.buffer(geom, radius); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double radius, @DataTypeHint("Boolean") Boolean useSpheroid) throws FactoryException, TransformException { @@ -148,9 +218,16 @@ public Geometry eval( return org.apache.sedona.common.Functions.buffer(geom, radius, useSpheroid); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double radius, @DataTypeHint("Boolean") Boolean useSpheroid, @DataTypeHint("String") String params) @@ -162,26 +239,48 @@ public Geometry eval( public static class ST_BestSRID extends ScalarFunction { @DataTypeHint("Integer") - public int eval(@DataTypeHint(value = "RAW", bridgedTo = Geometry.class) Object o) { + public int eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.bestSRID(geom); } } public static class ST_ShiftLongitude extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval(@DataTypeHint(value = "RAW", bridgedTo = Geometry.class) Object o) { + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.shiftLongitude(geom); } } public static class ST_ClosestPoint extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object g1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object g2) { Geometry geom1 = (Geometry) g1; Geometry geom2 = (Geometry) g2; @@ -190,9 +289,15 @@ public Geometry eval( } public static class ST_Centroid extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.getCentroid(geom); @@ -200,11 +305,20 @@ public Geometry eval( } public static class ST_Collect extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -212,7 +326,10 @@ public Geometry eval( return org.apache.sedona.common.Functions.createMultiGeometry(geoms); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint(inputGroup = InputGroup.ANY) Object o) { Geometry[] geoms = (Geometry[]) o; return org.apache.sedona.common.Functions.createMultiGeometry(geoms); @@ -220,17 +337,30 @@ public Geometry eval(@DataTypeHint(inputGroup = InputGroup.ANY) Object o) { } public static class ST_CollectionExtract extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.collectionExtract(geom); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Integer") Integer geoType) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.collectionExtract(geom, geoType); @@ -238,17 +368,31 @@ public Geometry eval( } public static class ST_ConcaveHull extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double pctConvex) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.concaveHull(geom, pctConvex, false); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double pctConvex, @DataTypeHint("Boolean") Boolean allowHoles) { Geometry geom = (Geometry) o; @@ -257,9 +401,15 @@ public Geometry eval( } public static class ST_ConvexHull extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.convexHull(geom); @@ -272,7 +422,10 @@ public ST_CrossesDateLine() {} @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.crossesDateLine(geom); @@ -280,9 +433,15 @@ public Boolean eval( } public static class ST_Envelope extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.envelope(geom); @@ -290,9 +449,15 @@ public Geometry eval( } public static class ST_OrientedEnvelope extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = org.locationtech.jts.geom.Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.orientedEnvelope(geom); @@ -300,26 +465,47 @@ public Geometry eval( } public static class ST_Expand extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint(value = "Double") Double uniformDelta) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.expand(geom, uniformDelta); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint(value = "Double") Double deltaX, @DataTypeHint(value = "Double") Double deltaY) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.expand(geom, deltaX, deltaY); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint(value = "Double") Double deltaX, @DataTypeHint(value = "Double") Double deltaY, @DataTypeHint(value = "Double") Double deltaZ) { @@ -331,7 +517,10 @@ public Geometry eval( public static class ST_Dimension extends ScalarFunction { @DataTypeHint("Integer") public Integer eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.dimension(geom); @@ -339,11 +528,20 @@ public Integer eval( } public static class ST_Difference extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -354,9 +552,15 @@ public Geometry eval( public static class ST_Distance extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -367,9 +571,15 @@ public Double eval( public static class ST_DistanceSphere extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -378,9 +588,15 @@ public Double eval( @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2, @DataTypeHint("Double") Double radius) { Geometry geom1 = (Geometry) o1; @@ -392,9 +608,15 @@ public Double eval( public static class ST_DistanceSpheroid extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -405,9 +627,15 @@ public Double eval( public static class ST_3DDistance extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -416,9 +644,15 @@ public Double eval( } public static class ST_Dump extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry[].class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryArrayTypeSerializer.class, + bridgedTo = Geometry[].class) public Geometry[] eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom1 = (Geometry) o; return org.apache.sedona.common.Functions.dump(geom1); @@ -426,9 +660,15 @@ public Geometry[] eval( } public static class ST_DumpPoints extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry[].class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryArrayTypeSerializer.class, + bridgedTo = Geometry[].class) public Geometry[] eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom1 = (Geometry) o; return org.apache.sedona.common.Functions.dumpPoints(geom1); @@ -436,9 +676,15 @@ public Geometry[] eval( } public static class ST_EndPoint extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom1 = (Geometry) o; return org.apache.sedona.common.Functions.endPoint(geom1); @@ -448,7 +694,10 @@ public Geometry eval( public static class ST_GeometryType extends ScalarFunction { @DataTypeHint("String") public String eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.geometryType(geom); @@ -456,11 +705,20 @@ public String eval( } public static class ST_Intersection extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object g1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object g2) { Geometry geom1 = (Geometry) g1; Geometry geom2 = (Geometry) g2; @@ -471,7 +729,10 @@ public Geometry eval( public static class ST_Length extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.length(geom); @@ -481,7 +742,10 @@ public Double eval( public static class ST_Length2D extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.length(geom); @@ -491,7 +755,10 @@ public Double eval( public static class ST_LengthSpheroid extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.sphere.Spheroid.length(geom); @@ -499,9 +766,16 @@ public Double eval( } public static class ST_LineInterpolatePoint extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double fraction) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.lineInterpolatePoint(geom, fraction); @@ -511,8 +785,15 @@ public Geometry eval( public static class ST_LineLocatePoint extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object p) { Geometry geom = (Geometry) o; Geometry point = (Geometry) p; @@ -521,18 +802,32 @@ public Double eval( } public static class ST_LocateAlong extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint(value = "Double") Double measure, @DataTypeHint(value = "Double") Double offset) { Geometry linear = (Geometry) o; return org.apache.sedona.common.Functions.locateAlong(linear, measure, offset); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint(value = "Double") Double measure) { Geometry linear = (Geometry) o; return org.apache.sedona.common.Functions.locateAlong(linear, measure); @@ -540,11 +835,20 @@ public Geometry eval( } public static class ST_LongestLine extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object g1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object g2) { Geometry geom1 = (Geometry) g1; Geometry geom2 = (Geometry) g2; @@ -555,7 +859,10 @@ public Geometry eval( public static class ST_YMin extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.yMin(geom); @@ -565,7 +872,10 @@ public Double eval( public static class ST_YMax extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.yMax(geom); @@ -575,7 +885,10 @@ public Double eval( public static class ST_ZMax extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.zMax(geom); @@ -585,7 +898,10 @@ public Double eval( public static class ST_ZMin extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.zMin(geom); @@ -595,7 +911,10 @@ public Double eval( public static class ST_NDims extends ScalarFunction { @DataTypeHint("Integer") public Integer eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.nDims(geom); @@ -603,9 +922,15 @@ public Integer eval( } public static class ST_FlipCoordinates extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.flipCoordinates(geom); @@ -615,7 +940,10 @@ public Geometry eval( public static class ST_GeoHash extends ScalarFunction { @DataTypeHint("String") public String eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object geometry, Integer precision) { Geometry geom = (Geometry) geometry; @@ -626,7 +954,10 @@ public String eval( public static class ST_Perimeter extends ScalarFunction { @DataTypeHint(value = "Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.perimeter(geom); @@ -634,7 +965,11 @@ public Double eval( @DataTypeHint(value = "Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, Boolean use_spheroid) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.perimeter(geom, use_spheroid); @@ -642,7 +977,11 @@ public Double eval( @DataTypeHint(value = "Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, Boolean use_spheroid, boolean lenient) { Geometry geom = (Geometry) o; @@ -653,7 +992,10 @@ public Double eval( public static class ST_Perimeter2D extends ScalarFunction { @DataTypeHint(value = "Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.perimeter(geom); @@ -661,7 +1003,11 @@ public Double eval( @DataTypeHint(value = "Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, Boolean use_spheroid) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.perimeter(geom, use_spheroid); @@ -669,7 +1015,11 @@ public Double eval( @DataTypeHint(value = "Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, Boolean use_spheroid, boolean lenient) { Geometry geom = (Geometry) o; @@ -678,9 +1028,15 @@ public Double eval( } public static class ST_PointOnSurface extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.pointOnSurface(geom); @@ -688,9 +1044,16 @@ public Geometry eval( } public static class ST_ReducePrecision extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Integer") Integer precisionScale) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.reducePrecision(geom, precisionScale); @@ -698,9 +1061,15 @@ public Geometry eval( } public static class ST_Reverse extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.reverse(geom); @@ -708,9 +1077,16 @@ public Geometry eval( } public static class ST_GeometryN extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, int n) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.geometryN(geom, n); @@ -718,9 +1094,16 @@ public Geometry eval( } public static class ST_InteriorRingN extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, int n) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.interiorRingN(geom, n); @@ -728,9 +1111,16 @@ public Geometry eval( } public static class ST_PointN extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, int n) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.pointN(geom, n); @@ -740,7 +1130,10 @@ public Geometry eval( public static class ST_NPoints extends ScalarFunction { @DataTypeHint("Integer") public Integer eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.nPoints(geom); @@ -750,7 +1143,10 @@ public Integer eval( public static class ST_NumGeometries extends ScalarFunction { @DataTypeHint("Integer") public Integer eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.numGeometries(geom); @@ -760,7 +1156,10 @@ public Integer eval( public static class ST_NumInteriorRings extends ScalarFunction { @DataTypeHint("Integer") public Integer eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.numInteriorRings(geom); @@ -770,7 +1169,10 @@ public Integer eval( public static class ST_NumInteriorRing extends ScalarFunction { @DataTypeHint("Integer") public Integer eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.numInteriorRings(geom); @@ -778,9 +1180,15 @@ public Integer eval( } public static class ST_ExteriorRing extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.exteriorRing(geom); @@ -790,7 +1198,10 @@ public Geometry eval( public static class ST_AsEWKT extends ScalarFunction { @DataTypeHint("String") public String eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.asEWKT(geom); @@ -800,7 +1211,10 @@ public String eval( public static class ST_AsText extends ScalarFunction { @DataTypeHint("String") public String eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.asWKT(geom); @@ -810,7 +1224,10 @@ public String eval( public static class ST_AsEWKB extends ScalarFunction { @DataTypeHint("Bytes") public byte[] eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.asEWKB(geom); @@ -820,7 +1237,11 @@ public byte[] eval( public static class ST_AsHEXEWKB extends ScalarFunction { @DataTypeHint("String") public String eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("String") String endian) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.asHexEWKB(geom, endian); @@ -828,7 +1249,10 @@ public String eval( @DataTypeHint("String") public String eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.asHexEWKB(geom); @@ -838,7 +1262,10 @@ public String eval( public static class ST_AsBinary extends ScalarFunction { @DataTypeHint("Bytes") public byte[] eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.asEWKB(geom); @@ -848,7 +1275,10 @@ public byte[] eval( public static class ST_AsGeoJSON extends ScalarFunction { @DataTypeHint("String") public String eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.asGeoJson(geom); @@ -856,7 +1286,11 @@ public String eval( @DataTypeHint("String") public String eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, String type) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.asGeoJson(geom, type); @@ -866,7 +1300,10 @@ public String eval( public static class ST_AsGML extends ScalarFunction { @DataTypeHint("String") public String eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.asGML(geom); @@ -876,7 +1313,10 @@ public String eval( public static class ST_AsKML extends ScalarFunction { @DataTypeHint("String") public String eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.asKML(geom); @@ -884,9 +1324,15 @@ public String eval( } public static class ST_Force_2D extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.force2D(geom); @@ -894,9 +1340,15 @@ public Geometry eval( } public static class ST_Force2D extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.force2D(geom); @@ -906,7 +1358,10 @@ public Geometry eval( public static class ST_IsEmpty extends ScalarFunction { @DataTypeHint("Boolean") public boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.isEmpty(geom); @@ -916,7 +1371,10 @@ public boolean eval( public static class ST_X extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.x(geom); @@ -926,7 +1384,10 @@ public Double eval( public static class ST_Y extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.y(geom); @@ -936,7 +1397,10 @@ public Double eval( public static class ST_Z extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.z(geom); @@ -946,7 +1410,10 @@ public Double eval( public static class ST_Zmflag extends ScalarFunction { @DataTypeHint("Integer") public Integer eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.zmFlag(geom); @@ -956,7 +1423,10 @@ public Integer eval( public static class ST_XMax extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.xMax(geom); @@ -966,7 +1436,10 @@ public Double eval( public static class ST_XMin extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.xMin(geom); @@ -974,9 +1447,15 @@ public Double eval( } public static class ST_BuildArea extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.buildArea(geom); @@ -984,9 +1463,16 @@ public Geometry eval( } public static class ST_SetSRID extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, int srid) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.setSRID(geom, srid); @@ -996,7 +1482,10 @@ public Geometry eval( public static class ST_SRID extends ScalarFunction { @DataTypeHint("Integer") public Integer eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.getSRID(geom); @@ -1006,7 +1495,10 @@ public Integer eval( public static class ST_IsClosed extends ScalarFunction { @DataTypeHint("Boolean") public boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.isClosed(geom); @@ -1016,7 +1508,10 @@ public boolean eval( public static class ST_IsPolygonCW extends ScalarFunction { @DataTypeHint("Boolean") public boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.isPolygonCW(geom); @@ -1026,7 +1521,10 @@ public boolean eval( public static class ST_IsRing extends ScalarFunction { @DataTypeHint("Boolean") public boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.isRing(geom); @@ -1036,7 +1534,10 @@ public boolean eval( public static class ST_IsSimple extends ScalarFunction { @DataTypeHint("Boolean") public boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.isSimple(geom); @@ -1046,7 +1547,10 @@ public boolean eval( public static class ST_IsValid extends ScalarFunction { @DataTypeHint("Boolean") public boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.isValid(geom); @@ -1054,7 +1558,11 @@ public boolean eval( @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Integer") Integer flag) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.isValid(geom, flag); @@ -1062,9 +1570,15 @@ public Boolean eval( } public static class ST_Normalize extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.normalize(geom); @@ -1072,9 +1586,15 @@ public Geometry eval( } public static class ST_AddMeasure extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, @DataTypeHint(value = "Double") Double measureStart, @DataTypeHint(value = "Double") Double measureEnd) { @@ -1084,22 +1604,40 @@ public Geometry eval( } public static class ST_AddPoint extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry linestring = (Geometry) o1; Geometry point = (Geometry) o2; return org.apache.sedona.common.Functions.addPoint(linestring, point); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2, int position) { Geometry linestring = (Geometry) o1; @@ -1109,17 +1647,30 @@ public Geometry eval( } public static class ST_RemovePoint extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.removePoint(geom); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, int offset) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.removePoint(geom, offset); @@ -1127,17 +1678,30 @@ public Geometry eval( } public static class ST_RemoveRepeatedPoints extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.removeRepeatedPoints(geom); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, double tolerance) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.removeRepeatedPoints(geom, tolerance); @@ -1145,12 +1709,21 @@ public Geometry eval( } public static class ST_SetPoint extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, int position, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry linestring = (Geometry) o1; Geometry point = (Geometry) o2; @@ -1159,9 +1732,15 @@ public Geometry eval( } public static class ST_LineFromMultiPoint extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.lineFromMultiPoint(geom); @@ -1169,17 +1748,30 @@ public Geometry eval( } public static class ST_LineSegments extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry[].class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryArrayTypeSerializer.class, + bridgedTo = Geometry[].class) public Geometry[] eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.lineSegments(geometry); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry[].class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryArrayTypeSerializer.class, + bridgedTo = Geometry[].class) public Geometry[] eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint(value = "Boolean") Boolean lenient) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.lineSegments(geometry, lenient); @@ -1187,9 +1779,15 @@ public Geometry[] eval( } public static class ST_LineMerge extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.lineMerge(geom); @@ -1197,9 +1795,16 @@ public Geometry eval( } public static class ST_LineSubstring extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double startFraction, @DataTypeHint("Double") Double endFraction) { Geometry geom = (Geometry) o; @@ -1210,7 +1815,10 @@ public Geometry eval( public static class ST_HasM extends ScalarFunction { @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.hasM(geom); @@ -1220,7 +1828,10 @@ public Boolean eval( public static class ST_HasZ extends ScalarFunction { @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.hasZ(geom); @@ -1230,7 +1841,10 @@ public Boolean eval( public static class ST_M extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.m(geom); @@ -1240,7 +1854,10 @@ public Double eval( public static class ST_MMin extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.mMin(geom); @@ -1250,7 +1867,10 @@ public Double eval( public static class ST_MMax extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.mMax(geom); @@ -1258,18 +1878,30 @@ public Double eval( } public static class ST_MakeLine extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; return org.apache.sedona.common.Functions.makeLine(geom1, geom2); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint(inputGroup = InputGroup.ANY) Object o) { Geometry[] geoms = (Geometry[]) o; return org.apache.sedona.common.Functions.makeLine(geoms); @@ -1277,9 +1909,15 @@ public Geometry eval(@DataTypeHint(inputGroup = InputGroup.ANY) Object o) { } public static class ST_MakePolygon extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, @DataTypeHint(inputGroup = InputGroup.ANY) Object o2) { Geometry outerLinestring = (Geometry) o1; @@ -1287,9 +1925,15 @@ public Geometry eval( return org.apache.sedona.common.Functions.makePolygon(outerLinestring, interiorLinestrings); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry linestring = (Geometry) o; return org.apache.sedona.common.Functions.makePolygon(linestring, null); @@ -1297,9 +1941,15 @@ public Geometry eval( } public static class ST_Points extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1) { Geometry geom = (Geometry) o1; return org.apache.sedona.common.Functions.points(geom); @@ -1307,9 +1957,15 @@ public Geometry eval( } public static class ST_Polygon extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, @DataTypeHint("Integer") Integer srid) { Geometry linestring = (Geometry) o1; @@ -1318,9 +1974,15 @@ public Geometry eval( } public static class ST_Polygonize extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1) { Geometry geom = (Geometry) o1; return org.apache.sedona.common.Functions.polygonize(geom); @@ -1328,9 +1990,15 @@ public Geometry eval( } public static class ST_Project extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, @DataTypeHint(value = "Double") Double distance, @DataTypeHint(value = "Double") Double azimuth, @@ -1339,9 +2007,15 @@ public Geometry eval( return org.apache.sedona.common.Functions.project(point, distance, azimuth, lenient); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, @DataTypeHint(value = "Double") Double distance, @DataTypeHint(value = "Double") Double azimuth) { @@ -1351,17 +2025,30 @@ public Geometry eval( } public static class ST_MakeValid extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Boolean") Boolean keepCollapsed) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.makeValid(geom, keepCollapsed); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.makeValid(geom, false); @@ -1371,9 +2058,15 @@ public Geometry eval( public static class ST_MaxDistance extends ScalarFunction { @DataTypeHint(value = "Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object g1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object g2) { Geometry geom1 = (Geometry) g1; Geometry geom2 = (Geometry) g2; @@ -1384,7 +2077,10 @@ public Double eval( public static class ST_MinimumClearance extends ScalarFunction { @DataTypeHint(value = "Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.minimumClearance(geometry); @@ -1392,9 +2088,15 @@ public Double eval( } public static class ST_MinimumClearanceLine extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.minimumClearanceLine(geometry); @@ -1402,17 +2104,30 @@ public Geometry eval( } public static class ST_MinimumBoundingCircle extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Integer") Integer quadrantSegments) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.minimumBoundingCircle(geom, quadrantSegments); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.minimumBoundingCircle( @@ -1423,7 +2138,10 @@ public Geometry eval( public static class ST_MinimumBoundingRadius extends ScalarFunction { @DataTypeHint(value = "RAW") public Pair eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.minimumBoundingRadius(geom); @@ -1431,9 +2149,15 @@ public Pair eval( } public static class ST_Multi extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.createMultiGeometryFromOneElement(geom); @@ -1441,9 +2165,15 @@ public Geometry eval( } public static class ST_StartPoint extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.startPoint(geom); @@ -1451,17 +2181,30 @@ public Geometry eval( } public static class ST_StraightSkeleton extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.straightSkeleton(geom); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Integer") Integer maxVertices) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.straightSkeleton(geom, maxVertices); @@ -1469,11 +2212,20 @@ public Geometry eval( } public static class ST_Split extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry input = (Geometry) o1; Geometry blade = (Geometry) o2; @@ -1482,11 +2234,20 @@ public Geometry eval( } public static class ST_Snap extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2, @DataTypeHint("Double") Double tolerance) { Geometry input = (Geometry) o1; @@ -1498,7 +2259,11 @@ public Geometry eval( public static class ST_S2CellIDs extends ScalarFunction { @DataTypeHint(value = "ARRAY") public Long[] eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("INT") Integer level) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.s2CellIDs(geom, level); @@ -1506,7 +2271,10 @@ public Long[] eval( } public static class ST_S2ToGeom extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry[].class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryArrayTypeSerializer.class, + bridgedTo = Geometry[].class) public Geometry[] eval(@DataTypeHint(value = "ARRAY") Long[] cellIds) { return org.apache.sedona.common.Functions.s2ToGeom( Arrays.stream(cellIds).mapToLong(Long::longValue).toArray()); @@ -1516,7 +2284,11 @@ public Geometry[] eval(@DataTypeHint(value = "ARRAY") Long[] cellIds) { public static class ST_H3CellIDs extends ScalarFunction { @DataTypeHint(value = "ARRAY") public Long[] eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("INT") Integer level, @DataTypeHint("Boolean") Boolean fullCover) { Geometry geom = (Geometry) o; @@ -1542,7 +2314,10 @@ public Long[] eval( } public static class ST_H3ToGeom extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry[].class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryArrayTypeSerializer.class, + bridgedTo = Geometry[].class) public Geometry[] eval(@DataTypeHint(value = "ARRAY") Long[] cells) { return org.apache.sedona.common.Functions.h3ToGeom( Arrays.stream(cells).mapToLong(Long::longValue).toArray()); @@ -1550,9 +2325,16 @@ public Geometry[] eval(@DataTypeHint(value = "ARRAY") Long[] cells) { } public static class ST_Simplify extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double distanceTolerance) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.simplify(geom, distanceTolerance); @@ -1560,9 +2342,16 @@ public Geometry eval( } public static class ST_SimplifyPreserveTopology extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double distanceTolerance) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.simplifyPreserveTopology(geom, distanceTolerance); @@ -1570,9 +2359,16 @@ public Geometry eval( } public static class ST_SimplifyVW extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double distanceTolerance) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.simplifyVW(geom, distanceTolerance); @@ -1580,18 +2376,32 @@ public Geometry eval( } public static class ST_SimplifyPolygonHull extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double vertexFactor, @DataTypeHint("Boolean") Boolean isOuter) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.simplifyPolygonHull(geom, vertexFactor, isOuter); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double vertexFactor) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.simplifyPolygonHull(geom, vertexFactor); @@ -1599,9 +2409,16 @@ public Geometry eval( } public static class ST_Subdivide extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry[].class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryArrayTypeSerializer.class, + bridgedTo = Geometry[].class) public Geometry[] eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("INT") Integer maxVertices) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.subDivide(geom, maxVertices); @@ -1609,9 +2426,16 @@ public Geometry[] eval( } public static class ST_Segmentize extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double maxSegmentLength) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.segmentize(geom, maxSegmentLength); @@ -1619,11 +2443,20 @@ public Geometry eval( } public static class ST_SymDifference extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -1632,26 +2465,47 @@ public Geometry eval( } public static class ST_GeometricMedian extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o) throws Exception { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.geometricMedian(geometry); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double tolerance) throws Exception { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.geometricMedian(geometry, tolerance); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double tolerance, int maxIter) throws Exception { @@ -1659,9 +2513,16 @@ public Geometry eval( return org.apache.sedona.common.Functions.geometricMedian(geometry, tolerance, maxIter); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double tolerance, int maxIter, @DataTypeHint("Boolean") Boolean failIfNotConverged) @@ -1675,9 +2536,15 @@ public Geometry eval( public static class ST_FrechetDistance extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object g1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object g2) { Geometry geom1 = (Geometry) g1; Geometry geom2 = (Geometry) g2; @@ -1688,7 +2555,11 @@ public Double eval( public static class ST_NumPoints extends ScalarFunction { @DataTypeHint(value = "Integer") public int eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o) throws Exception { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.numPoints(geometry); @@ -1697,17 +2568,30 @@ public int eval( public static class ST_Force3D extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double zValue) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.force3D(geometry, zValue); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.force3D(geometry); @@ -1716,17 +2600,30 @@ public Geometry eval( public static class ST_Force3DM extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double zValue) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.force3DM(geometry, zValue); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.force3DM(geometry); @@ -1735,17 +2632,30 @@ public Geometry eval( public static class ST_Force3DZ extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double zValue) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.force3D(geometry, zValue); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.force3D(geometry); @@ -1754,18 +2664,31 @@ public Geometry eval( public static class ST_Force4D extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double zValue, @DataTypeHint("Double") Double mValue) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.force4D(geometry, zValue, mValue); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.force4D(geometry); @@ -1773,9 +2696,15 @@ public Geometry eval( } public static class ST_ForceCollection extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.forceCollection(geometry); @@ -1783,9 +2712,15 @@ public Geometry eval( } public static class ST_ForcePolygonCW extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.forcePolygonCW(geometry); @@ -1793,9 +2728,15 @@ public Geometry eval( } public static class ST_ForceRHR extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.forcePolygonCW(geometry); @@ -1803,17 +2744,31 @@ public Geometry eval( } public static class ST_GeneratePoints extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint(value = "Integer") Integer numPoints) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.generatePoints(geom, numPoints); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint(value = "Integer") Integer numPoints, @DataTypeHint(value = "BIGINT") Long seed) { Geometry geom = (Geometry) o; @@ -1824,7 +2779,11 @@ public Geometry eval( public static class ST_NRings extends ScalarFunction { @DataTypeHint(value = "Integer") public int eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o) throws Exception { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.nRings(geom); @@ -1832,9 +2791,15 @@ public int eval( } public static class ST_ForcePolygonCCW extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.forcePolygonCCW(geometry); @@ -1844,7 +2809,10 @@ public Geometry eval( public static class ST_IsPolygonCCW extends ScalarFunction { @DataTypeHint("Boolean") public boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.isPolygonCCW(geom); @@ -1852,18 +2820,32 @@ public boolean eval( } public static class ST_Translate extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double deltaX, @DataTypeHint("Double") Double deltaY) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.translate(geometry, deltaX, deltaY); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double deltaX, @DataTypeHint("Double") Double deltaY, @DataTypeHint("Double") Double deltaZ) { @@ -1873,9 +2855,15 @@ public Geometry eval( } public static class ST_TriangulatePolygon extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.triangulatePolygon(geometry); @@ -1883,9 +2871,15 @@ public Geometry eval( } public static class ST_UnaryUnion extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.unaryUnion(geometry); @@ -1893,18 +2887,30 @@ public Geometry eval( } public static class ST_Union extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry a = (Geometry) o1; Geometry b = (Geometry) o2; return org.apache.sedona.common.Functions.union(a, b); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval(@DataTypeHint(inputGroup = InputGroup.ANY) Object o) { Geometry[] geoms = (Geometry[]) o; return org.apache.sedona.common.Functions.union(geoms); @@ -1912,28 +2918,51 @@ public Geometry eval(@DataTypeHint(inputGroup = InputGroup.ANY) Object o) { } public static class ST_VoronoiPolygons extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double tolerance, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object extend) { Geometry geom = (Geometry) o; Geometry extendTo = (Geometry) extend; return FunctionsGeoTools.voronoiPolygons(geom, tolerance, extendTo); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double tolerance) { Geometry geom = (Geometry) o; return FunctionsGeoTools.voronoiPolygons(geom, tolerance, null); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return FunctionsGeoTools.voronoiPolygons(geom, 0, null); @@ -1941,9 +2970,16 @@ public Geometry eval( } public static class ST_Affine extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double a, @DataTypeHint("Double") Double b, @DataTypeHint("Double") Double c, @@ -1961,9 +2997,16 @@ public Geometry eval( geometry, a, b, c, d, e, f, g, h, i, xOff, yOff, zOff); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Double") Double a, @DataTypeHint("Double") Double b, @DataTypeHint("Double") Double d, @@ -1976,9 +3019,15 @@ public Geometry eval( } public static class ST_BoundingDiagonal extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.boundingDiagonal(geometry); @@ -1988,9 +3037,15 @@ public Geometry eval( public static class ST_HausdorffDistance extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object g1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object g2, @DataTypeHint("Double") Double densityFrac) throws Exception { @@ -2001,9 +3056,15 @@ public Double eval( @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object g1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object g2) throws Exception { Geometry geom1 = (Geometry) g1; @@ -2015,7 +3076,10 @@ public Double eval( public static class ST_CoordDim extends ScalarFunction { @DataTypeHint("Integer") public Integer eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.nDims(geom); @@ -2025,7 +3089,10 @@ public Integer eval( public static class ST_IsCollection extends ScalarFunction { @DataTypeHint("Boolean") public boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.isCollection(geom); @@ -2036,13 +3103,25 @@ public static class ST_Angle extends ScalarFunction { @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object p1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object p2, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object p3, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object p4) { Geometry point1 = (Geometry) p1; Geometry point2 = (Geometry) p2; @@ -2054,11 +3133,20 @@ public Double eval( @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object p1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object p2, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object p3) { Geometry point1 = (Geometry) p1; Geometry point2 = (Geometry) p2; @@ -2069,9 +3157,15 @@ public Double eval( @DataTypeHint("Double") public Double eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object line1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object line2) { Geometry lineString1 = (Geometry) line1; Geometry lineString2 = (Geometry) line2; @@ -2088,26 +3182,46 @@ public Double eval(@DataTypeHint("Double") Double angleInRadian) { } public static class ST_DelaunayTriangles extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint(value = "Double") Double tolerance, @DataTypeHint(value = "Integer") Integer flag) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.delaunayTriangle(geometry, tolerance, flag); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint(value = "Double") Double tolerance) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.delaunayTriangle(geometry, tolerance); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.delaunayTriangle(geometry); @@ -2117,7 +3231,10 @@ public Geometry eval( public static class ST_IsValidTrajectory extends ScalarFunction { @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geometry = (Geometry) o; return org.apache.sedona.common.Functions.isValidTrajectory(geometry); @@ -2127,7 +3244,10 @@ public Boolean eval( public static class ST_IsValidReason extends ScalarFunction { @DataTypeHint("String") public String eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.isValidReason(geom); @@ -2135,7 +3255,11 @@ public String eval( @DataTypeHint("String") public String eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("Integer") Integer flag) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.isValidReason(geom, flag); @@ -2143,9 +3267,16 @@ public String eval( } public static class ST_Scale extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint(value = "Double") Double scaleX, @DataTypeHint(value = "Double") Double scaleY) { Geometry geometry = (Geometry) o; @@ -2154,13 +3285,25 @@ public Geometry eval( } public static class ST_ScaleGeom extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o3) { Geometry geometry = (Geometry) o1; Geometry factor = (Geometry) o2; @@ -2168,11 +3311,20 @@ public Geometry eval( return org.apache.sedona.common.Functions.scaleGeom(geometry, factor, origin); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geometry = (Geometry) o1; Geometry factor = (Geometry) o2; @@ -2181,9 +3333,16 @@ public Geometry eval( } public static class ST_RotateX extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint(value = "Double") Double angle) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.rotateX(geom, angle); @@ -2191,9 +3350,16 @@ public Geometry eval( } public static class ST_RotateY extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint(value = "Double") Double angle) { Geometry geom = (Geometry) o; return org.apache.sedona.common.Functions.rotateY(geom, angle); @@ -2201,30 +3367,51 @@ public Geometry eval( } public static class ST_Rotate extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) - public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + public Geometry eval( + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, @DataTypeHint(value = "Double") Double angle) { Geometry geom1 = (Geometry) o1; return org.apache.sedona.common.Functions.rotate(geom1, angle); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, @DataTypeHint(value = "Double") Double angle, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; return org.apache.sedona.common.Functions.rotate(geom1, angle, geom2); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, @DataTypeHint(value = "Double") Double angle, @DataTypeHint(value = "Double") Double originX, @@ -2237,8 +3424,16 @@ public Geometry eval( public static class ST_InterpolatePoint extends ScalarFunction { @DataTypeHint("Double") public double eval( - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) Object o2) { + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o1, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; return org.apache.sedona.common.Functions.interpolatePoint(geom1, geom2); diff --git a/flink/src/main/java/org/apache/sedona/flink/expressions/FunctionsGeoTools.java b/flink/src/main/java/org/apache/sedona/flink/expressions/FunctionsGeoTools.java index 1085bc6656..920624cae3 100644 --- a/flink/src/main/java/org/apache/sedona/flink/expressions/FunctionsGeoTools.java +++ b/flink/src/main/java/org/apache/sedona/flink/expressions/FunctionsGeoTools.java @@ -20,24 +20,39 @@ import org.apache.flink.table.annotation.DataTypeHint; import org.apache.flink.table.functions.ScalarFunction; +import org.apache.sedona.flink.GeometryTypeSerializer; import org.geotools.api.referencing.FactoryException; import org.geotools.api.referencing.operation.TransformException; import org.locationtech.jts.geom.Geometry; public class FunctionsGeoTools { public static class ST_Transform extends ScalarFunction { - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("String") String targetCRS) throws FactoryException, TransformException { Geometry geom = (Geometry) o; return org.apache.sedona.common.FunctionsGeoTools.transform(geom, targetCRS); } - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("String") String sourceCRS, @DataTypeHint("String") String targetCRS) throws FactoryException, TransformException { @@ -45,9 +60,16 @@ public Geometry eval( return org.apache.sedona.common.FunctionsGeoTools.transform(geom, sourceCRS, targetCRS); } - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) public Geometry eval( - @DataTypeHint(value = "RAW", bridgedTo = Geometry.class) Object o, + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) + Object o, @DataTypeHint("String") String sourceCRS, @DataTypeHint("String") String targetCRS, @DataTypeHint("Boolean") Boolean lenient) diff --git a/flink/src/main/java/org/apache/sedona/flink/expressions/Predicates.java b/flink/src/main/java/org/apache/sedona/flink/expressions/Predicates.java index 069b49b79f..289565c99b 100644 --- a/flink/src/main/java/org/apache/sedona/flink/expressions/Predicates.java +++ b/flink/src/main/java/org/apache/sedona/flink/expressions/Predicates.java @@ -20,6 +20,7 @@ import org.apache.flink.table.annotation.DataTypeHint; import org.apache.flink.table.functions.ScalarFunction; +import org.apache.sedona.flink.GeometryTypeSerializer; import org.locationtech.jts.geom.Geometry; public class Predicates { @@ -30,9 +31,15 @@ public ST_Intersects() {} @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -47,9 +54,15 @@ public ST_Contains() {} @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -63,9 +76,15 @@ public ST_Within() {} @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -80,9 +99,15 @@ public ST_Covers() {} @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -97,9 +122,15 @@ public ST_CoveredBy() {} @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -113,9 +144,15 @@ public ST_Crosses() {} @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -130,9 +167,15 @@ public ST_Disjoint() {} @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -147,9 +190,15 @@ public ST_Equals() {} @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -164,9 +213,15 @@ public ST_OrderingEquals() {} @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -181,9 +236,15 @@ public ST_Overlaps() {} @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -197,9 +258,15 @@ public ST_Relate() {} @DataTypeHint("String") public String eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -208,9 +275,15 @@ public String eval( @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2, @DataTypeHint("String") String IM) { Geometry geom1 = (Geometry) o1; @@ -237,9 +310,15 @@ public ST_Touches() {} @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2) { Geometry geom1 = (Geometry) o1; Geometry geom2 = (Geometry) o2; @@ -253,9 +332,15 @@ public ST_DWithin() {} @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2, @DataTypeHint("Double") Double distance) { Geometry geom1 = (Geometry) o1; @@ -265,9 +350,15 @@ public Boolean eval( @DataTypeHint("Boolean") public Boolean eval( - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o1, - @DataTypeHint(value = "RAW", bridgedTo = org.locationtech.jts.geom.Geometry.class) + @DataTypeHint( + value = "RAW", + rawSerializer = GeometryTypeSerializer.class, + bridgedTo = Geometry.class) Object o2, @DataTypeHint("Double") Double distance, @DataTypeHint("Boolean") Boolean useSphere) { diff --git a/flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.Factory b/flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.Factory new file mode 100644 index 0000000000..ab4d717fb5 --- /dev/null +++ b/flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.Factory @@ -0,0 +1 @@ +org.apache.sedona.flink.SedonaModuleFactory diff --git a/flink/src/test/java/org/apache/sedona/flink/ModuleTest.java b/flink/src/test/java/org/apache/sedona/flink/ModuleTest.java new file mode 100644 index 0000000000..5f5716eaed --- /dev/null +++ b/flink/src/test/java/org/apache/sedona/flink/ModuleTest.java @@ -0,0 +1,188 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sedona.flink; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import org.apache.flink.configuration.Configuration; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.table.api.EnvironmentSettings; +import org.apache.flink.table.api.Table; +import org.apache.flink.table.api.TableResult; +import org.apache.flink.table.api.bridge.java.StreamTableEnvironment; +import org.apache.flink.types.Row; +import org.apache.flink.util.CloseableIterator; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +public class ModuleTest extends TestBase { + + @BeforeClass + public static void onceExecutedBeforeAll() { + initialize(); + tableEnv.executeSql("LOAD MODULE sedona"); + } + + @AfterClass + public static void onceExecutedAfterAll() { + tableEnv.executeSql("UNLOAD MODULE sedona"); + } + + @Test + public void testSedonaModuleIsListed() throws Exception { + TableResult result = tableEnv.executeSql("SHOW MODULES"); + + List loadedModules = new ArrayList<>(); + try (CloseableIterator it = result.collect()) { + while (it.hasNext()) { + Row row = it.next(); + if (row.getField(0) != null) { + loadedModules.add(row.getField(0).toString().trim()); + } + } + } + + boolean isSedonaLoaded = + loadedModules.stream().anyMatch(moduleName -> moduleName.equalsIgnoreCase("sedona")); + + assertTrue("Module 'sedona' should be listed in SHOW MODULES", isSedonaLoaded); + + TableResult fullResult = tableEnv.executeSql("SHOW FULL MODULES"); + boolean foundAndUsed = false; + try (CloseableIterator it = fullResult.collect()) { + while (it.hasNext()) { + Row row = it.next(); + String moduleName = row.getField(0).toString().trim(); + boolean isUsed = (Boolean) row.getField(1); + if (moduleName.equalsIgnoreCase("sedona") && isUsed) { + foundAndUsed = true; + break; + } + } + } + + assertTrue("Module 'sedona' should be listed as 'used' in SHOW FULL MODULES", foundAndUsed); + } + + @Test + public void testRegularFunctionsAreLoaded() throws Exception { + Set loadedFunctions = getLoadedFunctions(); + + for (org.apache.flink.table.functions.UserDefinedFunction func : + org.apache.sedona.flink.Catalog.getFuncs()) { + String funcName = func.getClass().getSimpleName().toLowerCase(); + assertTrue("Function " + funcName + " should be loaded", loadedFunctions.contains(funcName)); + } + } + + @Test + public void testPredicateFunctionsAreLoaded() throws Exception { + Set loadedFunctions = getLoadedFunctions(); + + for (org.apache.flink.table.functions.UserDefinedFunction func : + org.apache.sedona.flink.Catalog.getPredicates()) { + String funcName = func.getClass().getSimpleName().toLowerCase(); + assertTrue("Predicate " + funcName + " should be loaded", loadedFunctions.contains(funcName)); + } + } + + @Test + public void testAggregateFunction() throws Exception { + Table pointTable = createPointTable(testDataSize); + tableEnv.createTemporaryView(pointTableName, pointTable); + + Table result = + tableEnv.sqlQuery( + "SELECT ST_AsText(ST_Envelope_Aggr(" + pointColNames[0] + ")) FROM " + pointTableName); + Row row = last(result); + String wkt = (String) row.getField(0); + + String expectedWkt = + String.format( + "POLYGON ((0 0, 0 %s, %s %s, %s 0, 0 0))", + testDataSize - 1, testDataSize - 1, testDataSize - 1, testDataSize - 1); + assertEquals(expectedWkt, wkt); + + tableEnv.dropTemporaryView(pointTableName); + } + + @Test + public void testConstructor() throws Exception { + Table table = tableEnv.sqlQuery("SELECT ST_AsText(ST_Point(1.0, 2.0))"); + Row row = first(table); + String wkt = (String) row.getField(0); + assertEquals("POINT (1 2)", wkt); + } + + @Test + public void testMeasurementFunction() throws Exception { + Table table = + tableEnv.sqlQuery("SELECT ST_Area(ST_GeomFromText('POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))'))"); + Row row = first(table); + Double area = (Double) row.getField(0); + assertEquals(4.0, area, 0.0001); + } + + @Test + public void testPredicateFunction() throws Exception { + Table table = + tableEnv.sqlQuery( + "SELECT ST_Intersects(" + + "ST_GeomFromText('POINT(1 1)'), " + + "ST_GeomFromText('POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))')" + + ")"); + Row row = first(table); + Boolean intersects = (Boolean) row.getField(0); + assertTrue("Point should intersect the polygon", intersects); + } + + private Set getLoadedFunctions() throws Exception { + TableResult result = tableEnv.executeSql("SHOW FUNCTIONS"); + Set loadedFunctions = new HashSet<>(); + + try (CloseableIterator it = result.collect()) { + while (it.hasNext()) { + Row row = it.next(); + if (row.getField(0) != null) { + loadedFunctions.add(row.getField(0).toString().trim().toLowerCase()); + } + } + } + return loadedFunctions; + } + + static void initialize() { + initialize(false); + } + + static void initialize(boolean enableWebUI) { + env = + enableWebUI + ? StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(new Configuration()) + : StreamExecutionEnvironment.getExecutionEnvironment(); + EnvironmentSettings settings = EnvironmentSettings.newInstance().inStreamingMode().build(); + tableEnv = StreamTableEnvironment.create(env, settings); + } +}