trato de extraer la coordenada del usuario con el complemento de control de localización para enviarlo a través de ajax
var startMarker; var lc = L.control.locate({ position: "topright", layer: startMarker, drawCircle: false, showPopup: false, markerClass: L.marker, }) .addTo(mymap); cuando apareció el marcador, hago clic para enviar la coordenada de la capa startMarker a través de ajax con este código
$("button").on("click", (e) => { e.preventDefault(); if (startMarker == null) { alert(`startpoint not defined`); } else { $.ajax({ type: "POST", data: { startlat: startMarker.getLatLng().lat, startlng: startMarker.getLatLng().lng, }, url: "php/find_nearest_path.php", dataType: "json", success: dosomething, error: function () { alert("failed getting respond from server"); }, }); } }); pero el error que recibo es alert(`startpoint not defined`); alguien ahora la forma correcta de obtener la coordenada?
Cuando pasa su variable startMarker a la opción de layer de L.control.locate (desde el complemento leaflet-locatecontrol ), aún no está undefined .
Por lo tanto el plugin se comporta como si no le hubieras pasado ningún valor a esa opción. Y su comportamiento predeterminado en ese caso es crear su propio grupo de capas interno.
Como parece que necesita verificar el marcador creado una vez que esté disponible, simplemente necesita asignar un grupo de capas a su variable antes de pasarlo a la opción:
var startMarker = L.layerGroup(); var lc = L.control.locate({ layer: startMarker, }) .addTo(mymap);Luego, en su condición, compruebe si ese grupo de capas tiene un marcador secundario, en lugar de buscar una asignación:
var locationLayers = startMarker.getLayers(); if (locationLayers.length === 0) { alert(`startpoint not defined`); } else { // Last position should be represented by one of the last layers // (there may be several layers on same position, should you // have enabled circle and/or compass) var positionMarker = locationLayers[locationLayers.length - 1]; // Do something with positionMarker.getLatLng()... }Dicho esto, como señaló implícitamente Ivan en los comentarios de la pregunta, dado que parece que necesita el Marcador creado solo para obtener las coordenadas de ubicación, podría obtenerlo del evento locationfound en su lugar. De esa forma, no necesitarías recuperar ningún marcador.