Hörbeitrag: Unwetter in Spanien: Wohlstandsvernichter Klimawandel – Intv. Anders Levermann
Zugehörige Diskussion https://x.com/PIK_Klima/status/1852321259024974286
---
Die Kosten des Klimawandels
26. Juli 2023
https://www.mpg.de/20668258/interview-munichre-kosten-klimawandel
"Laut der International Energy Agency bräuchte es alleine bis 2030 jährlich 1,6 Billionen US-Dollar an reinen Investitionen in erneuerbare Energien, um das 1,5-Grad-Ziel zu erreichen. Momentan liegen die Investitionen bei einem Drittel dessen.Das sind globale Zahlen, wohingegen die 280 bis 900 Milliarden Euro als mögliche Klimaschäden eine nationale Projektion ist, die im übrigen nicht nur die direkten Klimaschäden, sondern auch Folgeschäden und immaterielle Schäden beinhaltet."
Gründe: Der Klimawandel führt zu einer Zunahme von Extremwetterereignissen wie Überschwemmungen, Stürmen und Hitzewellen. Rückversicherer wie Munich Re tragen die Spitzenrisiken bei Großkatastrophen, die für Erstversicherer allein finanziell nicht tragbar wären. Der steigende Schadentrend ist teils auf den Klimawandel und teils auf die zunehmende Urbanisierung zurückzuführen.
Ausmaß/Kosten: Im Jahr 2022 beliefen sich die weltweiten volkswirtschaftlichen Schäden durch Naturkatastrophen auf 270 Milliarden US-Dollar, von denen 120 Milliarden versichert waren. Die Schadenskosten nehmen kontinuierlich zu. Zukunftsprognosen sehen noch höhere Schäden, wenn der Klimawandel ungebremst voranschreitet.
Aussicht: Es ist entscheidend, Emissionen zu senken, um den Trend langfristig zu verlangsamen. Gleichzeitig sind Anpassungen an die bereits unvermeidlichen Folgen des Klimawandels notwendig, wie z.B. durch neue Bauvorschriften. Der Umbau zu einer klimaneutralen Wirtschaft ist langfristig alternativlos.
Möglichkeiten: Munich Re unterstützt den Wandel, indem sie erneuerbare Energien versicherbar macht und dabei hilft, emissionsfreie Technologien wie Solarmodule und Windturbinen zu finanzieren.
Mathe Renderer ChatPT asciimath
Prompt
Diskutiere die Funktion f(x)=x*e^x . Verwende als Formelformat AciiMath. Die Formeln müssen dafür zwischen # stehen, also z.B. #x^2#.
Quelltext
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>AsciiMath und Markdown Renderer</title>
<!-- Einbindung von marked.js für Markdown-Verarbeitung -->
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<!-- MathJax-Konfiguration -->
<script type="text/javascript">
window.MathJax = {
loader: {load: ['input/asciimath']},
asciimath: {
delimiters: [['#', '#']]
},
startup: {
typeset: false // Verhindert automatisches Typesetting beim Laden
}
};
</script>
<!-- Einbindung von MathJax -->
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
</script>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
}
textarea {
width: 100%;
height: 200px;
font-size: 16px;
}
#output {
border-top: 1px solid #ccc;
margin-top: 20px;
padding-top: 20px;
}
button {
padding: 10px 20px;
font-size: 16px;
}
pre code {
background-color: #f4f4f4;
padding: 2px 4px;
border-radius: 4px;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 20px;
}
ul, ol {
margin-left: 20px;
}
</style>
</head>
<body>
<h1>AsciiMath und Markdown Renderer</h1>
<p>Fügen Sie Ihren Text mit AsciiMath-Formeln (zwischen <code>#</code>) und Markdown-Syntax in das Textfeld ein und klicken Sie auf <strong>Rendern</strong>.</p>
<textarea id="input"></textarea><br><br>
<button onclick="render()">Rendern</button>
<div id="output"></div>
<script>
function render() {
var inputText = document.getElementById('input').value;
// Markdown in HTML umwandeln
var htmlContent = marked.parse(inputText);
// Setze den Inhalt des Ausgabe-Divs
var output = document.getElementById('output');
output.innerHTML = htmlContent;
// Triggert das erneute Rendern durch MathJax
MathJax.typesetPromise([output]).catch(function (err) {
output.innerHTML = '';
output.appendChild(document.createTextNode(err.message));
});
}
</script>
</body>
</html>
Idee
Die Kartenkamera zeigt die aktuelle GPS-Position, die Adresse und die Uhrzeit auf einer Karte an.
Per Screenshot am Smartphone lassen sich so aussagekräftige Fotos von Schlaglöchern etc. gestalten.
Link/Demo
https://drittereihe.de/kartenkamera.html
V2024-09-14 Marker auf der Karte verschiebbar
Realisiert mit ChatGPT
Quellcode
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Karten- und Kamerafunktion mit Textfeld</title>
<style>
body, html {
margin: 0;
padding: 0;
height: 100%;
display: flex;
flex-direction: column;
}
#map {
height: 40%;
}
#address {
padding: 10px;
background-color: #f9f9f9;
font-size: 1.2em;
}
#inputField {
width: 95%;
padding: 10px;
font-size: 1em;
resize: vertical;
overflow: auto;
min-height: 50px; /* Mindesthöhe für das Textfeld */
}
/* Für kleine Bildschirme wie Smartphones */
@media screen and (max-width: 600px) {
#inputField {
font-size: 1.2em; /* Größere Schrift für mobile Geräte */
min-height: 100px; /* Erhöhte Mindesthöhe */
padding: 15px; /* Mehr Padding für bessere Nutzbarkeit */
}
}
#camera {
height: 40%;
}
video {
width: 100%;
height: 100%;
object-fit: cover;
}
</style>
<!-- Leaflet CSS -->
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.3/dist/leaflet.css" />
</head>
<body>
<!-- Karte -->
<div id="map"></div>
<!-- Textfeld -->
<div id="address">
<textarea id="inputField" placeholder="Tippe hier..."></textarea>
</div>
<!-- Kamerabild -->
<div id="camera">
<video id="video" autoplay></video>
</div>
<!-- Leaflet JS -->
<script src="https://unpkg.com/leaflet@1.9.3/dist/leaflet.js"></script>
<script>
// Globale Variablen
let map;
let marker;
// Funktion zur Anzeige der Karte mit der aktuellen Position
function initMap() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(position => {
const lat = position.coords.latitude;
const lon = position.coords.longitude;
// Karte initialisieren
map = L.map('map').setView([lat, lon], 13);
// OpenStreetMap-Tiles hinzufügen
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© OpenStreetMap contributors'
}).addTo(map);
// Verschiebbaren Marker hinzufügen
addDraggableMarker(lat, lon);
// Adresse abrufen und Textfeld aktualisieren
updateAddress(lat, lon);
}, error => {
console.log("Fehler beim Abrufen der Position:", error);
alert("Position konnte nicht ermittelt werden.");
});
} else {
alert("Geolocation wird von deinem Browser nicht unterstützt.");
}
}
// Funktion zum Hinzufügen eines verschiebbaren Markers
function addDraggableMarker(lat, lon) {
// Wenn bereits ein Marker existiert, entferne ihn
if (marker) {
map.removeLayer(marker);
}
// Neuen Marker erstellen und hinzufügen
marker = L.marker([lat, lon], { draggable: true }).addTo(map);
// Popup mit Koordinaten
marker.bindPopup(`Lat.: ${lat}, Lon.: ${lon}`).openPopup();
// Event-Listener für das Beenden des Draggens
marker.on('dragend', function (e) {
const position = marker.getLatLng();
const newLat = position.lat;
const newLon = position.lng;
// Karte zentrieren
map.setView([newLat, newLon]);
// Popup aktualisieren
marker.getPopup().setContent(`Lat.: ${newLat}, Lon.: ${newLon}`).openOn(map);
// Adresse abrufen und Textfeld aktualisieren
updateAddress(newLat, newLon);
});
}
// Funktion zum Abrufen der Adresse und Aktualisieren des Textfelds
function updateAddress(lat, lon) {
// Datum und Uhrzeit formatieren
const now = new Date();
const daysShort = ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'];
const dayName = daysShort[now.getDay()];
const date = now.getDate().toString().padStart(2, '0');
const month = (now.getMonth() + 1).toString().padStart(2, '0');
const year = now.getFullYear().toString().slice(-2);
const hours = now.getHours().toString().padStart(2, '0');
const minutes = now.getMinutes().toString().padStart(2, '0');
const formattedDateTime = `${dayName}, ${date}.${month}.${year} ${hours}:${minutes} Uhr`;
// Adresse anhand der Koordinaten abrufen
fetch(`https://nominatim.openstreetmap.org/reverse?format=json&lat=${lat}&lon=${lon}`)
.then(response => response.json())
.then(data => {
const addressComponents = data.address;
const road = addressComponents.road || '';
const houseNumber = addressComponents.house_number || '';
const postcode = addressComponents.postcode || '';
const city = addressComponents.city || addressComponents.town || addressComponents.village || '';
const suburb = addressComponents.suburb || '';
// Ort und Stadtteil in der richtigen Reihenfolge (Ort, dann Vorort)
let location = `${postcode} ${city}`;
if (suburb && suburb !== city) {
location += ` ${suburb}`;
}
// Adresse in der gewünschten Reihenfolge formatieren
const formattedAddress = `${road} ${houseNumber}, ${location}`;
// Geokoordinaten, Adresse und Datum ins Textfeld einfügen
document.getElementById('inputField').value =
`Datum/Uhrzeit: ${formattedDateTime}\nAdresse: ${formattedAddress}\nLat.: ${lat}, Lon.: ${lon}`;
})
.catch(error => {
console.log("Fehler beim Abrufen der Adresse:", error);
document.getElementById('inputField').value =
`Datum/Uhrzeit: ${formattedDateTime}\nAdresse konnte nicht geladen werden.\nLat.: ${lat}, Lon.: ${lon}`;
});
}
// Funktion zur Anzeige des Kamerabildes (hintere Kamera bevorzugt)
function initCamera() {
const video = document.getElementById('video');
// Funktion zur Auswahl der Kamera
function getCamera(facingMode) {
return navigator.mediaDevices.getUserMedia({
video: { facingMode: { exact: facingMode } }
});
}
// Versuch, die hintere Kamera zu verwenden
getCamera("environment")
.then(stream => {
video.srcObject = stream;
})
.catch(() => {
// Falls die hintere Kamera nicht verfügbar ist, verwende die vordere Kamera
getCamera("user")
.then(stream => {
video.srcObject = stream;
})
.catch(error => {
console.log("Fehler beim Zugriff auf die Kamera:", error);
alert("Kamera konnte nicht aktiviert werden.");
});
});
}
// Funktionen ausführen
window.onload = () => {
initMap();
initCamera();
}
</script>
</body>
</html>
'
Hier ist eine Übersicht über die Spieletreffs in der Region
Direkter Link zum google-doc: drittereihe.de/index.php?link=spiel