php – Cómo pasar una función en bucle de JavaScript a que solo se ejecute una vez al pulsar un botón

Estoy trasteando con un programa en JavaScript que coge tus coordenadas reales y te las muestra en pantalla a la vez que las sube a una base de datos con PHP. Yo no sé mucho de JavaScript y el código está hecho ahora mismo de forma que cada x segundos te da de nuevo tus coordenadas y las sube a la base de datos. Tiene un botón de detener pero no funciona muy bien y tampoco es lo que estoy buscando.

Yo lo que quiero es que al pulsar el botón de Iniciar, te muestre una sola vez tus coordenadas y las suba una sola vez a la base de datos, pero no sé cómo hacerlo. Este es el código JavaScript en cuestión, os agradecería muchísimo que pudierais ayudarme.

    if (!"geolocation" in navigator) {
        return alert("Tu navegador no soporta el acceso a la ubicación. Intenta con otro");
    }

    const RUTA_API = "./insert.php";

    let idWatcher = null;

    const $latitud = document.querySelector("#latitud"),
        $longitud = document.querySelector("#longitud"),
        $btnIniciar = document.querySelector("#btnIniciar"),
        $btnDetener = document.querySelector("#btnDetener"),
        $log = document.querySelector("#log");


    const onUbicacionConcedida = ubicacion => {
        const coordenadas = ubicacion.coords;
        $latitud.innerText = coordenadas.latitude;
        $longitud.innerText = coordenadas.longitude;
        loguear(`${ubicacion.timestamp}: ${coordenadas.latitude},${coordenadas.longitude}`);
        enviarAServidor(ubicacion);
    }

    const enviarAServidor = ubicacion => {
        // Debemos crear otro objeto porque el que nos mandan no se puede codificar
        const otraUbicacion = {
            coordenadas: {
                latitud: ubicacion.coords.latitude,
                longitud: ubicacion.coords.longitude,
            },
            timestamp: ubicacion.timestamp,
        };
        console.log("Enviando: ", otraUbicacion);
        fetch(RUTA_API, {
            method: "POST",
            body: JSON.stringify(otraUbicacion),
        }); // No esperamos el then porque no hacemos nada cuando se termine
    };

    const loguear = texto => {
        $log.innerText += "n" + texto;
    };

    const onErrorDeUbicacion = err => {

        $latitud.innerText = "Error obteniendo ubicación: " + err.message;
        $longitud.innerText = "Error obteniendo ubicación: " + err.message;
        console.log("Error obteniendo ubicación: ", err);
    }

    const detenerWatcher = () => {
        if (idWatcher) {
            navigator.geolocation.clearWatch(idWatcher);
        }
    }

    const opcionesDeSolicitud = {
        enableHighAccuracy: true, // Alta precisión
        maximumAge: 0, // No queremos caché
        timeout: 5000 // Esperar solo 5 segundos
    };


    $btnIniciar.addEventListener("click", () => {
        detenerWatcher();
        idWatcher = navigator.geolocation.watchPosition(onUbicacionConcedida, onErrorDeUbicacion, opcionesDeSolicitud);
    });

    $btnDetener.addEventListener("click", detenerWatcher);

    $latitud.innerText = "Cargando...";
    $longitud.innerText = "Cargando...";


};
document.addEventListener("DOMContentLoaded", funcionInit);```