User:Barnes38/GrenobleAlpesMétropole VoirieCyclable Pistes Cyclables GéoVélo

From OpenStreetMap Wiki
Jump to navigation Jump to search

 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="
"; out; );

Bresson; 0;
Brié-et-Angonnes; 516.691;
Champ-sur-Drac; 0;
Champagnier; 2435.172;
Claix; 5583.717;
Corenc; 38.27;
Domène; 4167.489;
Eybens; 8795.923;
Fontaine; 2945.141;
Fontanil-Cornillon; 345.273;
Gières; 5173.317;
Grenoble; 22429.593;
Herbeys; 0;
Jarrie; 42.182;
La Tronche; 4878.222;
Le Gua; 0;
Le Pont-de-Claix; 2242.081;
Le Sappey-en-Chartreuse; 0;
Meylan; 15841.12;
Miribel-Lanchâtre; 100.537;
Mont-Saint-Martin; 0;
Montchaboud; 0;
Murianette; 1837.076;
Notre-Dame-de-Commiers; 0;
Notre-Dame-de-Mésage; 0;
Noyarey; 1338.869;
Poisat; 675.612;
Proveysieux; 0;
Quaix-en-Chartreuse; 0;
Saint-Barthélemy-de-Séchilienne; 98.665;
Saint-Georges-de-Commiers; 0;
Saint-Martin-d'Hères; 11297.412;
Saint-Martin-le-Vinoux; 1935.277;
Saint-Paul-de-Varces; 0;
Saint-Pierre-de-Mésage; 0;
Saint-Égrève; 6250.898;
Sarcenas; 0;
Sassenage; 3586.41;
Seyssinet-Pariset; 3662.795;
Seyssins; 3798.23;
Séchilienne; 0;
Varces-Allières-et-Risset; 4186.996;
Vaulnaveys-le-Bas; 0;
Vaulnaveys-le-Haut; 0;
Venon; 0;
Veurey-Voroize; 687.341;
Vif; 3934.362;
Vizille; 0;
Échirolles; 6432.792;

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="
"; // A chaque tour de boucle, on génère un output out; );

nom;population;longueur;par_habitant;terminaison Bresson;667;0;0;
Brié-et-Angonnes;2521;516.691;0.20495477984927;
Champ-sur-Drac;3339;0;0;
Champagnier;1406;2435.172;1.7319857752489;
Claix;7859;5583.717;0.7104869576282;
Corenc;4139;38.27;0.0092461947330273;
Domène;6720;4167.489;0.62016205357143;
Eybens;9974;8795.923;0.88188520152396;
Fontaine;22891;2945.141;0.12865934209951;
Fontanil-Cornillon;3405;345.273;0.10140176211454;
Gières;7161;5173.317;0.72242940930038;
Grenoble;157477;22429.593;0.14243091372073;
Herbeys;1378;0;0;
Jarrie;3903;42.182;0.010807583909813;
La Tronche;6470;4878.222;0.75397557959815;
Le Gua;1838;0;0;
Le Pont-de-Claix;10805;2242.081;0.20750402591393;
Le Sappey-en-Chartreuse;1137;0;0;
Meylan;18573;15841.12;0.85291121520487;
Miribel-Lanchâtre;450;100.537;0.22341555555555;
Mont-Saint-Martin;88;0;0;
Montchaboud;342;0;0;
Murianette;867;1837.076;2.1188881199539;
Notre-Dame-de-Commiers;535;0;0;
Notre-Dame-de-Mésage;1106;0;0;
Noyarey;2277;1338.869;0.58799692577954;
Poisat;2123;675.612;0.31823457371644;
Proveysieux;517;0;0;
Quaix-en-Chartreuse;908;0;0;
Saint-Barthélemy-de-Séchilienne;426;98.665;0.23160798122066;
Saint-Georges-de-Commiers;2646;0;0;
Saint-Martin-d'Hères;38454;11297.412;0.2937902948978;
Saint-Martin-le-Vinoux;5825;1935.277;0.33223639484978;
Saint-Paul-de-Varces;2224;0;0;
Saint-Pierre-de-Mésage;791;0;0;
Saint-Égrève;16995;6250.898;0.36780806119447;
Sarcenas;242;0;0;
Sassenage;11660;3586.41;0.30758233276158;
Seyssinet-Pariset;11753;3662.795;0.3116476644261;
Seyssins;7997;3798.23;0.47495685882206;
Séchilienne;1024;0;0;
Varces-Allières-et-Risset;8287;4186.996;0.5052487027875;
Vaulnaveys-le-Bas;1360;0;0;
Vaulnaveys-le-Haut;4000;0;0;
Venon;801;0;0;
Veurey-Voroize;1401;687.341;0.4906074232691;
Vif;8584;3934.362;0.45833667287978;
Vizille;7293;0;0;
Échirolles;36849;6432.792;0.17457168444191;

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="
"; out; );

