Direkt zum Hauptinhalt

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();