À quoi sert cette page ? Elle donne les requêtes SQL qui reproduisent les calculs clés directement sur le géopackage, un fichier SQLite étendu à la géométrie. Chaque bloc peut être rejoué tel quel : comptage des assemblées, population par écorégion, densité de drainage, nappes à cheval, recouvrement avec les hydro-écorégions.
Le fichier ecoregions-2027.gpkg est un GeoPackage, c'est-à-dire un SQLite étendu à la géométrie. Toutes les requêtes ci-dessous s'exécutent directement avec spatialite, ogr2ogr, QGIS ou tout client SQLite standard ; les géométries sont stockées en WKB dans la colonne geom. Ce qui suit reproduit les calculs clés, du comptage des unités jusqu'aux diagnostics de cogestion.
Le GeoPackage se documente lui-même. La table catalogue_couches liste chaque couche avec ses métadonnées, ce qui permet de vérifier producteurs, millésimes et licences sans quitter la base.
-- Lister toutes les couches avec leurs métadonnées
SELECT theme, couche, producteur, millesime, licence, n_entites, description
FROM catalogue_couches
ORDER BY theme, couche;
-- Compter les couches par thème
SELECT theme, COUNT(*) AS n_couches
FROM catalogue_couches
GROUP BY theme
ORDER BY theme;
La brique élémentaire des assemblées est le sous-secteur hydrographique BD Carthage, 1 140 entités couvrant l'Hexagone et la Corse. Une assemblée résulte de la dissolution des sous-secteurs partageant la même écorégion et le même secteur hydrographique parent. Le résultat compte 189 assemblées : 187 unités ordinaires, un secteur entièrement contenu dans une écorégion, plus deux entités à cheval produites par la fragmentation de secteurs limites (Z5, îles de la Méditerranée occidentale, et Y6, Var-Argens), dont les sous-secteurs relèvent de deux écorégions.
-- Assemblée = dissolution des sous-secteurs par (CdSecteurH, eco)
SELECT
s.CdSecteurH AS secteur,
e.eco AS ecoregion,
s.CdSecteurH || '_' || e.eco AS id_assemblee,
COUNT(*) AS n_sous_secteurs,
ST_Union(s.geom) AS geom -- dissolution géométrique
FROM sous_secteurs s
JOIN (
-- affecter chaque sous-secteur à son écorégion par point représentatif
SELECT ss.fid AS ss_fid, ef.eco
FROM sous_secteurs ss
JOIN ecoregions_fin ef
ON ST_Within(ST_PointOnSurface(ss.geom), ef.geom)
) e ON e.ss_fid = s.fid
GROUP BY s.CdSecteurH, e.eco;
-- Requiert l'extension SpatiaLite pour ST_Union et ST_Within
La population de chaque écorégion s'obtient par agrégation des communes ADMIN EXPRESS et se trouve stockée dans la couche ecoregions_fin. La dispersion mesure l'écart entre l'unité la plus peuplée et la moins peuplée.
-- Classement des écorégions par population
SELECT eco AS ecoregion, pop AS population,
km2 AS surface_km2, dens AS densite_hab_km2
FROM ecoregions_fin
ORDER BY pop DESC;
-- Statistiques de dispersion
SELECT COUNT(*) AS n_ecoregions,
MIN(pop) AS pop_min, MAX(pop) AS pop_max,
ROUND(AVG(pop), 0) AS pop_moyenne,
ROUND(CAST(MAX(pop) AS REAL) / MIN(pop), 1) AS ratio_max_min,
SUM(pop) AS pop_totale
FROM ecoregions_fin;
La longueur du réseau hydrographique nommé, croisée avec la surface des écorégions, donne la densité de drainage en kilomètres de cours d'eau par kilomètre carré.
-- Longueur du réseau par écorégion (requiert SpatiaLite)
SELECT
ef.eco AS ecoregion,
ef.km2 AS surface_km2,
ROUND(SUM(ST_Length(ST_Intersection(ce.geom, ef.geom))) / 1000.0, 1)
AS long_reseau_km,
ROUND(SUM(ST_Length(ST_Intersection(ce.geom, ef.geom))) / 1000.0 / ef.km2, 3)
AS densite_drainage_km_par_km2
FROM ecoregions_fin ef
JOIN cours_eau ce ON ST_Intersects(ce.geom, ef.geom)
GROUP BY ef.eco, ef.km2
ORDER BY densite_drainage_km_par_km2 DESC;

La couche meso_diagnostic identifie les masses d'eau souterraines dont l'emprise franchit plusieurs bassins. Une valeur de coupee_bassins à 1 signale une nappe qui impose une cogestion entre agences. Le découpage actuel en 7 circonscriptions laisse 124 nappes à cheval sur 639, soit près d'une nappe sur cinq.
-- Nappes à cheval sur au moins deux bassins
SELECT md.code_meso, md.nom_meso,
md.n_bassins_recoupes, md.liste_bassins,
ROUND(md.surf_totale_km2, 0) AS surf_km2
FROM meso_diagnostic md
WHERE md.n_bassins_recoupes >= 2
ORDER BY md.n_bassins_recoupes DESC, md.surf_totale_km2 DESC;
-- Combien de nappes à cheval par nombre de bassins recoupés
SELECT n_bassins_recoupes, COUNT(*) AS n_nappes
FROM meso_diagnostic
GROUP BY n_bassins_recoupes
ORDER BY n_bassins_recoupes;

Les 22 hydro-écorégions de niveau 1 (Wasson, 2002) et les écorégions hydrographiques reposent sur des logiques distinctes, physico-chimique et écologique d'un côté, hydrologique et hydrographique de l'autre. La mesure des recouvrements éclaire ce que chaque maillage capte.
-- Surface de recouvrement HER-1 x écorégion (requiert SpatiaLite)
SELECT h.NomHER1 AS her1, ef.eco AS ecoregion,
ROUND(ST_Area(ST_Intersection(h.geom, ef.geom)) / 1e6, 0) AS surf_km2_commun
FROM her1 h
JOIN ecoregions_fin ef
ON ST_Intersects(h.geom, ef.geom)
AND ST_Area(ST_Intersection(h.geom, ef.geom)) > 1e6 -- seuil 1 km2
ORDER BY her1, surf_km2_commun DESC;
Le détail du code qui produit ces couches figure dans les scripts commentés ; les vérifications qui referment la boucle sont dans les contrôles de cohérence.
Le géopackage se documente lui-même par sa table de catalogue, et chaque chiffre du dossier se recalcule par une requête publiée ici. Les traitements spatiaux demandent l'extension SpatiaLite, mais la logique reste lisible : agréger des communes par zonage, dissoudre des secteurs par écorégion, croiser des nappes avec des bassins. Rien n'est caché derrière un calcul non reproductible.