Efficient algorithm to aggregate a heightmap to a lower resolution

I have a raw height map which consists of cells of the following structure:

type Cell =    
{ Coordinate: GeoCoordinate //contains Latitude and Longitude of the coordinate
  Elevation: int16
}

I generate this height map from real world data.

Now I want to aggregate the height map to a lower resolution, say from a cell grid length of 300 meters to 10 kilometers. That is, creating an average of the elevations. Of course, I can apply a brute force algorithm to do so, e.g. beginning from the center cell grid and aggregate it to a “bigger cell grid”, memorizing which grids have been considered, and so forth. But maybe this is not the best way of doing that. Are there more efficient ways (algorithms) for aggregating such a height map?