Obtained from:	https://github.com/OSGeo/gdal/commit/053d064c6aebeaff7b0bd8505c2818ffffc4d078

--- frmts/kea/keadataset.cpp.orig	2026-06-05 10:32:13 UTC
+++ frmts/kea/keadataset.cpp
@@ -14,6 +14,7 @@
 #include "keaband.h"
 #include "keacopy.h"
 #include "keadrivercore.h"
+#include <hdf5.h>
 #include "../frmts/hdf5/hdf5vfl.h"
 #include "cpl_vsi_virtual.h"
 
@@ -120,9 +121,10 @@ GDALDataset *KEADataset::Open(GDALOpenInfo *poOpenInfo
         try
         {
             // try and open it in the appropriate mode
-            H5::H5File *pH5File;
+            HDF5Ptr pH5File;
             if (poOpenInfo->eAccess == GA_ReadOnly)
             {
+#if LIBKEA_VERSION_MAJOR < 2
                 // use the virtual driver so we can open files using
                 // /vsicurl etc
                 // do this same as libkea
@@ -141,6 +143,16 @@ GDALDataset *KEADataset::Open(GDALOpenInfo *poOpenInfo
                 pH5File = new H5::H5File(keaImgFilePath, H5F_ACC_RDONLY,
                                          H5::FileCreatPropList::DEFAULT,
                                          keaAccessPlist);
+#else
+                // use the virtual driver so we can open files using
+                // /vsicurl etc
+                pH5File = kealib::KEAImageIO::openKeaH5RDOnly(
+                    poOpenInfo->pszFilename, kealib::KEA_MDC_NELMTS,
+                    kealib::KEA_RDCC_NELMTS, kealib::KEA_RDCC_NBYTES,
+                    kealib::KEA_RDCC_W0, kealib::KEA_SIEVE_BUF,
+                    kealib::KEA_META_BLOCKSIZE, HDF5VFLGetFileDriver(),
+                    nullptr);
+#endif
             }
             else
             {
@@ -181,9 +193,9 @@ GDALDataset *KEADataset::Open(GDALOpenInfo *poOpenInfo
 }
 
 // static function
-H5::H5File *KEADataset::CreateLL(const char *pszFilename, int nXSize,
-                                 int nYSize, int nBandsIn, GDALDataType eType,
-                                 CSLConstList papszParamList)
+HDF5Ptr KEADataset::CreateLL(const char *pszFilename, int nXSize, int nYSize,
+                             int nBandsIn, GDALDataType eType,
+                             CSLConstList papszParamList)
 {
     GDALDriverH hDriver = GDALGetDriverByName("KEA");
     if ((hDriver == nullptr) ||
@@ -269,7 +281,7 @@ H5::H5File *KEADataset::CreateLL(const char *pszFilena
     try
     {
         // now create it
-        H5::H5File *keaImgH5File = kealib::KEAImageIO::createKEAImage(
+        HDF5Ptr keaImgH5File = kealib::KEAImageIO::createKEAImage(
             pszFilename, keaDataType, nXSize, nYSize, nBandsIn, nullptr,
             nullptr, nimageblockSize, nattblockSize, nmdcElmts, nrdccNElmts,
             nrdccNBytes, nrdccW0, nsieveBuf, nmetaBlockSize, ndeflate);
@@ -296,7 +308,7 @@ GDALDataset *KEADataset::Create(const char *pszFilenam
                                 int nBandsIn, GDALDataType eType,
                                 CSLConstList papszParamList)
 {
-    H5::H5File *keaImgH5File =
+    HDF5Ptr keaImgH5File =
         CreateLL(pszFilename, nXSize, nYSize, nBandsIn, eType, papszParamList);
     if (keaImgH5File == nullptr)
         return nullptr;
@@ -346,7 +358,7 @@ GDALDataset *KEADataset::CreateCopy(const char *pszFil
     GDALDataType eType = (nBands == 0)
                              ? GDT_Unknown
                              : pSrcDs->GetRasterBand(1)->GetRasterDataType();
-    H5::H5File *keaImgH5File =
+    HDF5Ptr keaImgH5File =
         CreateLL(pszFilename, nXSize, nYSize, nBands, eType, papszParamList);
     if (keaImgH5File == nullptr)
         return nullptr;
@@ -436,7 +448,7 @@ GDALDataset *KEADataset::CreateCopy(const char *pszFil
 }
 
 // constructor
-KEADataset::KEADataset(H5::H5File *keaImgH5File, GDALAccess eAccessIn)
+KEADataset::KEADataset(HDF5Ptr keaImgH5File, GDALAccess eAccessIn)
 {
     this->m_hMutex = CPLCreateMutex();
     CPLReleaseMutex(this->m_hMutex);
--- frmts/kea/keadataset.h.orig	2026-06-05 10:32:13 UTC
+++ frmts/kea/keadataset.h
@@ -16,19 +16,26 @@
 #include "gdal_priv.h"
 #include "cpl_multiproc.h"
 #include "libkea_headers.h"
+#include "libkea/kea-config.h"
 
 class LockedRefCount;
 
+#if LIBKEA_VERSION_MAJOR < 2
+typedef H5::H5File *HDF5Ptr;
+#else
+typedef HighFive::File *HDF5Ptr;
+#endif
+
 // class that implements a GDAL dataset
 class KEADataset final : public GDALDataset
 {
-    static H5::H5File *CreateLL(const char *pszFilename, int nXSize, int nYSize,
-                                int nBands, GDALDataType eType,
-                                CSLConstList papszParamList);
+    static HDF5Ptr CreateLL(const char *pszFilename, int nXSize, int nYSize,
+                            int nBands, GDALDataType eType,
+                            CSLConstList papszParamList);
 
   public:
     // constructor/destructor
-    KEADataset(H5::H5File *keaImgH5File, GDALAccess eAccess);
+    KEADataset(HDF5Ptr keaImgH5File, GDALAccess eAccess);
     ~KEADataset() override;
 
     // static methods that handle open and creation