Bresson; 0;
Brié-et-Angonnes; 0;
Champ-sur-Drac; 0;
Champagnier; 1302.719;
Claix; 3646.702;
Corenc; 0;
Domène; 0;
Eybens; 6949.495;
Fontaine; 2184.352;
Fontanil-Cornillon; 0;
Gières; 1463.482;
Grenoble; 17382.829;
Herbeys; 0;
Jarrie; 0;
La Tronche; 3247.475;
Le Gua; 0;
Le Pont-de-Claix; 1636.67;
Le Sappey-en-Chartreuse; 0;
Meylan; 2409.79;
Miribel-Lanchâtre; 0;
Mont-Saint-Martin; 0;
Montchaboud; 0;
Murianette; 0;
Notre-Dame-de-Commiers; 0;
Notre-Dame-de-Mésage; 0;
Noyarey; 23.928;
Poisat; 445.263;
Proveysieux; 0;
Quaix-en-Chartreuse; 0;
Saint-Barthélemy-de-Séchilienne; 0;
Saint-Georges-de-Commiers; 0;
Saint-Martin-d'Hères; 7918.119;
Saint-Martin-le-Vinoux; 1431.45;
Saint-Paul-de-Varces; 0;
Saint-Pierre-de-Mésage; 0;
Saint-Égrève; 3259.265;
Sarcenas; 0;
Sassenage; 1017.807;
Seyssinet-Pariset; 1015.304;
Seyssins; 3108.05;
Séchilienne; 0;
Varces-Allières-et-Risset; 1957.888;
Vaulnaveys-le-Bas; 0;
Vaulnaveys-le-Haut; 0;
Venon; 0;
Veurey-Voroize; 0;
Vif; 0;
Vizille; 0;
Échirolles; 3961.956;

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="
"; // A chaque tour de boucle, on génère un output out; );

nom; population; longueur; par_habitant; terminaison Bresson; 667; 0; 0;
Brié-et-Angonnes; 2521; 0; 0;
Champ-sur-Drac; 3339; 0; 0;
Champagnier; 1406; 1302.719; 0.9265426742532;
Claix; 7859; 3646.702; 0.46401603257412;
Corenc; 4139; 0; 0;
Domène; 6720; 0; 0;
Eybens; 9974; 6949.495; 0.69676107880489;
Fontaine; 22891; 2184.352; 0.095424053121314;
Fontanil-Cornillon; 3405; 0; 0;
Gières; 7161; 1463.482; 0.20436838430387;
Grenoble; 157477; 17382.829; 0.11038328771821;
Herbeys; 1378; 0; 0;
Jarrie; 3903; 0; 0;
La Tronche; 6470; 3247.475; 0.50192812982999;
Le Gua; 1838; 0; 0;
Le Pont-de-Claix; 10805; 1636.67; 0.15147339194817;
Le Sappey-en-Chartreuse; 1137; 0; 0;
Meylan; 18573; 2409.79; 0.12974694448931;
Miribel-Lanchâtre; 450; 0; 0;
Mont-Saint-Martin; 88; 0; 0;
Montchaboud; 342; 0; 0;
Murianette; 867; 0; 0;
Notre-Dame-de-Commiers; 535; 0; 0;
Notre-Dame-de-Mésage; 1106; 0; 0;
Noyarey; 2277; 23.928; 0.010508563899868;
Poisat; 2123; 445.263; 0.20973292510598;
Proveysieux; 517; 0; 0;
Quaix-en-Chartreuse; 908; 0; 0;
Saint-Barthélemy-de-Séchilienne; 426; 0; 0;
Saint-Georges-de-Commiers; 2646; 0; 0;
Saint-Martin-d'Hères; 38454; 7918.119; 0.20591145264472;
Saint-Martin-le-Vinoux; 5825; 1431.45; 0.24574248927039;
Saint-Paul-de-Varces; 2224; 0; 0;
Saint-Pierre-de-Mésage; 791; 0; 0;
Saint-Égrève; 16995; 3259.265; 0.19177787584584;
Sarcenas; 242; 0; 0;
Sassenage; 11660; 1017.807; 0.087290480274443;
Seyssinet-Pariset; 11753; 1015.304; 0.086386794860886;
Seyssins; 7997; 3108.05; 0.38865199449794;
Séchilienne; 1024; 0; 0;
Varces-Allières-et-Risset; 8287; 1957.888; 0.23626016652588;
Vaulnaveys-le-Bas; 1360; 0; 0;
Vaulnaveys-le-Haut; 4000; 0; 0;
Venon; 801; 0; 0;
Veurey-Voroize; 1401; 0; 0;
Vif; 8584; 0; 0;
Vizille; 7293; 0; 0;
Échirolles; 36849; 3961.956; 0.1075186843605;

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
try it yourself in overpass-turbo
3.1b Pistes cyclables bidir GéoVélo dans GAM : km total
try it yourself in overpass-turbo
3.1c Pistes cyclables monodir gauche GéoVélo dans GAM : km par commune
try it yourself in overpass-turbo
3.1d Pistes cyclables monodir gauche GéoVélo dans GAM : km par commune et par habitant
try it yourself in overpass-turbo

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
try it yourself in overpass-turbo
4.1b Pistes cyclables bidir GéoVélo dans GAM : km total
try it yourself in overpass-turbo
4.1c Pistes cyclables bidir GéoVélo dans GAM : km par commune
try it yourself in overpass-turbo
4.1d Pistes cyclables bidir GéoVélo dans GAM : km par commune et par habitant
try it yourself in overpass-turbo

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


Ceci est à éradiquer:

au bénéfice de:

Sur le