User:Barnes38/GrenobleAlpesMétropole VoirieCyclable Pistes Cyclables GéoVélo
Explications
- GéoVélo veut récuperer tous les infras d'un type donné en prenant en compte toutes les façons de le caractériser
- GeoVélo utilise SQL pour requêter, voir en bas de page (seulement le cas des pistes cyclables), les req SQL et des indications pour passer de SQL à Overpass
Requêtes Overpass et résultats
Pistes cyclables bidir
Méthode
Numéro | Req SQL GéoVélo | Req SQL simplifiée | Req SQL transformée | Avec | Req Overpass |
---|---|---|---|---|---|
2.1 |
-- A - Soit la route est à double sens avec des pistes cyclables ratachées de part et d'autre, soit il s'agit d'une piste cyclable indépendante à double sens : ( -- la route ou la piste cyclable est à double sens "oneway" IS NULL OR "oneway" NOT IN ('yes','-1') ) AND -- et elle est ( -- soit une piste cyclable indépendante "highway" = 'cycleway' OR ( -- soit une piste cyclable rattachée à la route (track) -- de part et d'autre de la route "cycleway" IN ('track','opposite_track') OR "cycleway:both" IN ('track','opposite_track') OR ( "cycleway:left" IN ('track','opposite_track') AND "cycleway:right" IN ('track','opposite_track') ) ) ) |
( ------------- A OR B ) AND ( C OR ( D OR E OR ( F AND G ) ) ) |
( ----------- [A][C]; [B][C]; [A][D]; [B][D]; [A][E]; [B][E]; [A][F][G]; [B][F][G]; ) |
A [!oneway] B [oneway!=yes] C [highway=cycleway] D ["cycleway"~"^(track|opposite_track)$"] E ["cycleway:both"~"^(track|opposite_track)$"] F ["cycleway:left"~"^(track|opposite_track)$"] G ["cycleway:right"~"^(track|opposite_track)$"] |
( nwr[highway=cycleway][!oneway](area.searchArea); nwr[highway=cycleway][oneway!=yes](area.searchArea); nwr["cycleway"~"^(track|opposite_track)$"][!oneway](area.searchArea); nwr["cycleway"~"^(track|opposite_track)$"][oneway!=yes](area.searchArea); nwr["cycleway:both"~"^(track|opposite_track)$"][!oneway](area.searchArea); nwr["cycleway:both"~"^(track|opposite_track)$"][oneway!=yes](area.searchArea); nwr["cycleway:left"~"^(track|opposite_track)$"]["cycleway:right"~"^(track|opposite_track)$"]["cycleway:right:oneway"= 'no'][!oneway](area.searchArea); nwr["cycleway:left"~"^(track|opposite_track)$"]["cycleway:right"~"^(track|opposite_track)$"]["cycleway:right:oneway"= 'no'][oneway!=yes](area.searchArea); ); |
Résultats
Numéro | Explications | Requête Overpass | Résultat Nov 2024 |
---|---|---|---|
2.1a | Pistes cyclables bidir GéoVélo dans GAM |
[out:json][timeout:250]; area[name="Grenoble-Alpes Métropole"]->.searchArea; ( nwr[highway=cycleway][!oneway](area.searchArea); nwr[highway=cycleway][oneway!=yes](area.searchArea); nwr["cycleway"~"^(track|opposite_track)$"][!oneway](area.searchArea); nwr["cycleway"~"^(track|opposite_track)$"][oneway!=yes](area.searchArea); nwr["cycleway:both"~"^(track|opposite_track)$"][!oneway](area.searchArea); nwr["cycleway:both"~"^(track|opposite_track)$"][oneway!=yes](area.searchArea); nwr["cycleway:left"~"^(track|opposite_track)$"]["cycleway:right"~"^(track|opposite_track)$"]["cycleway:right:oneway"= 'no'][!oneway](area.searchArea); nwr["cycleway:left"~"^(track|opposite_track)$"]["cycleway:right"~"^(track|opposite_track)$"]["cycleway:right:oneway"= 'no'][oneway!=yes](area.searchArea); ); // print results out geom; |
|
2.1b | Pistes cyclables bidir GéoVélo dans GAM : km total |
[out:csv(length, "::count"; false; ";")]; area[name="Grenoble-Alpes Métropole"]->.searchArea; ( nwr[highway=cycleway][!oneway](area.searchArea); nwr[highway=cycleway][oneway!=yes](area.searchArea); nwr["cycleway"~"^(track|opposite_track)$"][!oneway](area.searchArea); nwr["cycleway"~"^(track|opposite_track)$"][oneway!=yes](area.searchArea); nwr["cycleway:both"~"^(track|opposite_track)$"][!oneway](area.searchArea); nwr["cycleway:both"~"^(track|opposite_track)$"][oneway!=yes](area.searchArea); nwr["cycleway:left"~"^(track|opposite_track)$"]["cycleway:right"~"^(track|opposite_track)$"]["cycleway:right:oneway"= 'no'][!oneway](area.searchArea); nwr["cycleway:left"~"^(track|opposite_track)$"]["cycleway:right"~"^(track|opposite_track)$"]["cycleway:right:oneway"= 'no'][oneway!=yes](area.searchArea); ); make count length=sum(length()); out; |
113720.852; |
2.1c | Pistes cyclables bidir GéoVélo dans GAM : km par commune |
[out:csv(name, length, term; false; "; ")]; area[name="Grenoble-Alpes Métropole"]->.searchArea; relation[boundary=administrative][admin_level=8](area.searchArea); map_to_area; // Pour chaque commune for (t["name"]) ( (._;)->.commune; ( nwr[highway=cycleway][!oneway](area.commune); nwr[highway=cycleway][oneway!=yes](area.commune); nwr["cycleway"~"^(track|opposite_track)$"][!oneway](area.commune); nwr["cycleway"~"^(track|opposite_track)$"][oneway!=yes](area.commune); nwr["cycleway:both"~"^(track|opposite_track)$"][!oneway](area.commune); nwr["cycleway:both"~"^(track|opposite_track)$"][oneway!=yes](area.commune); nwr["cycleway:left"~"^(track|opposite_track)$"]["cycleway:right"~"^(track|opposite_track)$"]["cycleway:right:oneway"= 'no'][!oneway](area.commune); nwr["cycleway:left"~"^(track|opposite_track)$"]["cycleway:right"~"^(track|opposite_track)$"]["cycleway:right:oneway"= 'no'][oneway!=yes](area.commune); ); make count name = commune.set(t["name"]), length=sum(length()), term=" |
Bresson; 0; |
2.1d | Pistes cyclables bidir GéoVélo dans GAM : km par commune et par habitant |
// Format CSV de sortie avec les colonnes : nom, population, longueur, par_habitant [out:csv(nom, population, longueur, par_habitant, terminaison; true; ";")]; // On recherche l'entité "Grenoble-Alpes Métropole" pour effectuer une recherche area[name="Grenoble-Alpes Métropole"]->.searchArea; // Dans cette aire de recherche, on cherche les relations caractérisées par [boundary=administrative][admin_level=8] : ceci correspond à toutes les communes de "Grenoble-Alpes Métropole" relation[boundary=administrative][admin_level=8](area.searchArea); // Et on transforme ces relations en aires de recherche map_to_area; // La boucle itère sur l'ensemble des relations sélectionnées dans l'étape précédente // Donc pour chaque commune for (t["name"]) ( (._;)->.commune; ( nwr[highway=cycleway][!oneway](area.commune); nwr[highway=cycleway][oneway!=yes](area.commune); nwr["cycleway"~"^(track|opposite_track)$"][!oneway](area.commune); nwr["cycleway"~"^(track|opposite_track)$"][oneway!=yes](area.commune); nwr["cycleway:both"~"^(track|opposite_track)$"][!oneway](area.commune); nwr["cycleway:both"~"^(track|opposite_track)$"][oneway!=yes](area.commune); nwr["cycleway:left"~"^(track|opposite_track)$"]["cycleway:right"~"^(track|opposite_track)$"]["cycleway:right:oneway"= 'no'][!oneway](area.commune); nwr["cycleway:left"~"^(track|opposite_track)$"]["cycleway:right"~"^(track|opposite_track)$"]["cycleway:right:oneway"= 'no'][oneway!=yes](area.commune); ); // On se sert de la possibilité de calculer et affecter des variables make count nom = commune.set(t["name"]), population=commune.set(t["population"]), par_habitant=(sum(length()/commune.set(t["population"]))), longueur=sum(length()), terminaison=" |
nom;population;longueur;par_habitant;terminaison
Bresson;667;0;0; |
Pistes cyclables bidir en rajoutant [lanes=2]
Modélisation
Déjà faite
Résultats
Numéro | Req SQL GéoVélo | Req Overpass | Commentaires |
---|---|---|---|
2.2a | Pistes cyclables bidir GéoVélo dans GAM en rajoutant lanes=2 ("vraie" bidir?) |
[out:json][timeout:250]; area[name="Grenoble-Alpes Métropole"]->.searchArea; ( nwr[lanes=2][!oneway][highway=cycleway](area.searchArea); nwr[lanes=2][oneway!=yes][highway=cycleway](area.searchArea); nwr[lanes=2][!oneway]["cycleway"~"^(track|opposite_track)$"](area.searchArea); nwr[lanes=2][oneway!=yes]["cycleway"~"^(track|opposite_track)$"](area.searchArea); nwr[lanes=2][!oneway]["cycleway:both"~"^(track|opposite_track)$"](area.searchArea); nwr[lanes=2][oneway!=yes]["cycleway:both"~"^(track|opposite_track)$"](area.searchArea); nwr[lanes=2][!oneway]["cycleway:left"~"^(track|opposite_track)$"]["cycleway:right"~"^(track|opposite_track)$"](area.searchArea); nwr[lanes=2][oneway!=yes]["cycleway:left"~"^(track|opposite_track)$"]["cycleway:right"~"^(track|opposite_track)$"](area.searchArea); ); out geom; |
|
2.2b | Pistes cyclables bidir GéoVélo dans GAM en rajoutant lanes=2 ("vraie" bidir?) : km total |
[out:csv(length, "::count"; false; "; ")]; area[name="Grenoble-Alpes Métropole"]->.searchArea; ( nwr[lanes=2][!oneway][highway=cycleway](area.searchArea); nwr[lanes=2][oneway!=yes][highway=cycleway](area.searchArea); nwr[lanes=2][!oneway]["cycleway"~"^(track|opposite_track)$"](area.searchArea); nwr[lanes=2][oneway!=yes]["cycleway"~"^(track|opposite_track)$"](area.searchArea); nwr[lanes=2][!oneway]["cycleway:both"~"^(track|opposite_track)$"](area.searchArea); nwr[lanes=2][oneway!=yes]["cycleway:both"~"^(track|opposite_track)$"](area.searchArea); nwr[lanes=2][!oneway]["cycleway:left"~"^(track|opposite_track)$"]["cycleway:right"~"^(track|opposite_track)$"](area.searchArea); nwr[lanes=2][oneway!=yes]["cycleway:left"~"^(track|opposite_track)$"]["cycleway:right"~"^(track|opposite_track)$"](area.searchArea); ); make count length=sum(length()); out; |
57746.234; |
2.2c | Pistes cyclables bidir GéoVélo dans GAM en rajoutant lanes=2 ("vraie" bidir?) : km par commune |
[out:csv(name, length, term; false; "; ")]; area[name="Grenoble-Alpes Métropole"]->.searchArea; relation[boundary=administrative][admin_level=8](area.searchArea); map_to_area; // Pour chaque commune for (t["name"]) ( (._;)->.commune; ( nwr[lanes=2][highway=cycleway][!oneway](area.commune); nwr[lanes=2][highway=cycleway][oneway!=yes](area.commune); nwr[lanes=2]["cycleway"~"^(track|opposite_track)$"][!oneway](area.commune); nwr[lanes=2]["cycleway"~"^(track|opposite_track)$"][oneway!=yes](area.commune); nwr[lanes=2]["cycleway:both"~"^(track|opposite_track)$"][!oneway](area.commune); nwr[lanes=2]["cycleway:both"~"^(track|opposite_track)$"][oneway!=yes](area.commune); nwr[lanes=2]["cycleway:left"~"^(track|opposite_track)$"]["cycleway:right"~"^(track|opposite_track)$"]["cycleway:right:oneway"= 'no'][!oneway](area.commune); nwr[lanes=2]["cycleway:left"~"^(track|opposite_track)$"]["cycleway:right"~"^(track|opposite_track)$"]["cycleway:right:oneway"= 'no'][oneway!=yes](area.commune); ); make count name = commune.set(t["name"]), length=sum(length()), term=" |
Bresson; 0; |
2.2d | Pistes cyclables bidir GéoVélo dans GAM en rajoutant lanes=2 ("vraie" bidir?) : km par commune et par habitant |
// Format CSV de sortie avec les colonnes : nom, population, longueur, par_habitant [out:csv(nom, population, longueur, par_habitant, terminaison; true; "; ")]; // On recherche l'entité "Grenoble-Alpes Métropole" pour effectuer une recherche area[name="Grenoble-Alpes Métropole"]->.searchArea; // Dans cette aire de recherche, on cherche les relations caractérisées par [boundary=administrative][admin_level=8] : ceci correspond à toutes les communes de "Grenoble-Alpes Métropole" relation[boundary=administrative][admin_level=8](area.searchArea); // Et on transforme ces relations en aires de recherche map_to_area; // La boucle itère sur l'ensemble des relations sélectionnées dans l'étape précédente // Donc pour chaque commune for (t["name"]) ( // La commune courante (._;)->.commune; // On effectue la recherche [highway=cycleway][oneway=yes] ( nwr[lanes=2][highway=cycleway][!oneway](area.commune); nwr[lanes=2][highway=cycleway][oneway!=yes](area.commune); nwr[lanes=2]["cycleway"~"^(track|opposite_track)$"][!oneway](area.commune); nwr[lanes=2]["cycleway"~"^(track|opposite_track)$"][oneway!=yes](area.commune); nwr[lanes=2]["cycleway:both"~"^(track|opposite_track)$"][!oneway](area.commune); nwr[lanes=2]["cycleway:both"~"^(track|opposite_track)$"][oneway!=yes](area.commune); nwr[lanes=2]["cycleway:left"~"^(track|opposite_track)$"]["cycleway:right"~"^(track|opposite_track)$"]["cycleway:right:oneway"= 'no'][!oneway](area.commune); nwr[lanes=2]["cycleway:left"~"^(track|opposite_track)$"]["cycleway:right"~"^(track|opposite_track)$"]["cycleway:right:oneway"= 'no'][oneway!=yes](area.commune); ); // On se sert de la possibilité de calculer et affecter des variables make count nom = commune.set(t["name"]), population=commune.set(t["population"]), par_habitant=(sum(length()/commune.set(t["population"]))), longueur=sum(length()), terminaison=" |
nom; population; longueur; par_habitant; terminaison
Bresson; 667; 0; 0; |
Pistes cyclables monodir gauche
Modélisation
Numéro | Requête SQL | Requête SQL simplifiée | Requête SQL transformée | Avec | Overpass |
---|---|---|---|---|---|
3.1 |
Résultats
Numéro | Explications | Requête Overpass | Résultat Nov 2024 |
---|---|---|---|
3.1a | Pistes cyclables bidir GéoVélo dans GAM | ||
3.1b | Pistes cyclables bidir GéoVélo dans GAM : km total | ||
3.1c | Pistes cyclables monodir gauche GéoVélo dans GAM : km par commune | ||
3.1d | Pistes cyclables monodir gauche GéoVélo dans GAM : km par commune et par habitant |
Pistes cyclables monodir droite
Modélisation
Numéro | Requête SQL | Requêt SQL simplifiée | Requête SQL transformée | Avec | Overpass |
---|---|---|---|---|---|
4.1 |
Résultats
Numéro | Explications | Requête Overpass | Résultat Nov 2024 |
---|---|---|---|
4.1a | Pistes cyclables bidir GéoVélo dans GAM | ||
4.1b | Pistes cyclables bidir GéoVélo dans GAM : km total | ||
4.1c | Pistes cyclables bidir GéoVélo dans GAM : km par commune | ||
4.1d | Pistes cyclables bidir GéoVélo dans GAM : km par commune et par habitant |
Requêtes SQL GéoVélo
Pistes cyclables 2x.sql
-- A - Soit la route est à double sens avec des pistes cyclables ratachées de part et d'autre, soit il s'agit d'une piste cyclable indépendante à double sens : ( -- la route ou la piste cyclable est à double sens "oneway" IS NULL OR "oneway" NOT IN ('yes','-1') ) AND -- et elle est ( -- soit une piste cyclable indépendante "highway" = 'cycleway' OR ( -- soit une piste cyclable rattachée à la route (track) de part et d'autre de la route "cycleway" IN ('track','opposite_track') OR "cycleway:both" IN ('track','opposite_track') OR ( "cycleway:left" IN ('track','opposite_track') AND "cycleway:right" IN ('track','opposite_track') ) ) ) )
Pistes cyclables 2xD.sql
-- Une piste cyclable à double sens d'un seul côté de la route (:left/right), rattachée à une route (track) qui peut être à sens unique ou pas : ( -- ou la piste peut être à droite "cycleway:right" IN ('track','opposite_track') AND "cycleway:right:oneway" = 'no' )
Pistes cyclables 2xG.sql
-- Une piste cyclable à double sens d'un seul côté de la route (:left/right), rattachée à une route (track) qui peut être à sens unique ou pas : ( -- ou la piste peut être à droite "cycleway:left" IN ('track','opposite_track') AND "cycleway:left:oneway" = 'no' )
Pistes cyclables 1xD.sql
(-- A - Soit la piste cyclable est séparée et à sens unique "oneway" IN ('yes') AND "highway" = 'cycleway' ) OR ( ( -- soit la piste cyclable est à droite de manière explicite sur une voie a double sens ) "cycleway:right" IN ('track') AND ( -- et il n'y a pas de piste à gauche "cycleway:left" IS NULL OR "cycleway:left" NOT IN ('track','opposite_track') ) AND ( -- et la piste de droite est bien à sens unique "cycleway:right:oneway" IS NULL OR "cycleway:right:oneway" != 'no' ) ) OR ( -- Soit qui ne sont que du coté de circulation des routes à sens unique ( -- route à sens unique (avec yes) "oneway"='yes' ) AND ( (--avec une bande cyclable "cycleway"='track' OR "cycleway:right"='track' ) AND ( --et pas a double sens "cycleway:right:oneway" != 'no' OR "cycleway:right:oneway" IS NULL ) ) ) OR ( -- route à sens unique (avec -1) "oneway"='-1' AND ( "cycleway:right"='track' --avec une bande cyclable (obligatoirement left sinon il s'agit d'un double-sens cyclable) AND ( -- et pas à double sens "cycleway:right:oneway" IS NULL OR "cycleway:right:oneway" != 'no' ) AND ( --et pas en en DSC "oneway:bicycle" != 'no' OR "oneway:bicycle" IS NULL ) ) ) )
Pistes cyclables 1xG.sql
(-- A - Soit la piste cyclable est séparée et à sens unique "oneway" IN ('-1') AND "highway" = 'cycleway' ) OR ( -- soit la piste cyclable est à gauche de manière implicite "cycleway" IN ('track') AND "oneway" IN ('-1') ) OR (-- Soit la piste cyclable est attachée à la route (track) ( -- voies à double sens "oneway" IS NULL OR "oneway" NOT IN ('yes','-1') ) AND ( --bande cyclable d'un seul côté ( -- seulement à gauche "cycleway:left"='track' AND ( --pas à droite "cycleway:right" IS NULL OR "cycleway:right" NOT IN ('track') ) AND ( -- et pas à double sens "cycleway:left:oneway" IS NULL OR "cycleway:left:oneway" != 'no' ) ) ) ) OR ( -- Soit qui ne sont que du coté de circulation des routes à sens unique (obligatoirement left sinon il s'agit d'un double-sens cyclable) ( -- route à sens unique (avec yes) ( "oneway"='yes' ) AND ( --cas d'une bande a gauche du sens de circulation mais dans le sens de circulation ( "cycleway:left" = 'track' AND ( --et pas en DSC "oneway:bicycle" != 'no' OR "oneway:bicycle" IS NULL ) AND ( --et pas a double sens "cycleway:left:oneway" != 'no' OR "cycleway:left:oneway" IS NULL ) ) ) ) OR ( -- route à sens unique (avec -1) "oneway"='-1' AND ( --cas d'une bande a gauche du sens de circulation mais dans le sens de circulation ( "cycleway:left" = 'track' OR "cycleway"='track' ) AND ( --et pas a double sens "cycleway:left:oneway" != 'no' OR "cycleway:left:oneway" IS NULL ) ) ) )
Calculer l'équivalence SQL <=> OVERPASS
SQL : A is null
OVERPASS [A !='.*']
SQL : A in ("val1", "val2")
OVERPASS : ["A"~"val1|val2"]
SQL : A not in ("val1", "val2")
OVERPASS ["A"!~"val1|val2"]
SQL : (A OR B)
OVERPATH ( [A]; [B]; );
SQL : (A OR B) AND C
OVERPATH ( [A][C]; [B][C]; );
SQL : ((A OR B) AND (C OR D))
SQL (A and C) or (B and D) or (A and D) or (B and D) OVERPATH ( [A][C]; [B][C]; [A][D]; [B][D]; );
Commentaires
- oneway=-1 : il n'y en a pas (ou plus) dans le périmètre de GAM (au 9 déc 2024)
- cycleway=opposite_track : deprecated; dans les rues à sens unique poue indiquer que la piste cyclable était à contresens
- maintenant on rajoute oneway:bicycle=-1 ?
- cycleway=track ou cycleway=opposite_track : il n'y en a pas (plus) dans le périmètre de GAM (au 9 déc 2024)
Ceci est à éradiquer:
au bénéfice de:
Sur le