Unwetterwarnungen nach PLZ
Unterstützt die API das Ausgeben von Wetterwarnungen bei Angabe einer PLZ? Ich spiele mit der Idee, einen Telegram Bot zu erstellen, der die Nutzer nach der PLZ fragt und anschließend über Wetterwarnungen informiert.
Ich hab da mal eine Prüfung auf Warnungen an Koordinaten gebastelt.
Das basiert auf den Polygonen aus /gemeinde_warnings_v2_en.json, die Prüfung ob ein Punkt in einem Polygon ist habe ich von hier.
function insidePolygon(point, vs) {
// ray-casting algorithm based on
// https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html/pnpoly.html
var x = point[0], y = point[1];
var inside = false;
for (var i = 0, j = vs.length - 1; i < vs.length; j = i++) {
var xi = vs[i][0], yi = vs[i][1];
var xj = vs[j][0], yj = vs[j][1];
var intersect = ((yi > y) != (yj > y))
&& (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
if (intersect) inside = !inside;
}
return inside;
};
function createPolygonFromDwdData(dwd) {
let result = [];
for (let i=0; i < dwd.length / 2; i++) {
result.push([dwd[2*i], dwd[2*i + 1]]);
}
return result;
}
function checkWarningForLocation(warning, location) {
for(let region of warning.regions) {
let poly = createPolygonFromDwdData(region.polygon);
if (insidePolygon(location, poly))
return true;
}
return false;
}
function getWarningsForLocation(data, location) {
return data.warnings.filter( warning => checkWarningForLocation(warning, location));
}
Wenn man die Daten herunterlädt
curl --compressed -X 'GET' \
'https://s3.eu-central-1.amazonaws.com/app-prod-static.warnwetter.de/v16/gemeinde_warnings_v2_en.json' \
-H 'accept: application/json' > test.json
kann man die Funktionen z.B. wie folgt nutzen:
const fs = require('fs');
function loadJSON(file) {
return new Promise((resolve, reject) => {
fs.readFile(file, (err, data) => {
if (err) reject(err);
let result = JSON.parse(data);
resolve(result);
});
})
}
const data = await loadJSON('./test.json');
const location = [52.518611, 13.408333] //Berlin
for (let warning of getWarningsForLocation(data, location)) {
console.log(`${warning.warnId}`);
console.log(` ${warning.headLine}`);
let description = warning.description.split(/\r?\n/);
console.log(` ${description.join('\r\n ')}`);
}
P.S: Die Koordinaten gibts in Wikipedia bei Artikeln zu Orten ganz oben rechts in sehr klein. Klickt man darauf, bekommt man auf der nächsten Seite auch die Dezimaldarstellung.
Vielen Dank für deinen Input! Das hilft mir sehr. 👍