# I_T3_03 - Ilots de chaleur urbains

I\_T3\_03

Les îlots de chaleur urbains sont déterminés en creux par I-T3\_02 - les ensemble de plus de 250 m² continus (hors routes et emprises ferroviaires OSM) non végétalisés.

#### **La Vulnérabilité Sociale aux îlots de chaleur (le plus d'habitants et le moins de végétation)** 

Contrairement à une analyse sur toute la ville, ce script commence par isoler les **40 carreaux les plus critiques** (ceux qui ont le moins d'arbres ET le plus d'habitants). C'est un filtre de **justice environnementale** : on ne cherche pas seulement le bitume, on cherche le bitume là où les gens vivent et étouffent.

C'est la grande force de ce script : chaque polygone de bâti ou de parking reste "marqué" par l'identifiant de son carreau INSEE (`fid`).

- **Avantage** : Vous pouvez dire : *"Dans ce quartier précis (Carreau X), voici les 3 dalles responsables de la surchauffe"*.
- Dans votre Top 25 final, cette traçabilité est plus diffuse car on ne regarde que la taille de l'objet, pas son contexte humain.

En utilisant `ST_Difference` à l'intérieur des carreaux, elle crée une cartographie en "négatif" :

- Elle fait ressortir le bâti dense, les cœurs d'îlots minéraux et les zones de stockage de chaleur nocturne.
- Elle ignore la voirie (grâce à OSM) et les jardins (grâce au COSIA).

---

### Comparaison pour votre rapport :

<table id="bkmrk-couche-objectif-stra"><thead><tr><td>**Couche**</td><td>**Objectif Stratégique**</td><td>**Ce qu'elle montre**</td></tr></thead><tbody><tr><td><span>**Le Top 40 (ce script)**</span></td><td><span>**Priorisation Sociale**</span></td><td><span>Les masses critiques là où la population est la plus exposée.</span></td></tr><tr><td><span>**Le Top 25 (260327)**</span></td><td><span>**Puissance Thermique**</span></td><td><span>Les plus grands gisements de chaleur de la ville (indépendamment de la population).</span></td></tr></tbody></table>

#####   
  
  
**SCRIPT DES 40 entités urbaines sensibles aux îlots de chaleur** 

```
docker exec -it alteris_postgis psql -U alteris_admin -d alteris_geo -c "
DROP TABLE IF EXISTS la_ciotat_masses_critiques_icu;

CREATE TABLE la_ciotat_masses_critiques_icu AS
WITH 
-- 1. Préparation de la voirie REPROJETÉE
voirie_l93 AS (
    SELECT ST_Union(ST_MakeValid(ST_Transform(geom, 2154))) as geom 
    FROM highway_la_ciotat
),
-- 2. Regroupement de la nature COSIA (déjà en 2154 normalement)
nature_totale AS (
    SELECT ST_Union(ST_MakeValid(geom)) as geom 
    FROM (
        SELECT geom FROM cosia_vegetation_haute
        UNION ALL
        SELECT geom FROM cosia_vegetation_basse
    ) as sub
),
-- 3. Ciblage du TOP 40 des carreaux critiques
top_carreaux AS (
    SELECT fid, geom
    FROM la_ciotat_indicateur_fraicheur
    ORDER BY taux_canopee_pct ASC, population DESC
    LIMIT 40
),
-- 4. Découpage chirurgical
masses_brutes AS (
    SELECT 
        t.fid as carreau_origine,
        ST_Difference(
            ST_Difference(t.geom, COALESCE((SELECT geom FROM nature_totale), 'GEOMETRYCOLLECTION EMPTY'::geometry)),
            COALESCE((SELECT geom FROM voirie_l93), 'GEOMETRYCOLLECTION EMPTY'::geometry)
        ) as geom
    FROM top_carreaux t
)
-- 5. Éclatement et validation
SELECT 
    carreau_origine,
    (ST_Dump(ST_MakeValid(geom))).geom as geom
FROM masses_brutes;

-- 6. Nettoyage final (Seuil 250 m2)
DELETE FROM la_ciotat_masses_critiques_icu WHERE ST_Area(geom) < 250;
"
```

