define ("RTerra", 6378137); define ("S_LAT", 'lat'); define ("S_LON", 'lon'); define ("KM_MIL", 1.60934); // echo "costanti RT DG OK"; $RT = RTerra; $Deg2Rad = M_PI/180; $Alfa = 0.015; // coef. resistenza dell'aria; 0.0072 ottimale. $Roto = 0.02; // coef. resistenza al rotolamento; 0.01 ottimale; $Grav = 9.8; if (!isset($SLat)) $SLat = 'lat'; if (!isset($SLon)) $SLon = 'lon'; // echo "variabili RT DG OK"; function EliminApostrofi($str){ return str_replace("'", "`", $str); } function getFotoData($foto){ if (!file_exists($foto) && ($foto[0] == '/')) { $foto = '/var/www/html/bici'.$foto; } if (file_exists($foto) && (strpos($foto, '.jpg') || strpos($foto, '.jpeg'))){ $exif_data = exif_read_data ($foto, 'EXIF'); if (@array_key_exists('DateTimeOriginal', $exif_data)) { return $exif_data['DateTimeOriginal']; } else if (@array_key_exists('DateTimeDigitized', $exif_data)) { return $exif_data['DateTimeDigitized']; } else { $exif_data = exif_read_data ($foto, 'IFD0'); if (@array_key_exists('DateTime', $exif_data)) return $exif_data['DateTime']; else return NULL; } } else return NULL; } function ExifData($foto) { $fotoData = getFotoData("/var/www/html/bici/$foto"); if (isset($fotoData)) { $caption .= " (data e ora: $fotoData)"; } return $caption; } function SegnaLuoghi($lat0, $lon0, $lat1, $lon1, $icona){ $cur = mysql_query(" SELECT nome, sigla, latitudine, longitudine, foto FROM bici.luoghi WHERE (longitudine BETWEEN $lon0 AND $lon1) AND (latitudine BETWEEN $lat0 AND $lat1) ORDER BY longitudine DESC "); if (mysql_error()) echo mysql_error(); $result = ''; while ($riga = mysql_fetch_row($cur)) { $result .= "SetMarker0($riga[2], $riga[3], \"$riga[0]\", \"?Sigla=$riga[1]&Trova=1\", \"$riga[4]\", \"$riga[0]\", \"$icona\");"; } return $result; } function JS_segnaLuoghiLatLon($cLat, $cLon, $zoom){ $dLa = $zoom/50; $dLo = $zoom/50; $lat0 = $cLat - $dLa; $lon0 = $cLon - $dLo; $lat1 = $cLat + $dLa; $lon1 = $cLon + $dLo; return SegnaLuoghi($lat0, $lon0, $lat1, $lon1, 'villa'); } function IterUscitaSQL($sqlCom){ $line = GetPolylineSQL($sqlCom); $linea = '['; $sep = ''; foreach ($line as $latlon){ $linea .= "$sep new google.maps.LatLng($latlon)"; $sep = ','; } $linea .= "]\n"; return $linea; } function IterUscita($uscita, $verso){ $line = GetPolyline($uscita, $verso); $linea = '['; $sep = ''; foreach ($line as $latlon){ $linea .= "$sep new google.maps.LatLng($latlon)"; $sep = ','; } $linea .= "]\n"; return $linea; } function TrovaLatLon($percorso, &$lat, &$lon, &$zoom){ global $Deg2Rad; global $SLat; global $SLon; $lat = 45.6; $lon = 12.3; $zoom = 10; $curP = mysql_query("SELECT CLat, CLon, zoom FROM percorsi.riepilogo WHERE nome = '$percorso'"); if (mysql_error()) echo mysql_error(); if ($rigaP = mysql_fetch_row($curP)) { $lat = $rigaP[0]; $lon = $rigaP[1]; $zoom = $rigaP[2]; } else { $curP = mysql_query("SELECT min($SLat), min($SLon), max($SLat), max($SLon) FROM $percorso"); if (mysql_error()) echo mysql_error(); if ($rigaP = mysql_fetch_row($curP)) { $lat = ($rigaP[0] + $rigaP[2])/2; $lon = ($rigaP[1] + $rigaP[3])/2; $wid = cos($lat*$Deg2Rad)*abs($rigaP[1] - $rigaP[3]); $hi = abs($rigaP[0] - $rigaP[2]); if ($hi > $wid) $wid = $hi; $zoom = floor(9 - log($wid, 2)); if ($zoom > 13) $zoom = 13; if ($zoom < 5) $zoom = 5; } } // $zoom = 9; /* $curP = mysql_query("SELECT min($SLat), min($SLon), max($SLat), max($SLon) FROM $percorso"); if (mysql_error()) echo mysql_error(); if ($rigaP = mysql_fetch_row($curP)) { $lat = ($rigaP[0] + $rigaP[2])/2; $lon = ($rigaP[1] + $rigaP[3])/2; $wid = cos($lat*$Deg2Rad)*abs($rigaP[1] - $rigaP[3]); $hi = abs($rigaP[0] - $rigaP[2]); if ($hi > $wid) $wid = $hi; $zoom = floor(9 - log($wid, 2)); if ($zoom > 13) $zoom = 13; if ($zoom < 5) $zoom = 5; // $zoom = 9; } */ } function EncodeChar($ll){ $lat = round($ll*100000); if ($lat < 0) { $lat = -$lat; $lat = 4294967296 - $lat; $lat = 2*$lat; $lat = 8589934591 - $lat; } else { $lat = 2*$lat; } $line = ''; do { $line .= chr(63 + (($lat % 32) | 32)); $lat = $lat / 32; } while ($lat >= 32); $line .= chr(63 + $lat); return $line; } function EncPolyline($percorso, $verso){ global $SLat; global $SLon; $cur = mysql_query("SELECT $SLat, $SLon FROM $percorso ORDER BY ord $verso"); if (mysql_error()) echo mysql_error(); $line = ''; $ulat = 0; $ulon = 0; while ($riga = mysql_fetch_row($cur)) { $line .= EncodeChar($riga[0] - $ulat); $line .= EncodeChar($riga[1] - $ulon); $ulat = $riga[0]; $ulon = $riga[1]; } return $line; } function GetRPolyline($percorso, $verso, $riduci){ global $SLat; global $SLon; $cur = mysql_query("SELECT $SLat, $SLon FROM percorsi.$percorso ORDER BY ord $verso"); if (mysql_error()) echo mysql_error(); $line = array(); $ind = 0; $indR = 0; while ($riga = mysql_fetch_row($cur)) { if ($ind == 0) $line[$indR++] = "$riga[0], $riga[1]"; ++$ind; if ($ind == $riduci) $ind = 0; } return $line; } function GetPolylineSQL($sqlCom){ $cur = mysql_query($sqlCom); if (mysql_error()) echo mysql_error(); $line = array(); $ind = 0; while ($riga = mysql_fetch_row($cur)) { $line[$ind++] = "$riga[0], $riga[1]"; } return $line; } function GetPolyline($percorso, $verso){ global $SLat; global $SLon; // return GetPolylineSQL("SELECT $SLat, $SLon FROM percorsi.$percorso ORDER BY ord $verso"); può anche essere gps20xx !! return GetPolylineSQL("SELECT $SLat, $SLon FROM $percorso ORDER BY ord $verso"); } function GetPath($percorso, $verso){ global $SLat; global $SLon; $cur = mysql_query("SELECT $SLat, $SLon FROM $percorso ORDER BY ord $verso"); // $cur = mysql_query("SELECT $SLat, $SLon FROM percorsi.$percorso ORDER BY ord $verso"); if (mysql_error()) echo mysql_error(); $line = '['; // $line = ''; $ind = 0; $sep = ''; while ($riga = mysql_fetch_row($cur)) { $line .= $sep."new google.maps.LatLng($riga[0], $riga[1])"; $sep = ', '; } return $line.']'; } function GetInfoWindow($percorso){ $cur = mysql_query("SELECT lat, lon, legenda FROM percorsi.$percorso WHERE rango > 0"); if (mysql_error()) echo mysql_error(); $info = array(); $ind = 0; while ($riga = mysql_fetch_row($cur)) { $info[$ind++] = "$riga[0], $riga[1]|$riga[2]"; } return $info; } function Secondi2HMS($time){ $ore = floor($time/3600); $min = floor(($time - $ore*3600)/60); $sec = floor(($time - $ore*3600 - $min*60)); return array('ore' => $ore, 'min' => $min, 'sec' => $sec); } function Ore2HMagellan($hours){ $ore = floor($hours); $resto = $hours - $ore; $min = $resto * 60; return 100*$ore + $min; } function HMS2Secondi($hour, $min, $sec){ return $sec + 60*$min + 3600*$hour; } function HMS2Minuti($hour, $min, $sec){ return $sec/60 + $min + 60*$hour; } function OraEstiva($anno, $mese, $di){ if (($mese > 2) && ($mese < 9)){ return true; } else if ($mese == 2){ $ud = 31 - ((gregoriantojd (3, 31, $anno)+1) % 7); if ($di >= $ud) { return true; } else { return false; } } else if ($mese == 9){ $ud = 31 - ((gregoriantojd (3, 31, $anno)+1) % 7); if ($di >= $ud) { return false; } else { return true; } } else { return false; } } function DiffOra($anno, $mese, $di){ if (OraEstiva($anno, $mese, $di)) { return 2; } else { return 1; } } function ReadMetaData($xml){ $mdata = array(); while ($xml->read()) { if (($xml->name == "time") && ($xml->nodeType == 1)) { $xml->read(); $mdata[0] = substr($xml->value, 0, 10); $mdata[1] = substr($xml->value, 11, 8); } if ($xml->name == "bounds") { $mdata[2] = $xml->getAttribute('minlat'); $mdata[3] = $xml->getAttribute('minlon'); $mdata[4] = $xml->getAttribute('maxlat'); $mdata[5] = $xml->getAttribute('maxlon'); break; } } return $mdata; } function ReadTrackpoint($xml){ $trk = array(); if ($xml->hasAttributes){ $trk[0] = $xml->getAttribute('lat'); $trk[1] = $xml->getAttribute('lon'); } while ($xml->read()) { if (($xml->name == "trkpt") && ($xml->nodeType == 15)) break; if (($xml->name == "ele") && ($xml->nodeType == 1)) { $xml->read(); $trk[2] = (int) $xml->value; } if (($xml->name == "time") && ($xml->nodeType == 1)) { $xml->read(); $trk[3] = substr($xml->value, 0, 10); $trk[4] = substr($xml->value, 11, 8); } } return $trk; } function ReadWaypoint($xml){ $wpt = array(); if ($xml->hasAttributes){ $wpt[4] = $xml->getAttribute('lat'); $wpt[5] = $xml->getAttribute('lon'); } while ($xml->read()) { if (($xml->name == "wpt") && ($xml->nodeType == 15)) break; if (($xml->name == "ele") && ($xml->nodeType == 1)) { $xml->read(); $wpt[2] = (int) $xml->value; } if (($xml->name == "name") && ($xml->nodeType == 1)) { $xml->read(); $wpt[0] = $xml->value; } if (($xml->name == "desc") && ($xml->nodeType == 1)) { $xml->read(); $wpt[1] = $xml->value; } } $wpt[3] = ''; $wpt[6] = 1; return $wpt; } function SelectFileGPS($name, $dir, $selected, $tipo){ $dp = opendir($dir); echo "$dir \n"; closedir($dp); } function SelectTracceTXT($fname, $selected){ echo "\n"; } function SelectTracceGPS($uscita, $selected, $tipo){ if (isset($uscita) && (strlen($uscita) > 2)) { if ($tipo == 'gpx') { $mark = 'trk'; } else if ($tipo == 'kml') { $mark = 'Placemark'; } else if ($tipo == 'txt') { SelectTracceTXT($uscita, $selected); return 1; } $fname = $uscita; $xml = new XMLReader(); $xml->open($fname); // if (floatval(phpversion()) > 5.1) $xml->setParserProperty(XMLReader::LOADDTD, TRUE); echo "\n"; $xml->close(); } } function Second2Hour($secondi){ $s = $secondi % 60; $h = ($secondi - $s)/60; $m = $h % 60; $h = ($h - $m)/60; return array($h, $m, $s); } function Polar2Cartes($lat, $lon, $alt){ global $RT; $raggio = $RT + $alt; $x = (float)$raggio*(cos($lat)*cos($lon)); $y = (float)$raggio*(cos($lat)*sin($lon)); $z = (float)$raggio*(sin($lat)); return array($x, $y, $z); } function Distanza($P0, $P1){ $dx = $P0[0]-$P1[0]; $dy = $P0[1]-$P1[1]; $dz = $P0[2]-$P1[2]; return (float)sqrt($dx*$dx + $dy*$dy + $dz*$dz); } function DistanzaSfericaC($lat0, $lon0, $alt0, $lat1, $lon1, $alt1){ global $RT; $P0 = Polar2Cartes($lat0, $lon0, $alt0); $P1 = Polar2Cartes($lat1, $lon1, $alt0); return Distanza($P0, $P1); } function DistanzaSfericaP($lat0, $lon0, $lat1, $lon1){ global $RT; $dlat = $RT*($lat1 - $lat0); $dlon = $RT*($lon1 - $lon0); $mlat = ($lat0 + $lat1)/2; $fcos = cos($lat0); return sqrt($dlat^2 + ($fcos*$dlon)^2); } function DistanzaCurvilinea($dretta){ global $RT; return 2*$RT*asin($dretta/2/$RT); } function Potenza($massa, $pendenza, $vel, $frenate, $roto){ global $Alfa; // global $Roto; global $Grav; // global $Frenate; // $roto = $Roto; if ($pendenza < 0) $roto += abs($pendenza)*$frenate; // simulazione frenate in discesa; return ($massa*($pendenza + $roto) + $Alfa*$vel*$vel)*$Grav*abs($vel); } function Velocita($potenza, $massa, $pendenza, $vel0, $vel1, $frenate, $roto){ $conta = 0; $error0 = $potenza - Potenza($massa, $pendenza, $vel0, $frenate, $roto); do { $vel = ($vel0 + $vel1) /2; $error = $potenza - Potenza($massa, $pendenza, $vel, $frenate, $roto); if ($error0*$error < 0) { $vel1 = $vel; } else { $vel0 = $vel; $error0 = $error; } ++$conta; } while ((abs($error) > 0.001) && ($conta < 10)); return $vel; } function JS_Itinerario_LatLon($nome, &$CLat, &$CLon){ $cur = mysql_query("SELECT CLat, CLon FROM percorsi.riepilogo WHERE nome = '$nome'"); if ($riga = mysql_fetch_row($cur)) { $CLat = $riga[0]; $CLon = $riga[1]; } } function JS_Itinerario($nome, $colore){ $cur = mysql_query("SELECT nome, titolo, url_pagina, ordine FROM percorsi.riepilogo WHERE nome = '$nome'"); $JScode = "Percorso = ["; if ($riga = mysql_fetch_row($cur)) { $Titolo = $riga[1]; $URL = $riga[2]; if (strlen($URL) < 2) $URL = "/itinerari/percorso.html?Percorso=$riga[0]"; $OrdIter = $riga[3]; $line = GetRPolyline($riga[0], 'ASC', 1); $sep = ''; foreach($line as $latlon) { $JScode .= "$sep new google.maps.LatLng($latlon)"; $sep = ','; } $JScode .= "] var LatLon = Percorso; var iter = new google.maps.Polyline({ strokeColor : '$colore', strokeWeight: 3, path: LatLon }); iter.setMap(mappa); google.maps.event.addListener(iter, 'click', function(){location.href = '$URL';}); google.maps.event.addListener(iter, 'rightclick', function(){location.href = '/gps/tabella_marcia.phtml?Uscita=$nome';}); "; } return $JScode; } function JS_ItinerariWhere($where, $riduci){ $cur = mysql_query(" SELECT nome, titolo, url_pagina, ordine FROM percorsi.riepilogo r, percorsi.percorsiMappe m $where AND r.nome = m.percorso ORDER BY ordine "); if (mysql_error()) echo "$where - ".mysql_error(); $P_ind = 0; $colore = array('#A03030', '#3030A0', '#308030', '#30A0A0', '#A0A030', '#A030A0', '#202020'); $JScode = ''; while ($riga = mysql_fetch_row($cur)) { $Nome = $riga[0]; $Titolo = $riga[1]; $URL = $riga[2]; if (strlen($URL) < 2) $URL = "/itinerari/percorso.html?Percorso=$riga[0]"; $OrdIter = $riga[3]; $line = GetRPolyline($riga[0], 'ASC', $riduci); $sep = ''; $JScode .= "Percorso = ["; foreach($line as $latlon) { $JScode .= "$sep new google.maps.LatLng($latlon)"; $sep = ','; } $color_ind = $colore[$P_ind % 7]; $JScode .= "] var LatLon = Percorso; var iter = new google.maps.Polyline({ strokeColor : \"$color_ind\", strokeWeight: 3, path: LatLon}); iter.setMap(mappa); google.maps.event.addListener(iter, \"click\", function(){location.href = \"$URL\";}); google.maps.event.addListener(iter, \"rightclick\", function(){location.href = \"/gps/tabella_marcia.phtml?Uscita=$Nome\";}); "; ++$P_ind; } return $JScode; } function JS_Percorso($percorso, $riduci){ $where = " WHERE nome = '$percorso'"; return JS_ItinerariWhere($where, $riduci); } function SegnaVille($lat0, $lon0, $lat1, $lon1, $icona){ $cur = mysql_query(" SELECT v.nome, v.pagina, l.nome, v.architetto, v.provincia, v.latitudine, v.longitudine, v.foto, v.sigla FROM bici.villevenete v, bici.luoghi l WHERE v.luogo = l.sigla AND (v.longitudine BETWEEN $lon0 AND $lon1) AND (v.latitudine BETWEEN $lat0 AND $lat1) ORDER BY v.longitudine DESC "); if (mysql_error()) echo mysql_error(); while ($riga = mysql_fetch_row($cur)) { $foto = $riga[7]; if (!isset($foto) || (strlen($foto) < 3)) { $sigla = $riga[8]; $curF = mysql_query(" SELECT f.foto FROM bici.villevenete v, bici.villeFoto f WHERE v.sigla = f.villa AND v.sigla = '$sigla' LIMIT 1 "); if ($rigaF = mysql_fetch_row($curF)) $foto = $rigaF[0]; else $foto = '???'; } echo " SetMarker0(mappa, $riga[5], $riga[6], \"$riga[0] a $riga[2] ($riga[4])\", \"/luoghi/$riga[1]\", \"/luoghi/$foto\", \"\", \"$icona\");\n"; } } function JS_LocalIgnote($percorso){ $cur = mysql_query("SELECT lat, lon FROM percorsi.percorsiFoto WHERE percorso = '$percorso'"); if (mysql_error()) echo "$where - ".mysql_error(); $locaIgnote = 0; while ($riga = mysql_fetch_row($cur)) { if (!isset($riga[0])) ++$localIgnote; if (!isset($riga[1])) ++$localIgnote; } return $localIgnote; } function JS_FotoVilla($villa, $icona){ // foto villa dove? $sqlCom =" SELECT f.foto, f.titolo, f.descrizione, f.lat, f.lon, f.caption, f.title, r.latitudine, r.longitudine, r.nome, r.foto FROM bici.villeFoto f, bici.villevenete r WHERE f.villa = '$villa' AND r.sigla = '$villa' "; $cur = mysql_query($sqlCom); if (mysql_error()) echo mysql_error(); $fotoList = ''; $conta = 0; while ($riga = mysql_fetch_row($cur)) { $foto = $riga[0]; $iFoto = $riga[10]; if (!isset($iFoto) || (strlen($iFoto) < 3)) $iFoto = $foto; else $iFoto = '---'; if ($conta == 0){ if (isset($riga[7])) $vlat = $riga[7]; else $vlat = 100; if (isset($riga[8])) $vlon = $riga[8]; else $vlon = 100; $fotoList .= "SetMarker0($vlat, $vlon, \"$riga[9]\", \"/luoghi/villa.html?Sigla=$villa\", \"/luoghi/$iFoto\", \"\", \"villa\"); "; } $server = $_SERVER['SERVER_NAME']; if (($server == "bicycle.bonavoglia.eu") || ($server == "bike.bonavoglia.eu")) { $titolo = utf8_encode(EliminApostrofi($riga[6])); $legenda = utf8_encode(EliminApostrofi($riga[5])); } else { $titolo = utf8_encode(EliminApostrofi($riga[1])); $legenda = utf8_encode(EliminApostrofi($riga[2])); } if (isset($riga[3])) $lat = $riga[3]; else $lat = 100; if (isset($riga[4])) $lon = $riga[4]; else $lon = 100; if (($lat < 100) && ($lon < 100)) $fotoList .= "SetMarker0($lat, $lon, \"$titolo\", \"\", \"/luoghi/$foto\", \"$legenda\", \"$icona\"); "; } return $fotoList; } function JS_FotoLuogo($luogo, $icona){ $sqlCom =" SELECT f.foto, f.titolo, f.descrizione, f.lat, f.lon, f.caption, f.title, r.latitudine, r.longitudine, r.nome FROM bici.luoghiFoto f, bici.luoghi r WHERE f.luogo = '$luogo' AND r.situato = '$luogo' AND f.lat <> 0 GROUP BY f.titolo "; $cur = mysql_query($sqlCom); if (mysql_error()) echo mysql_error(); $fotoList = ''; $conta = 0; while ($riga = mysql_fetch_row($cur)) { $foto = $riga[0]; $server = $_SERVER['SERVER_NAME']; if (($server == "bicycle.bonavoglia.eu") || ($server == "bike.bonavoglia.eu")) { $titolo = utf8_encode(EliminApostrofi($riga[6])); $legenda = utf8_encode(EliminApostrofi($riga[5])); } else { $titolo = utf8_encode(EliminApostrofi($riga[1])); $legenda = utf8_encode(EliminApostrofi($riga[2])); } if (isset($riga[3])) $lat = $riga[3]; else $lat = 100; if (isset($riga[4])) $lon = $riga[4]; else $lon = 100; if (($lat < 100) && ($lon < 100)) $fotoList .= "SetMarker0($lat, $lon, \"$titolo\", \"\", \"/citta/$foto\", \"$legenda\", \"$icona\"); "; } return $fotoList; } function JS_FotoFiltro($filtro, $icona){ $cur = mysql_query(" SELECT f.foto, f.titolo, f.descrizione, f.lat, f.lon, f.caption, f.title, r.parent FROM percorsi.percorsiFoto f, percorsi.riepilogo r, percorsi.percorsiMappe m WHERE f.percorso = r.nome AND m.percorso = r.nome $filtro "); if (mysql_error()) echo mysql_error(); $fotoList = ''; while ($riga = mysql_fetch_row($cur)) { $parent = $riga[7]; $server = $_SERVER['SERVER_NAME']; if (($server == "bicycle.bonavoglia.eu") || ($server == "bike.bonavoglia.eu")) { if (strpos($riga[0], '/itinerari/') === false) $foto = "${parent}it/$riga[0]"; else $foto = "it/$riga[0]"; $titolo = utf8_encode(EliminApostrofi($riga[6])); $legenda = utf8_encode(EliminApostrofi($riga[5])); } else { if (strpos($riga[0], '/itinerari/') === false) $foto = "${parent}$riga[0]"; else $foto = $riga[0]; $titolo = utf8_encode(EliminApostrofi($riga[1])); $legenda = utf8_encode(EliminApostrofi($riga[2])); } if (isset($riga[3])) $lat = $riga[3]; else $lat = 100; if (isset($riga[4])) $lon = $riga[4]; else $lon = 100; if (($lat < 100) && ($lon < 100)) $fotoList .= "SetMarker0($lat, $lon, \"$titolo\", \"\", \"$foto\", \"$legenda\", \"$icona\"); "; } return $fotoList; } function JS_FotoPercorso($percorso, $icona){ return JS_FotoFiltro(" AND f.percorso = '$percorso'", $icona); } function JS_FotoWhere($percorso, $icona){ // per compatibilità return JS_FotoFiltro(" AND m.percorso = '$percorso'", $icona); } function JS_FotoViaggio($viaggio, $icona){ return JS_FotoFiltro(" AND m.mappa = '$viaggio'", $icona); } function TabellaViaggio($viaggio, $align, $metric){ if (isset($metric)) { echo "
| Date | Segment | km | miles";
$titolo = 'title';
} else {
echo "
Cronistoria ciclabile per Venezia - 2021
Cronistoria di una ciclabile
Pagina di aggiornamenti sulla ciclabile per Venezia che, inaugurata nel settembre 2017, non può ancora dirsi completa, anche per la costruzione nel 2018 di un muro che ha chiuso l'accesso dalla rotonda di via Torino e costretto a una brutta deviazione fino al sottopassaggio della stazione di Porto Marghera. Chi arriva a Venezia in bici deve essere informato che dal 2017 il comune di Venezia proibisce l'accesso delle bici nel centro storico di Venezia anche se condotte a mano, con un discutibile provvedimento, al quale dedico una pagina a parte. Aggiornamenti, anno 2021
Continua nel 2022
Tutto sommato la soluzione più semplice e diretta; a prima vista sembra assurdo un attraversamento in questo punto a soli 50 metri da quello semaforico più a ovest; forse l'uno sostituirà l'altro che verrebbe smantellato? Intanto sono ripresi i lavori per il sottopassaggio della stazione di Porto Marghera, si intravede finalmente lo scavo della nuova galleria, e sono iniziati lavori lungo via Paganello per la ciclabile dalla stazione; vedremo se i lavori finiranno entro il 2022. Il sottopassaggio potrebbe essere l'ultimo ad essere completato. Forse si concluderanno prima i lavori per il sovrappasso per la Macro-isola; c'è solo da sperare che anche qui ci sia un varco passabilmente ciclabile, in modo da avere le due opzioni insieme, sopra e sotto passaggio; soprattutto in estate quando arrivano sempre più cicloturisti, avere due opzioni è importante.
Nella foto sono evidenziate 1) a destra, la ciclabile da via Torino che fino al 2018 scendeva direttamente nel sottopassaggio lungo una rampa poi demolita; 2) la piattaforma già in essere per la rotatoria alta; 3) la rampa, per ora c'è solo una fila di pilastri, che scende dalla rotatoria fin davanti al Vega.
Quindi la deviazione provvisoria rischia di durare ancora a lungo, visti anche i precedenti di RFI. A questo punto è verosimile che si concludano prima i lavori per il nuovo sistema di sovrappasso stradale con due rotatorie, che viceversa proseguono a buon ritmo, e si può solo sperare che ci sia spazio anche per il passaggio dei ciclisti; l'ideale sarebbe che venisse salvata la corsia ciclabile lungo via Torino che ora finisce nella piattaforma alta e che venga prolungata sulla rampa, ora in costruzione, che finirà proprio davanti al Vega. Sarebbe la soluzione più semplice, ma per ora è solo un bel sogno.
Sembra comunque che la deviazione provvisoria seguita alla chiusura della ciclabile sul viadotto, stia per diventare definitiva. I ciclisti per raggiungere la rotonda di via Torino e il forte Marghera, dovranno fare quello che a Roma si usa chiamare “il giro di Peppe appresso alla reale”↓. Non è chiaro poi come questa ciclabile si ricollegherà alla ciclabile di via Torino. Raggiungendo, verso sudest la rotonda, o verso nordovest la ciclabile lato sud che ora si conclude poco dopo il palazzo delle Poste? In entrambi i casi non si capisce bene dove verrebbe ricavata.
Dal settembre 2017 quando è stata inaugurata questa ciclabile è stata fruibile al 100% solo per pochi mesi; il percorso dopo la ciclabile di via Torino che passava sopra la stazione di Porto Marghera finiva con una discesa un po' ripida direttamente nel sottopassaggio che portava al Vega; soluzione che appariva poco felice, ma che ora appare anzi meravigliosa al confronto della situazione attuale! Infatti nel luglio 2018 fu murato l'accesso al sottopasso della stazione interrompendo il percorso ciclabile e imponendo una lunga e infelice deviazione sulla via Paganello, che ciclabile non è, poco trafficata ma stretta e percorsa da auto, furgoni, camion ed anche TIR. Un disastro che dura tuttora. Si disse che RFI intendeva realizzare una nuova meravigliosa stazione come quella di Venezia Mestre Ospedale, i lavori andarono avanti per qualche mese poi furono abbandonati, lasciando però la ciclabile spezzata in due in modo permanente. E ora questo ulteriore su e giù per le scale che triplica la barriera architettonica.
E invece no, cercando di decifrare la piantina del progetto a lato (da un depliant elettorale che si presume attendibile) sembra proprio che la ciclabile sia stata eliminata e la rampa est che scende dalla rotatoria alta sembrerebbe a due corsie! Soluzione insolita, di solito queste rampe sono a corsia unica, e così lo spazio per una ciclabile ci sarebbe. Oggi quel che resta della ciclabile da via Torino finisce nel vuoto dove sorgerà la rotatoria; basterebbe prolungarla di pochi metri a margine della rotatoria alta, fino alla rampa est (vedi mappa del progetto a lato, clic per vederla in grande), attraversarla e ricavare appunto una corsia ciclabile lungo la rampa, come quella che esisteva sulla demolita rampa a nord della SR 11. Nulla di straordinario, in giro per la regione ci sono decine di rotatorie che prevedono consimili attraversamenti ciclopedonali. Insomma chi fa queste scelte di solito accampa motivazione tecniche, che in realtà sono politiche: in questo caso di privilegiare al 100% il traffico automobilistico anche a costo di eliminare un percorso ciclabile pre-esistente. Scelte che vanno a premiare e incentivare l'uso dell'auto, pervicacemente insistendo in questo infernale circolo a feedback positivo: più traffico → più corsie → più traffico → più corsie → ... Detto in altri termini, al peggio non ci sono limiti: il culto della dea automobile è ormai la sola, vera religione di stato, in Italia soprattutto dove abbiamo il primato mondiale di numero di auto per abitanti, ma in misura variabile in tutto il mondo; e di fronte alla dea automobile ci si può solo genuflettere.
Il tutto dovrebbe essere ultimato a breve, secondo il cartello dei lavori entro febbraio 2021. Richiesto anche con grandi striscioni dai residenti locali come alternativa ciclabile alla assai poco ciclabile via Orlanda, si inserisce nel percorso cicloturistico sulla gronda lagunare e servirà anche per un collegamento ciclabile tra Venezia e l'aeroporto. Non sembra un caso che il progetto sia finanziato da SaVe la società che gestisce gli aeroporti di Venezia. Basterebbe poi un ponticello sul canale scolmatore per arrivare direttamente alla darsena del terminal acqueo.
Continua dalla pagina → Anno 2020 Libro dei sogni
La ciclabile per Venezia è completa dalla stazione di Porto Marghera al bivio del Tronchetto. Altri progetti sarebbero utili a migliorare le connessioni ciclabili con la terraferma; ecco il mio libro dei sogni:
Collegamenti e fonti
X
Il "della burocrazia" è ovviamente una mia aggiunta per contestualizzare la citazione di Schiller, che è la traduzione che si trova più spesso, dall'originale tedesco: Mit (der) Dummheit kämpfen Götter selbst vergebens; letteralmente in italiano sarebbe: "Contro la stupidità, gli dei stessi combattono invano".
X
Modo di dire romano per chi è costretto a fare un giro tortuoso molto più lungo del necessario.
X
L'origine di questa curiosa locuzione è ignota, ma circolano bufale come questa che a prima lettura può sembrare verosimile: Peppe sarebbe nientemeno che Giuseppe Garibaldi, che nel gennaio 1878 sarebbe venuto a Roma per presenziare ai funerali di Vittorio Emanuele II, e avrebbe seguito la carrozza reale che trasportava la salma; carrozza che seguiva un itinerario lungo e tortuoso per consentire alla popolazione di vedere la carrozza e rendere l'ultimo omaggio al re, in particolare fece due volte il giro della rotonda prima di fermarsi davanti al Panteon sempre con Garibaldi al seguito. Storiella divertente ma senza alcun fondamento; dall'archivio del Corriere della Sera, gennaio 1878 si apprende che Garibaldi inviò un telegramma di condoglianze al ministro guardasigilli Mancini, scusandosi di non poter essere presente al funerale per motivi di salute; al suo posto ci fu il figlio on. Menotti Garibaldi. Divertente la storiella di Garibaldi che segue la carrozza reale con la salma di Vittorio Emanuele II. Temo però che non abbia alcun fondamento storico. Cercando nell'archivio del Corriere della Sera del gennaio 1878 si apprende che Garibaldi inviò al ministro guardasigilli Mancini un telegramma di condoglianze scusandosi per non poter intervenire per motivi di salute e al suo posto venne il figlio Menotti Garibaldi. Peccato, la storiella era divertente, ma come capita spesso, era una bufala, nata chissà come. | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|