# Le réseau cyclable

 OpenStreetMap est le **Saint Graal** de la donnée vélo. Les associations de cyclistes (comme la FUB en France) cartographient la moindre bande de peinture au millimètre près. C'est la base de données la plus exhaustive au monde sur ce sujet.

### La Hiérarchie des aménagements cyclables

Pour un diagnostic urbain, on ne classe pas les pistes par leur largeur, mais par leur **niveau de séparation physique avec le trafic automobile** (ce qu'on appelle le *Level of Traffic Stress*).

Dans la structure d'OpenStreetMap, on peut les regrouper en **4 grands niveaux** qualitatifs :

1. **Niveau 1 : Le Site Propre Intégral &amp; Les Voies Vertes (Sécurité Maximale)**
    
    
    - *La physique :* La piste est totalement séparée de la route par un terre-plein, des balises, ou bien elle traverse un parc, une ancienne voie ferrée.
    - *Tags OSM :* `highway=cycleway`, `cycleway=track` ou `highway=path` + `bicycle=yes`.
2. **Niveau 2 : La Bande Cyclable &amp; Couloir Bus (Sécurité Moyenne)**
    
    
    - *La physique :* Le cycliste est sur la chaussée avec les voitures, séparé uniquement par une ligne de peinture blanche. C'est l'aménagement classique des années 2000.
    - *Tags OSM :* `cycleway=lane` ou `cycleway=share_busway`.
3. **Niveau 3 : L'Apaisement et la Mixité (La Vélorue)**
    
    
    - *La physique :* Pas de piste, mais la rue est conçue pour que le vélo soit prioritaire sur la voiture (limitée à 20 ou 30 km/h, chicanes, figurines vélo au sol appelées "sharrows").
    - *Tags OSM :* `cyclestreet=yes` ou `cycleway=shared_lane`.
4. **Niveau 4 : Le Double-Sens Cyclable - DSC (La perméabilité urbaine)**
    
    
    - *La physique :* Une rue à sens unique pour les voitures, mais à double sens pour les vélos. C'est vital pour créer des raccourcis "en toile d'araignée" dans les centres anciens.
    - *Tags OSM :* `oneway:bicycle=no` ou `cycleway=opposite`.

```
DROP TABLE IF EXISTS toulon_mobilite_velo CASCADE;

CREATE TABLE toulon_mobilite_velo AS
SELECT 
    osm_id,
    tags->>'name' AS nom_voie,
    CASE 
        -- Niveau 1 : Pistes séparées et Voies vertes (Site propre)
        WHEN tags->>'highway' = 'cycleway' THEN '1 - Piste cyclable (Site propre)'
        WHEN tags->>'cycleway' IN ('track', 'opposite_track') THEN '1 - Piste cyclable (Séparée)'
        WHEN tags->>'cycleway:right' = 'track' OR tags->>'cycleway:left' = 'track' THEN '1 - Piste cyclable (Séparée)'
        WHEN tags->>'highway' IN ('path', 'pedestrian', 'footway') AND tags->>'bicycle' IN ('yes', 'designated') THEN '1 - Voie verte / Chemin partagé'
        
        -- Niveau 2 : Bandes cyclables et Bus (Peinture au sol)
        WHEN tags->>'cycleway' IN ('lane', 'opposite_lane') THEN '2 - Bande cyclable (Peinture)'
        WHEN tags->>'cycleway:right' = 'lane' OR tags->>'cycleway:left' = 'lane' THEN '2 - Bande cyclable (Peinture)'
        WHEN tags->>'cycleway' = 'share_busway' THEN '2 - Couloir Bus partagé'
        
        -- Niveau 3 : Voies partagées apaisées (Vélorues, Sharrows)
        WHEN tags->>'cyclestreet' = 'yes' OR tags->>'bicycle_road' = 'yes' THEN '3 - Vélorue'
        WHEN tags->>'cycleway' = 'shared_lane' THEN '3 - Voie partagée (Sharrow)'
        
        -- Niveau 4 : Double-sens cyclable (DSC)
        WHEN tags->>'oneway:bicycle' = 'no' OR tags->>'cycleway' IN ('opposite', 'opposite_share_busway') THEN '4 - Double-sens cyclable (DSC)'
        
        ELSE 'Autre'
    END AS type_amenagement,
    ST_Transform(geom, 2154) AS geom
FROM osm_lignes
WHERE tags->>'highway' = 'cycleway'
   OR tags->>'cycleway' IS NOT NULL
   OR tags->>'cycleway:right' IS NOT NULL
   OR tags->>'cycleway:left' IS NOT NULL
   OR tags->>'cyclestreet' = 'yes'
   OR tags->>'bicycle_road' = 'yes'
   OR tags->>'oneway:bicycle' = 'no'
   OR (tags->>'highway' IN ('path', 'pedestrian', 'footway') AND tags->>'bicycle' IN ('yes', 'designated'));

-- Un index spatial pour afficher tout ça à la vitesse de l'éclair
CREATE INDEX idx_mobilite_velo_geom ON toulon_mobilite_velo USING GIST(geom);
```