Ortsteil überOpenstreetmap holen
Beschreibung:
Eine Frontendfunktion die über einen Button ausgelöst werden kann um den Ortsteil zu holen.
Übergeben werden die Felder aus dem Formular wo die Funktion drin ist.
Und als Rückgabe der Ortsteil der dann dem Feld zugewiesen wird.
Frontend Funktionen sind Java Script Funktionen
Die Funktion ist in zwei teile geteilt.
Einmal die httpget Funktion die ein Data Objekt zurück gibt
Und die parse Funktion in der httpget aufgerufen wird
function httpGet(url, onSuccess, onError) {
console.log("Anfrage wird gestartet:", url);
fetch(url, {
method: "GET",
headers: {
"User-Agent": "Rei3-Frontend"
}
})
.then(response => {
if (!response.ok) {
throw new Error(`HTTP-Fehler! Status: ${response.status}`);
}
return response.json();
})
.then(data => {
if (onSuccess) {
onSuccess(data);
}
})
.catch(error => {
console.error("Fehler bei der HTTP-Anfrage:", error);
if (onError) {
onError(error);
}
});
}
function httpGetold(url, onSuccess, onError) {
app.dialog_show("Info","Start");
const xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
app.dialog_show("Info","Open");
xhr.onload = function () {
if (xhr.status >= 200 && xhr.status < 300) {
try {
const response = JSON.parse(xhr.responseText);
if (onSuccess) {
onSuccess(response);
}
} catch (error) {
app.dialog_show("Info","Fehler beim Verarbeiten der HTTP-Antwort:"+ error);
if (onError) {
onError(error);
}
}
} else {
app.dialog_show("Info","HTTP-Fehler:"+xhr.status+" "+xhr.statusText);
if (onError) {
onError(xhr.statusText);
}
}
};
xhr.onerror = function () {
app.dialog_show("Info","Netzwerkfehler bei der HTTP-Anfrage.");
if (onError) {
onError("Netzwerkfehler");
}
};
app.dialog_show("Info","Ende httpget");
xhr.send();
}
function fetchSuburbFromOSM() {
// Werte aus den Formularfeldern abrufen
const street = app.get_field_value({F3: 0 customer_adresses.street});
const postcode = app.get_field_value({F5: 0 customer_adresses.plz});
const city = app.get_field_value({F6: 0 customer_adresses.city});
// Überprüfen, ob die erforderlichen Felder ausgefüllt sind
if (!street || !postcode || !city) {
app.dialog_show("Info", "Bitte füllen Sie alle erforderlichen Felder aus (Straße, Postleitzahl, Ort).");
return;
}
// Anfrage-URL für die Nominatim API erstellen
const query = `${street}, ${postcode}, ${city}`;
const url = `https://nominatim.openstreetmap.org/search?q=${encodeURIComponent(query)}&format=json&addressdetails=1`;
// HTTP-GET-Aufruf
httpGet(
url,
function (data) {
// Erfolg: API-Antwort analysieren
if (data.length > 0) {
const address = data[0].address;
const suburb = address.village || address.hamlet || null;
if (suburb) {
app.set_field_value({F9: 0 customer_adresses.district}, suburb, true);
app.dialog_show("Erfolg", `Ortsteil/Hamlet: ${suburb}`);
} else {
app.dialog_show("Info", "Dieser Ort hat keinen spezifischen Ortsteil.");
app.set_field_value({F9: 0 customer_adresses.district}, "", true);
}
} else {
app.dialog_show("Warnung", "Keine Ergebnisse für die eingegebene Adresse gefunden.");
app.set_field_value({F9: 0 customer_adresses.district}, "", true);
}
},
function (error) {
// Fehler: Meldung ausgeben
app.dialog_show("Fehler", "Die Anfrage an OpenStreetMap ist fehlgeschlagen.");
}
);
}
fetchSuburbFromOSM();