From 8c3c479f88e296311cb56ce9293aa8de4ef4f133 Mon Sep 17 00:00:00 2001 From: Tykayn Date: Mon, 29 Apr 2024 13:21:39 +0200 Subject: [PATCH] add osm nav userscript to calculate co2 eq --- mapillary_sequences_userscript/index.js | 26 ++-- osm-itineraire-userscript/index.html | 64 +++++++++ osm-itineraire-userscript/index.js | 183 ++++++++++++++++++++++++ 3 files changed, 265 insertions(+), 8 deletions(-) create mode 100644 osm-itineraire-userscript/index.html create mode 100644 osm-itineraire-userscript/index.js diff --git a/mapillary_sequences_userscript/index.js b/mapillary_sequences_userscript/index.js index 9230c12b..d389a7b8 100644 --- a/mapillary_sequences_userscript/index.js +++ b/mapillary_sequences_userscript/index.js @@ -4,7 +4,7 @@ // et lancer ce script dans la console js pour avoir à la fin un tableau de toutes les séquences. // ouvrir le drawer de séquene key -function toggle_advanced_info () { +function toggle_advanced_info() { let _dots = document.querySelector('.i2.three-dots') _dots.click } @@ -31,9 +31,13 @@ function click_block_number (num) { } function add_sequence_id () { - + check_annoying_modal() let id_sequence_container = document.querySelector('.content > div:nth-child(1) > div:nth-child(2) > app-copy-field:nth-child(2) > div:nth-child(1) > div:nth-child(1)') id = id_sequence_container.innerText + + if(sequences_list.indexOf(id) === -1){ + console.log('déjà présent: ', id) + } sequences_list.push(id) console.log('sequence id', id) @@ -44,8 +48,10 @@ function check_annoying_modal(){ if (has_annoying_modal) { has_annoying_modal.click() - toggle_advanced_info() - + let t = setTimeout(() => { + toggle_advanced_info() + clearInterval(t) + }, 100) } } @@ -88,9 +94,13 @@ function iterate_blocks (initial_block = 0, max_block, waiting = 400) { } -// toggle_advanced_info() -// on définit un max d'itérations à 20 pour tester, et 300 milisecondes entre chaque -iterate_blocks(0, 25, 600) - // compter document.querySelectorAll('drawer-sequence-item') + + +// toggle_advanced_info() +// on définit un max d'itérations à 20 pour tester, et 300 milisecondes entre chaque +// iterate_blocks(4, document.querySelectorAll('drawer-sequence-item').length + 4, 1000) +iterate_blocks(30, 60, 600) +// add_sequence_id() +filter_sequences_id() diff --git a/osm-itineraire-userscript/index.html b/osm-itineraire-userscript/index.html new file mode 100644 index 00000000..bf4578de --- /dev/null +++ b/osm-itineraire-userscript/index.html @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VéhiculeCO2 kg eq.
Avion${emissionsByMode.avion.toFixed(1)}
Bus thermique${emissionsByMode.bus.toFixed(1)}
Moto${emissionsByMode.moto.toFixed(1)}
Scooter${emissionsByMode.scoot.toFixed(1)}
Voiture${emissionsByMode.voiture.toFixed(1)}
Voiture électrique ⚡${emissionsByMode.voiture_elec.toFixed(1)}
🚴 Vélo Electrique ⚡${emissionsByMode.velo_elec.toFixed(1)}
🚇 Métro${emissionsByMode.tgv.toFixed(1)}
TGV${emissionsByMode.tgv.toFixed(1)}
🚴 Vélo ou marche0
+ +
+ + + infos ADEME + + + Sont incluses les émissions directes, la construction des véhicules (fabrication, maintenance et fin de vie) et + la production et distribution de carburant et d'électricité. La construction des infrastructures (routes, rails, + aéroports...) n'est pas incluse. + + json +
diff --git a/osm-itineraire-userscript/index.js b/osm-itineraire-userscript/index.js new file mode 100644 index 00000000..9a09d336 --- /dev/null +++ b/osm-itineraire-userscript/index.js @@ -0,0 +1,183 @@ +// ==UserScript== +// @name Comparatif carbone OSM itinéraire +// @version 1 +// @grant none +// ==/UserScript== + +/** + * comparatif des empreintes carbones sur un itinéraire fait sur OSM.org + * @type {{bus: number, voiture_elec: number, tgv: number, voiture: number, velo_elec: number, avion: number}} + */ + +const coefficients = { + avion_condens: 0.285*3, + avion: 0.285, + voiture: 0.218, + scoot: 0.062, + moto: 0.191, + bus: 0.0352, + voiture_elec: 0.103, + velo_elec: 0.01, + metro: 0.004, + tgv: 0.003, +} + +function getDistanceFromElement () { + const sidebarContent = document.getElementById('sidebar_content') + if (!sidebarContent) { + console.warn('Impossible de trouver l’élément #sidebar_content.') + return null + } + + const paragraphs = sidebarContent.querySelectorAll('p') + for (const para of paragraphs) { + if (para.innerText.includes('Distance')) { + const indexOfKm = para.innerText.indexOf('km') + let text = para.innerText + let boom = text.trim().split(' ') + + console.log('para.innerText', para.innerText) + const distance = parseFloat(boom[1]) + return distance + } + } + console.warn('Impossible de trouver la distance dans les paragraphes.') + return null +} + +function calculateEmissionsAndDisplay (distance) { + if (!distance) { + console.warn('La distance est undefined ou null.') + return + } + + const emissionsByMode = { + avion_condens: distance * coefficients.avion_condens, + avion: distance * coefficients.avion, + bus: distance * coefficients.bus, + moto: distance * coefficients.moto, + scoot: distance * coefficients.scoot, + voiture: distance * coefficients.voiture, + voiture_elec: distance * coefficients.voiture_elec, + tgv: distance * coefficients.tgv, + velo_elec: distance * coefficients.velo_elec, + } + + let textCompare = `
+ +

