presto-main/src/main/java/io/prestosql/operator/SpatialIndexBuilderOperator.java/SpatialIndexBuilderOperator/SpatialIndexBuilderOperatorFactory
class SpatialIndexBuilderOperator:        public SpatialIndexBuilderOperatorFactory(
                int operatorId,
                PlanNodeId planNodeId,
                List<Type> types,
                List<Integer> outputChannels,
                int indexChannel,
                Optional<Integer> radiusChannel,
                Optional<Integer> partitionChannel,
                SpatialPredicate spatialRelationshipTest,
                Optional<String> kdbTreeJson,
                Optional<JoinFilterFunctionFactory> filterFunctionFactory,
                int expectedPositions,
                PagesIndex.Factory pagesIndexFactory)
        {
            this.operatorId = operatorId;
            this.planNodeId = requireNonNull(planNodeId, "planNodeId is null");
            this.outputChannels = ImmutableList.copyOf(requireNonNull(outputChannels, "outputChannels is null"));

            List<Type> outputTypes = outputChannels.stream()
                    .map(types::get)
                    .collect(toImmutableList());
            pagesSpatialIndexFactory = new PagesSpatialIndexFactory(types, outputTypes);

            this.indexChannel = indexChannel;
            this.radiusChannel = radiusChannel;
            this.partitionChannel = requireNonNull(partitionChannel, "partitionChannel is null");
            this.spatialRelationshipTest = spatialRelationshipTest;
            this.filterFunctionFactory = requireNonNull(filterFunctionFactory, "filterFunctionFactory is null");
            this.pagesIndexFactory = pagesIndexFactory;
            this.expectedPositions = expectedPositions;
            kdbTreeJson.ifPresent(json -> this.spatialPartitions.putAll(KdbTreeUtils.fromJson(json).getLeaves()));
        }