forked from orson/bachemap
verbose errors for geolocation
This commit is contained in:
parent
36675072a8
commit
54ad0dcc17
@ -55,32 +55,70 @@
|
||||
{% endfor %}
|
||||
map.addLayer(markerCluster);
|
||||
|
||||
// Improved geolocation using direct browser API
|
||||
function getLocation() {
|
||||
if (navigator.geolocation) {
|
||||
navigator.geolocation.getCurrentPosition(
|
||||
onLocationFound,
|
||||
onLocationError,
|
||||
{
|
||||
enableHighAccuracy: true,
|
||||
timeout: 10000,
|
||||
maximumAge: 0
|
||||
}
|
||||
);
|
||||
} else {
|
||||
alert("La geolocalización no está soportada en este navegador.");
|
||||
map.setView([20.57, -100.38], 13); // Default to Querétaro's coordinates
|
||||
}
|
||||
}
|
||||
|
||||
// Geolocation function
|
||||
function onLocationFound(e) {
|
||||
var radius = e.accuracy / 2; // Accuracy of the location
|
||||
function onLocationFound(position) {
|
||||
var lat = position.coords.latitude;
|
||||
var lng = position.coords.longitude;
|
||||
var latlng = L.latLng(lat, lng);
|
||||
var radius = position.coords.accuracy / 2; // Accuracy of the location
|
||||
|
||||
// Add a pin (marker) at the user's location
|
||||
user_marker = L.marker(e.latlng).addTo(map)
|
||||
user_marker = L.marker(latlng).addTo(map)
|
||||
.bindPopup("Te detectamos en un radio de " + parseInt(radius) + " metros de este punto").openPopup();
|
||||
document.getElementById('lat').value = e.latlng.lat;
|
||||
document.getElementById('lng').value = e.latlng.lng;
|
||||
|
||||
if (document.getElementById('lat') && document.getElementById('lng')) {
|
||||
document.getElementById('lat').value = lat;
|
||||
document.getElementById('lng').value = lng;
|
||||
}
|
||||
|
||||
// Add a circle around the user's location
|
||||
user_radial = L.circle(e.latlng, radius).addTo(map);
|
||||
user_radial = L.circle(latlng, radius).addTo(map);
|
||||
|
||||
// Center the map on the user's location
|
||||
map.setView(e.latlng, 18); // Adjust zoom level as needed
|
||||
map.setView(latlng, 18); // Adjust zoom level as needed
|
||||
}
|
||||
|
||||
// Error handling for geolocation
|
||||
function onLocationError(e) {
|
||||
alert(e.message);
|
||||
function onLocationError(error) {
|
||||
var errorMsg;
|
||||
switch(error.code) {
|
||||
case error.PERMISSION_DENIED:
|
||||
errorMsg = "Usuario denegó la solicitud de geolocalización.";
|
||||
break;
|
||||
case error.POSITION_UNAVAILABLE:
|
||||
errorMsg = "La información de ubicación no está disponible.";
|
||||
break;
|
||||
case error.TIMEOUT:
|
||||
errorMsg = "Se agotó el tiempo de espera para la solicitud de ubicación.";
|
||||
break;
|
||||
default:
|
||||
errorMsg = "Ocurrió un error desconocido al obtener la ubicación.";
|
||||
}
|
||||
console.error("Error de geolocalización:", errorMsg);
|
||||
alert(errorMsg);
|
||||
map.setView([20.57, -100.38], 13); // Default to Querétaro's coordinates
|
||||
}
|
||||
|
||||
// Use Leaflet's built-in location detection
|
||||
map.on('locationfound', onLocationFound);
|
||||
map.on('locationerror', onLocationError);
|
||||
|
||||
// Start the location detection
|
||||
map.locate({setView: true, zoom: 16});
|
||||
// Start location detection
|
||||
getLocation();
|
||||
map.on('click', function(e) {
|
||||
var latlng = e.latlng;
|
||||
document.getElementById('lat').value = latlng.lat;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user