Impact climatique:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VéhiculeCO2 kg eq.
Avion condensation inclue${emissionsByMode.avion_condens.toFixed(1)}
Avion${emissionsByMode.avion.toFixed(1)}
Bus thermique${emissionsByMode.bus.toFixed(1)}
Moto${emissionsByMode.moto.toFixed(1)}
Scooter${emissionsByMode.scoot.toFixed(1)}
Voiture${emissionsByMode.voiture.toFixed(1)}
Voiture électrique ⚡${emissionsByMode.voiture_elec.toFixed(1)}
🚴 Vélo Electrique ⚡${emissionsByMode.velo_elec.toFixed(1)}
🚇 Métro${emissionsByMode.tgv.toFixed(1)}
TGV${emissionsByMode.tgv.toFixed(1)}
🚴 Vélo ou marche0
+
+ + + infos ADEME + + + Émissions de gaz à effet de serre (GES) pour une personne sur cette distance, en équivalent CO2. Voyager à plusieurs divise les émissions de GES.
+ Sont incluses les émissions directes, la construction des véhicules (fabrication, maintenance et fin de vie) et + la production et distribution de carburant et d'électricité. La construction des infrastructures (routes, rails, + aéroports...) n'est pas incluse. +
+ json +
+
` + + let comparison_container = document.querySelector('#comparison_container') + + /** + * on ajoute la div si elle manque + */ + if (!comparison_container) { + const comparisonContainerAdd = document.createElement('div') + comparisonContainerAdd.setAttribute('id', 'comparison_container') + + const sidebarContainer = document.getElementById('sidebar_content') + sidebarContainer.insertBefore(comparisonContainerAdd, sidebarContainer.children[0]); + + comparison_container = document.querySelector('#comparison_container') + + } + // on remplit les infos actualisées + comparison_container.innerHTML = textCompare + console.log('comparison_container', comparison_container.innerText) + +} + +function main () { + const distance = getDistanceFromElement() + if (distance) { + calculateEmissionsAndDisplay(distance) + } else { + setTimeout(() => { + const distance = getDistanceFromElement() + if (distance) { + calculateEmissionsAndDisplay(distance) + } + }, 5000) + } +} + +document.addEventListener('hashchange', () => main()) +document.addEventListener('DOMContentLoaded', () => main()) +document.addEventListener('mouseup', () => main()) + +main()