add osm nav userscript to calculate co2 eq

This commit is contained in:
Tykayn 2024-04-29 13:21:39 +02:00 committed by tykayn
parent c7117abc34
commit 8c3c479f88
3 changed files with 265 additions and 8 deletions

View File

@ -4,7 +4,7 @@
// et lancer ce script dans la console js pour avoir à la fin un tableau de toutes les séquences. // 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 // ouvrir le drawer de séquene key
function toggle_advanced_info () { function toggle_advanced_info() {
let _dots = document.querySelector('.i2.three-dots') let _dots = document.querySelector('.i2.three-dots')
_dots.click _dots.click
} }
@ -31,9 +31,13 @@ function click_block_number (num) {
} }
function add_sequence_id () { 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)') 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 id = id_sequence_container.innerText
if(sequences_list.indexOf(id) === -1){
console.log('déjà présent: ', id)
}
sequences_list.push(id) sequences_list.push(id)
console.log('sequence id', id) console.log('sequence id', id)
@ -44,8 +48,10 @@ function check_annoying_modal(){
if (has_annoying_modal) { if (has_annoying_modal) {
has_annoying_modal.click() has_annoying_modal.click()
let t = setTimeout(() => {
toggle_advanced_info() 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 // compter
document.querySelectorAll('drawer-sequence-item') 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()

View File

@ -0,0 +1,64 @@
<table>
<thead>
<tr>
<th>Véhicule</th>
<th>CO2 kg eq.</th>
</tr>
</thead>
<tbody>
<tr>
<td>Avion</td>
<td class="text-right">${emissionsByMode.avion.toFixed(1)}</td>
</tr>
<tr>
<td>Bus thermique</td>
<td class="text-right">${emissionsByMode.bus.toFixed(1)}</td>
</tr>
<tr>
<td>Moto</td>
<td class="text-right">${emissionsByMode.moto.toFixed(1)}</td>
</tr>
<tr>
<td>Scooter</td>
<td class="text-right">${emissionsByMode.scoot.toFixed(1)}</td>
</tr>
<tr>
<td>Voiture</td>
<td class="text-right">${emissionsByMode.voiture.toFixed(1)}</td>
</tr>
<tr>
<td>Voiture électrique ⚡</td>
<td class="text-right">${emissionsByMode.voiture_elec.toFixed(1)}</td>
</tr>
<tr>
<td>🚴 Vélo Electrique ⚡</td>
<td class="text-right">${emissionsByMode.velo_elec.toFixed(1)}</td>
</tr>
<tr>
<td>🚇 Métro</td>
<td class="text-right">${emissionsByMode.tgv.toFixed(1)}</td>
</tr>
<tr>
<td>TGV</td>
<td class="text-right">${emissionsByMode.tgv.toFixed(1)}</td>
</tr>
<tr>
<td>🚴 Vélo ou marche</td>
<td>0</td>
</tr>
</tbody>
</table>
<div class="source-data">
<a href="https://agirpourlatransition.ademe.fr/particuliers/bureau/deplacements/calculer-emissions-carbone-trajets">
infos ADEME
</a>
<i>
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.
</i>
<a href="https://raw.githubusercontent.com/incubateur-ademe/monimpacttransport/main/src/data/transportations.json">json</a>
</div>

View File

@ -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 = `<div class="impact-climat">
<style>
.impact-climat{
text-align: right;
padding: 1rem;
}
</style>
<h3>Impact climatique:</h3>
<table>
<thead>
<tr>
<th>Véhicule</th>
<th>CO2 kg eq.</th>
</tr>
</thead>
<tbody>
<tr>
<td>Avion condensation inclue</td>
<td class="text-right">${emissionsByMode.avion_condens.toFixed(1)}</td>
</tr>
<tr>
<td>Avion</td>
<td class="text-right">${emissionsByMode.avion.toFixed(1)}</td>
</tr>
<tr>
<td>Bus thermique</td>
<td class="text-right">${emissionsByMode.bus.toFixed(1)}</td>
</tr>
<tr>
<td>Moto</td>
<td class="text-right">${emissionsByMode.moto.toFixed(1)}</td>
</tr>
<tr>
<td>Scooter</td>
<td class="text-right">${emissionsByMode.scoot.toFixed(1)}</td>
</tr>
<tr>
<td>Voiture</td>
<td class="text-right">${emissionsByMode.voiture.toFixed(1)}</td>
</tr>
<tr>
<td>Voiture électrique </td>
<td class="text-right">${emissionsByMode.voiture_elec.toFixed(1)}</td>
</tr>
<tr>
<td>🚴 Vélo Electrique </td>
<td class="text-right">${emissionsByMode.velo_elec.toFixed(1)}</td>
</tr>
<tr>
<td>🚇 Métro</td>
<td class="text-right">${emissionsByMode.tgv.toFixed(1)}</td>
</tr>
<tr>
<td>TGV</td>
<td class="text-right">${emissionsByMode.tgv.toFixed(1)}</td>
</tr>
<tr>
<td>🚴 Vélo ou marche</td>
<td>0</td>
</tr>
</tbody>
</table>
<div class="source-data">
<a href="https://agirpourlatransition.ademe.fr/particuliers/bureau/deplacements/calculer-emissions-carbone-trajets">
infos ADEME
</a>
<i>
Émissions de gaz à effet de serre (GES) pour une personne sur cette distance, en équivalent CO2. Voyager à plusieurs divise les émissions de GES.<br>
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.
</i>
<a href="https://raw.githubusercontent.com/incubateur-ademe/monimpacttransport/main/src/data/transportations.json">json</a>
</div>
</div>`
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()