[![image.png](https://bookstack.juxjux.ovh/uploads/images/gallery/2026-04/scaled-1680-/CQaimage-png.png)](https://bookstack.juxjux.ovh/uploads/images/gallery/2026-04/scaled-1680-/CQaimage-png.png)

#### Etape suivante la hiérarchisation   
  


Voici la chaîne de traitement logique, documentée étape par étape, qui nous a permis de passer des couches brutes de végétation **COSIA** au fichier stratégique **`260327_icu_top25_la_ciotat`**.

---

### Étape 1 : Préparation de l'Emprise Urbaine (Masque PLU)

Avant de calculer l'ICU, nous avons défini le périmètre d'étude réglementaire pour éviter les "faux positifs" en zone naturelle ou agricole.

- **Source** : `plu_zones_urbaines`
- **Filtre** : Zones `U` (Urbaines) et `AU` (À Urbaniser).

<div class="code-block ng-tns-c3591678305-280 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk-sql"><div class="code-block-decoration header-formatted gds-title-s ng-tns-c3591678305-280 ng-star-inserted"><span class="ng-tns-c3591678305-280">SQL</span><div class="buttons ng-tns-c3591678305-280 ng-star-inserted"></div></div><div class="formatted-code-block-internal-container ng-tns-c3591678305-280"><div class="animated-opacity ng-tns-c3591678305-280"></div></div></div>```
-- Création d'une emprise propre en Lambert-93
WITH emprise_urbaine AS (
    SELECT ST_Union(ST_MakeValid(ST_Transform(geom, 2154))) as geom 
    FROM plu_zones_urbaines 
    WHERE typezone LIKE 'U%' OR typezone LIKE 'AU%'
)

```

<div class="code-block ng-tns-c3591678305-280 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--4"><div class="formatted-code-block-internal-container ng-tns-c3591678305-280"><div class="animated-opacity ng-tns-c3591678305-280"></div></div></div>### Étape 2 : Identification du "Plein" et du "Vide" (Soustraction)

C'est le cœur du calcul I-T3\_03. L'ICU est défini par ce qui n'est **ni de la nature**, **ni de la voirie circulable**, au sein de l'enveloppe urbaine.

- **Sources Nature** : `cosia_vegetation_haute` (arbustive) + `cosia_vegetation_basse` (herbacée).
- **Source Voirie** : `highway_la_ciotat` (OSM).

<div class="code-block ng-tns-c3591678305-281 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk-sql-1"><div class="code-block-decoration header-formatted gds-title-s ng-tns-c3591678305-281 ng-star-inserted"><span class="ng-tns-c3591678305-281">SQL</span><div class="buttons ng-tns-c3591678305-281 ng-star-inserted"></div></div><div class="formatted-code-block-internal-container ng-tns-c3591678305-281"><div class="animated-opacity ng-tns-c3591678305-281"></div></div></div>```
-- Regroupement de toute la végétation COSIA
nature_totale AS (
    SELECT ST_Union(ST_MakeValid(geom)) as geom 
    FROM (
        SELECT geom FROM cosia_vegetation_haute
        UNION ALL
        SELECT geom FROM cosia_vegetation_basse
    ) as sub
),
-- Calcul des masses minérales par différence spatiale
masses_brutes AS (
    SELECT 
        ST_Difference(
            ST_Difference(urbain.geom, nature.geom),
            voirie.geom
        ) as geom
)

```

<div class="code-block ng-tns-c3591678305-281 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--7"><div class="formatted-code-block-internal-container ng-tns-c3591678305-281"><div class="animated-opacity ng-tns-c3591678305-281"></div></div></div>### Étape 3 : Fragmentation et Seuil de Significativité

Le résultat brut est une "nappe" trouée. Nous l'avons éclatée en entités distinctes et avons appliqué votre seuil de **250 m²** pour ne retenir que les masses ayant un impact thermique réel.

<div class="code-block ng-tns-c3591678305-282 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk-sql-2"><div class="code-block-decoration header-formatted gds-title-s ng-tns-c3591678305-282 ng-star-inserted"><span class="ng-tns-c3591678305-282">SQL</span><div class="buttons ng-tns-c3591678305-282 ng-star-inserted"></div></div><div class="formatted-code-block-internal-container ng-tns-c3591678305-282"><div class="animated-opacity ng-tns-c3591678305-282"></div></div></div>```
-- Éclatage des multipolygones en polygones simples
SELECT (ST_Dump(geom)).geom as geom 
FROM masses_brutes
WHERE ST_Area(geom) >= 250;

```

<div class="code-block ng-tns-c3591678305-282 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--10"><div class="formatted-code-block-internal-container ng-tns-c3591678305-282"><div class="animated-opacity ng-tns-c3591678305-282"></div></div></div>### Étape 4 : Extraction du Top 25 (Production du fichier final)

Pour l'indicateur final, nous avons classé ces masses par superficie décroissante pour isoler les 25 "points noirs" les plus massifs de La Ciotat.

<div class="code-block ng-tns-c3591678305-283 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk-sql-3"><div class="code-block-decoration header-formatted gds-title-s ng-tns-c3591678305-283 ng-star-inserted"><span class="ng-tns-c3591678305-283">SQL</span><div class="buttons ng-tns-c3591678305-283 ng-star-inserted"></div></div><div class="formatted-code-block-internal-container ng-tns-c3591678305-283"><div class="animated-opacity ng-tns-c3591678305-283"></div></div></div>```
-- Création de la table de référence Altéris
CREATE TABLE "260327_icu_top25_la_ciotat" AS
SELECT 
    row_number() OVER (ORDER BY ST_Area(geom) DESC) as gid,
    ROUND(ST_Area(geom)::numeric, 0) as surface_m2,
    geom
FROM la_ciotat_masses_critiques_nettoyees
ORDER BY surface_m2 DESC
LIMIT 25;

-- Indexation pour performance QGIS
CREATE INDEX idx_top25_260327 ON "260327_icu_top25_la_ciotat" USING GIST (geom);

```

<div class="code-block ng-tns-c3591678305-283 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--13"><div class="formatted-code-block-internal-container ng-tns-c3591678305-283"><div class="animated-opacity ng-tns-c3591678305-283"></div></div></div>---

### Synthèse de la donnée produite

- **Indicateur** : I-T3\_03 (Îlots de Chaleur Urbains).
- **Méthode** : Analyse morphologique par soustraction (Urbain - Nature - Voirie).
- **Volume** : 25 entités majeures.
- **Surface cumulée** : **77,58 hectares**.
- **Précision** : Géométrie réelle (non carroyée), calée sur le bâti et les parkings