public MeshTile[] subdivide(Level nextLevel) {
      Angle p0 = this.getSector().getMinLatitude();
      Angle p2 = this.getSector().getMaxLatitude();
      Angle p1 = Angle.midAngle(p0, p2);

      Angle t0 = this.getSector().getMinLongitude();
      Angle t2 = this.getSector().getMaxLongitude();
      Angle t1 = Angle.midAngle(t0, t2);

      int row = this.getRow();
      int col = this.getColumn();

      MeshCoords[] coords = this.coords.subdivide();

      MeshTile[] subTiles = new MeshTile[4];
      subTiles[0] =
          new MeshTile(
              new Sector(p0, p1, t0, t1),
              nextLevel,
              2 * row,
              2 * col,
              coords[0]); // Lower left quadrant.
      subTiles[1] =
          new MeshTile(
              new Sector(p0, p1, t1, t2),
              nextLevel,
              2 * row,
              2 * col + 1,
              coords[1]); // Lower right quadrant.
      subTiles[2] =
          new MeshTile(
              new Sector(p1, p2, t1, t2),
              nextLevel,
              2 * row + 1,
              2 * col + 1,
              coords[2]); // Upper right quadrant
      subTiles[3] =
          new MeshTile(
              new Sector(p1, p2, t0, t1),
              nextLevel,
              2 * row + 1,
              2 * col,
              coords[3]); // Upper left quadrant.
      return subTiles;
    }