class GeoFunctions {

    @SqlNullable
    @Description("Returns an array of Points interpolated along a LineString.")
    @ScalarFunction("line_interpolate_points")
    @SqlType("array(" + GEOMETRY_TYPE_NAME + ")")
    public static Block lineInterpolatePoints(
            @SqlType(GEOMETRY_TYPE_NAME) Slice input,
            @SqlType(StandardTypes.DOUBLE) double fractionStep)
    {
        OGCGeometry geometry = deserialize(input);
        if (geometry.isEmpty()) {
            return null;
        }

        List<Point> interpolatedPoints = interpolatePoints(geometry, fractionStep, true);
        BlockBuilder blockBuilder = GEOMETRY.createBlockBuilder(null, interpolatedPoints.size());
        for (Point point : interpolatedPoints) {
            GEOMETRY.writeSlice(blockBuilder, serialize(createFromEsriGeometry(point, null)));
        }
        return blockBuilder.build();
    }

    private  GeoFunctions();

}