### Elasticsearch Version

8.9.0

### Installed Plugins

_No response_

### Java Version

_bundled_

### OS Version

all

### Problem Description

In https://github.com/elastic/elasticsearch/pull/96953 we added support for a much more memory efficient algorithm that relies on the time-ordering and grouping provided by the time-series aggregation in TSDB. However, this work only covered the data nodes, and the reduce phase in the coordinating nodes that merges geo_lines does not take this into account, leading to unexpected truncation of long geo_lines.

### Steps to Reproduce

Easiest to reproduce by setting the shard size small, loading very long geolines that will be composed of many data points over many shards, and then setting the geo_line aggregation size to a small size. The final lines will not include the two end points as they should, but be truncated.

### Logs (if relevant)

_No response_
x-pack/plugin/spatial/src/main/java/org/elasticsearch/xpack/spatial/search/aggregations/TimeSeriesGeoLineBuckets.java
/**
     * The time-series geo_line aggregation does not need to know of the sort order, because it relies entirely upon
     * the TSDB time-order (descending), and re-ordering to ascending (if required) is only needed at InternalGeoLine creation time.
     * @param bucketSize The maximum geo_line length to create, passed into the StreamingGeometrySimplifier
     * @param valuesSources For reading the geo_point and timestamp fields from each document
     * @param geoLineBuilder A function to create the InternalGeoLine with appropriate metadata (and sort order)
     * @param circuitBreaker A function to request memory for each geo_line created
     */
    TimeSeriesGeoLineBuckets(
        int bucketSize,
        GeoLineMultiValuesSource valuesSources,
        Supplier<InternalGeoLine> geoLineBuilder,
        Function<Long, Long> circuitBreaker
    ) {
        this.valuesSources = valuesSources;
        this.bucketSize = bucketSize;
        this.geoLineBuilder = geoLineBuilder;
        this.currentBucket = NO_BUCKET;
        this.simplifier = new TimeSeriesGeoLineBuckets.Simplifier(bucketSize, circuitBreaker);
    }
    /**
     * Produce the leaf collector for collecting the timestamp (sort field) and geo_point for each document.
     * Each lucene segment will have its own leaf collector, but it is still possible to have multiple buckets per-leaf.
     */
    Leaf forLeaf(AggregationExecutionContext aggCtx) throws IOException {
        return new Leaf(aggCtx.getLeafReaderContext());
    }
    void doPostCollection() {
        
        flushBucket(NO_BUCKET);