Como respuesta al comentario de @Richard Law, el nombre de la tabla de árbol virtual que contiene el índice espacial en GeoPackage siempre se nombra de acuerdo con la plantilla
rtree_[table_name]_[geometry_column_name]
Por lo tanto, puede realizar una consulta SQL que verifique la existencia de la tabla rtree.
Por ejemplo, puede verificar si la tabla "tabla1" tiene un índice espacial con ogrinfo
ogrinfo -sql "SELECT EXISTS(SELECT 1 FROM sqlite_master WHERE tbl_name like 'rtree_table1_%') as has_spatial_index" mygeopackage.gpkg
INFO: Open of `mygeopackage.gpkg'
using driver `GPKG' successful.
Layer name: SELECT
Geometry: None
Feature Count: 1
Layer SRS WKT:
(unknown)
has_spatial_index: Integer (0.0)
OGRFeature(SELECT):0
has_spatial_index (Integer) = 1
En este caso el indes espacial existe. De lo contrario, habría sido "0".
En GeoPackage, una tabla solo puede tener un campo de geometría y, por lo tanto, es suficiente hacer una verificación simplemente con "rtree" y el nombre de la tabla sin conocer el nombre del campo de geometría rtree_table1_%
.