1function isBase64Encoded(str) { 2 try { 3 return btoa(atob(str)) === str; 4 } catch (error) { 5 return false; 6 } 7} 8var initialize=function(DataFilter){ 9 10var MaLat 11var MaLng 12var Firstload = 0; 13var DataFilter = 0; 14var debouncedLoad = function(poi) { 15 setTimeout(filtermap(poi),500); 16 } 17function debounce(func, wait) { 18 let timeout; 19 return function executedFunction(...args) { 20 const later = () => { 21 clearTimeout(timeout); 22 func(...args); 23 }; 24 clearTimeout(timeout); 25 timeout = setTimeout(later, wait); 26 }; 27} 28var Presents = []; 29var myarray = []; 30var markerClusters; 31var MaLat = localStorage.getItem('MaLat'); 32var MaLng = localStorage.getItem('MaLng'); 33var script = document.getElementById('maps'); 34var Datalat = parseFloat(script.getAttribute('data-lat')); 35var Datalng = parseFloat(script.getAttribute('data-lng')); 36var DataidPoi = parseInt(script.getAttribute('data-idpoi')); 37console.log('DataidPoi='+DataidPoi); 38console.log('Datalng='+Datalng); 39console.log('Datalng='+Datalng); 40if (isNaN(MaLat)|| MaLat=== undefined || MaLat===null || MaLng=== undefined || MaLng===null || isNaN(MaLng)){ 41 42 if (MaLat=== undefined || MaLat===null || MaLng=== undefined || MaLng===null) { 43 MaLat='49.360568'; 44 MaLng='-0.856669'; 45 //console.log('lat undefi'); 46 } 47 else if (isNaN(Datalat)){ 48 MaLat=Datalat; 49 MaLng=Datalng; 50 51 } 52 else 53 { 54 if (isBase64Encoded(MaLat) && isBase64Encoded(MaLng)) { 55 MaLat = window.atob(MaLat); 56 MaLng = window.atob(MaLng); 57} else { 58 // Traiter le cas où les valeurs ne sont pas correctement encodées en base64 59 MaLat = '49.360568'; 60 MaLng = '-0.856669'; 61} 62 //console.log('lat decodee'+localStorage.getItem('MaLat')+'->'+window.atob(localStorage.getItem('MaLat'))); 63 } 64}else 65{ 66 MaLat=localStorage.getItem('MaLat'); 67 MaLng=localStorage.getItem('MaLng'); 68 //console.log('eee'+MaLat); 69} 70//console.log('ee'+MaLat); 71//MaLng = localStorage.getItem('MaLng'); 72//console.log('ppaa'+localStorage.getItem('MaLng')); 73if (isNaN(MaLat)|| MaLat=== undefined || MaLat===null) { 74 LatDepart="49.360568"; 75 LngDepart="-0.856669"; 76}else 77{ 78 LatDepart=MaLat; 79 LngDepart=MaLng; 80} 81 82var container = L.DomUtil.get('map-main'); 83 if(container != null){ 84 container._leaflet_id = null; 85 } 86 //var mymap = L.map('map-main', { dragging: 'pc' }).setView([LatDepart,LngDepart], 12); 87 var mymap = L.map('map-main').setView([LatDepart,LngDepart], 14); 88 markerClusters = L.markerClusterGroup(); 89 var markersLayer = new L.LayerGroup(); 90 mymap.zoomControl.remove(); 91 92 var defaultBaseLayer = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png?{foo}', {foo: 'bar', attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'}).addTo(mymap); 93 var satelliteLayer = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', { 94 maxZoom: 19, 95 attribution: 'Imagery © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community' 96 }); 97 98 99 100var lockMap = false; 101document.getElementById('scroll-btn').addEventListener('click', function() { 102 var icon = this.querySelector('i'); 103 104 if (icon.classList.contains('fa-unlock')) { 105 icon.classList.remove('fa-unlock'); 106 icon.classList.add('fa-lock', 'text-danger'); 107 // Action pour verrouiller la carte 108 mymap.dragging.disable(); 109 mymap.scrollWheelZoom.disable(); 110 lockMap = true; 111 } else { 112 icon.classList.remove('fa-lock'); 113 icon.classList.add('fa-unlock'); 114 // Action pour déverrouiller la carte 115 mymap.dragging.enable(); 116 mymap.scrollWheelZoom.enable(); 117 lockMap = false; 118 } 119}); 120document.getElementById('map-main').addEventListener('wheel', function(event) { 121 console.log('zoom'); 122 if (lockMap) { 123 event.preventDefault(); // Empêcher le zoom avec la molette de la souris si la carte est verrouillée 124 } 125}, { passive: false }); 126 127 function onLocationFound(e) { 128 console.log('onLocationFound'); 129 //var radius = e.accuracy / 3; 130 var IconMe = L.icon({ 131 iconUrl: "/images/markers/1-MyPosition.png", 132 iconSize: [60, 78], 133 // iconAnchor: [25, 50], 134 // popupAnchor: [-3, -76], 135 }); 136 137 138 L.marker(e.latlng,{ icon: IconMe }).addTo(mymap) 139 // .bindPopup("Vous êtes ici").openPopup(); 140 141 //L.circle(e.latlng, radius).addTo(mymap); 142 debouncedLoad(DataFilter); 143 MaLat = e.latlng.lat; 144 MaLng = e.latlng.lng; 145 localStorage.setItem('MaLat', window.btoa(MaLat)); 146 localStorage.setItem('MaLng', window.btoa(MaLng)); 147 console.log('MaLng='+MaLat); 148 149 setTimeout(function() { 150 lc.stop(); 151 }, 2500); 152 153 } 154function letsgo(id) { 155 $('html, body').animate({ 156 scrollTop: $("#" + id).offset().top 157 }, 1000); 158} 159 function onLocationError(e) { 160 //alert(e.message); 161 } 162//document.addEventListener("DOMContentLoaded", updateCityOrVillageName); 163var updateCityOrVillageName=function () { 164 var center = mymap.getCenter(); 165 var lat = center.lat; 166 var lng = center.lng; 167 168 // Utilisez un service de géocodage inversé pour obtenir le nom de la ville 169 var url = 'https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=' + lat + '&lon=' + lng; 170 console.log(url); 171 fetch(url) 172 .then(response => response.json()) 173 .then(data => { 174 console.log(data); 175 var city = data.address.city; 176 if (!city) { 177 city = data.address.village; 178 } 179 if (!city) { 180 city = data.address.town; 181 } 182 document.getElementById('centre').textContent = city; 183 }) 184 .catch(error => { 185 console.error('Erreur lors de la récupération des données:', error); 186 }); 187} 188 mymap.on('locationfound', onLocationFound); 189 mymap.on('locationerror', onLocationError); 190 191 //mymap.locate({ setView: true, enableHighAccuracy: true, maxZoom: 20 }); 192 var prevZoom = mymap.getZoom(); 193 194 195 196 mymap.on('moveend', function(e){ 197 198 }); 199 mymap.on('drag', function (e) { 200 //markersLayer.clearLayers(); 201 }); 202 mymap.on('dragend', function (e) {
203 // var nombreDeMarqueurs = Presents.length; 204 // console.log("Nombre de marqueurs présents : " + nombreDeMarqueurs); 205 // var currZoom = mymap.getZoom(); 206 // if (currZoom < 12 && nombreDeMarqueurs > 200) { 207 // alert("Trop de marqueurs, veuillez zoomer."); 208 // return; // Bloquer la fonction debouncedLoad 209 // } 210 debouncedLoad(localStorage.getItem('idfilter')); 211 var centrecarte=e.target.getCenter(); 212 console.log(centrecarte.lat); 213 localStorage.setItem('MaLat', window.btoa(centrecarte.lat)); 214 localStorage.setItem('MaLng', window.btoa(centrecarte.lng)); 215 mymap.dragging.disable(); 216 mymap.scrollWheelZoom.enable(); 217 218 }); 219 mymap.on('zoomend',function(e){ 220 console.log(mymap.getZoom()); 221 var centrecarte=e.target.getCenter(); 222 //console.log(centrecarte.lat); 223 localStorage.setItem('MaLat', window.btoa(centrecarte.lat)); 224 localStorage.setItem('MaLng', window.btoa(centrecarte.lng)); 225 var currZoom = mymap.getZoom(); 226 //var nombreDeMarqueurs = Presents.length; 227 //console.log("Nombre de marqueurs présents : " + nombreDeMarqueur
227s); 228 // if (currZoom < 12 && nombreDeMarqueurs > 200) { 229 // alert("Trop de marqueurs, veuillez zoomer."); 230 // return; // Bloquer la fonction debouncedLoad 231 // } 232 var diff = prevZoom - currZoom; 233 if(diff > 0){ 234 debouncedLoad(localStorage.getItem('idfilter')); 235 } else if(diff < 0) { 236 //console.log('zoomed in'); 237 debouncedLoad(localStorage.getItem('idfilter')); 238 } else { 239 // console.log('no change'); 240 } 241 prevZoom = currZoom; 242 }); 243 244var dragendmap = function(abc) { 245 var url = "/ajax/drag.end.map.php?" + abc; 246 247 // Envoyer une requête Ajax GET 248 $.ajax({ 249 url: url, 250 type: 'GET', 251 success: function(data) { 252 // Injection du contenu récupéré dans l'élément div 253 $("#plmt").html(data); 254 255 }, 256 error: function(xhr, status, error) { 257 // Gestion des erreurs 258 var errorMessage = "Erreur : " + xhr.status + " " + xhr.statusText + " - " + error; 259 $("#plmt").html(errorMessage); 260 } 261 }); 262}; 263 264$('#plmt').on('click', '.seeonmap-btn', function() { 265 event.preventDefault(); 266 // Récupérer les données spécifiques à partir des attributs de données 267 var vid = $(this).data('idpoi'); 268 var vlat = $(this).data('vlat'); 269 var vlng = $(this).data('vlng'); 270 mymap.setView([vlat, vlng], 18); 271 var marker = findMarkerById(vid,Presents); 272 if (marker) { 273 // Ouvrir le popup du marqueur 274 letsgo('map-main'); 275 marker.openPopup(); 276 //console.log("Marqueur trouvé : ", marker); 277 278 } else { 279 // console.error("Le marqueur avec l'ID "+vid+" spécifié n'a pas été trouvé."); 280 } 281}); 282 283var locationBtns = document.querySelectorAll('.location-btn, .fa-location'); 284 285// Assurez-vous qu'il y a au moins un élément correspondant 286if (locationBtns.length > 0) { 287 locationBtns.forEach(function(btn) { 288 btn.addEventListener('click', function() { 289 // console.log('Le bouton a été cliqué'); 290 if (navigator.geolocation) { 291 // Obtenez la position actuelle de l'utilisateur 292 navigator.geolocation.getCurrentPosition(function(position) { 293 var userLatitude = position.coords.latitude; 294 var userLongitude = position.coords.longitude; 295 296 localStorage.setItem('MaLat', window.btoa(userLatitude)); 297 localStorage.setItem('MaLng', window.btoa(userLongitude)); 298 mymap.setView([userLatitude, userLongitude], mymap.getZoom()); 299 var customIcon = L.divIcon({ 300 className: 'custom-marker', 301 html: '<i id="mapMarkerIcon" class="fas fa-map-marker" style="color: #384F95; font-size: 36px;"></i>', 302 iconSize: [36, 36] // Taille de l'icône (en pixels) 303 }); 304 305 var userMarker = L.marker([userLatitude, userLongitude], { 306 icon: customIcon 307 }).addTo(mymap); 308 309 debouncedLoad(localStorage.getItem('idfilter')); 310 311 }, function(error) { 312 // En cas d'erreur lors de la géolocalisation, affichez un message d'erreur 313 console.error('Erreur de géolocalisation : ', error.message); 314 }); 315 } else { 316 // Si la géolocalisation n'est pas prise en charge par le navigateur, affichez un message d'erreur 317 console.error('La géolocalisation n\'est pas prise en charge par ce navigateur.'); 318 } 319 }); 320 }); 321} else { 322 console.error("Aucun élément correspondant trouvé."); 323} 324 325 326function findMarkerById(id) { 327 // Parcourir l'array Presents 328 for (var i = 0; i < Presents.length; i++) { 329 // Convertir les IDs en entiers pour la comparaison 330 var presentId = parseInt(Presents[i]); 331 if (presentId === id) { 332 // Si l'ID spécifié correspond à un ID présent dans Presents, retourner le marqueur correspondant depuis myarray 333 return myarray[i]; 334 335 } 336 } 337 // Si aucun marqueur correspondant n'est trouvé, retourner null 338 return null; 339} 340var cityInput = document.getElementById('city-input'); 341const debouncedGeocodeAddress = debounce(geocodeAddress, 500); // Délai de 500 millisecondes 342 343function geocodeAddress() { 344 var address = document.getElementById('city-input').value; 345 346 // Utilisez la fonction de géocodage fournie par le géocodeur de votre choix 347 // Exemple : Utilisation du géocodeur Nominatim (OpenStreetMap) 348 L.Control.Geocoder.nominatim().geocode(address, function(results) { 349 if (results && results.length > 0) { 350 351 var latlng = results[0].center; 352 L.marker(latlng).addTo(mymap) 353 .bindPopup(address) 354 // .openPopup();
355 mymap.setView(latlng, 15); 356 debouncedLoad(localStorage.getItem('idfilter')); 357 } else { 358 // alert('Adresse non trouvée'); 359 } 360 361 }); 362} 363// Ãvénement input pour détecter lorsque la saisie s'arrête 364cityInput.addEventListener('input', function() { 365 var cityName = cityInput.value.trim(); // Récupérer le nom de la ville et supprimer les espaces inutiles 366 debouncedGeocodeAddress(); 367}); 368var filtermap=function(idfilter) { 369 370 localStorage.setItem('idfilter', idfilter); 371 mymap.scrollWheelZoom.disable(); 372 $('#map-main').css("opacity", 0.3); 373 $("#route").show(); 374 if (idfilter!=0){ 375 Presents = []; 376 markersLayer.clearLayers(); 377 markerClusters.clearLayers(); 378 379 } 380 var bounds = mymap.getBounds(); 381 var cache=Math.random(); 382 bounds = 'ne=(' + window.btoa(bounds._northEast.lat) + ',' + window.btoa(bounds._northEast.lng) + ')&sw=(' + window.btoa(bounds._southWest.lat) + ',' + window.btoa(bounds._southWest.lng) + ')'; 383 384 //console.log("APP ->https://app.kilroytrip.fr/ajax/marker.json.asp?poi=" + idfilter + "&lat="+window.btoa(localStorage.getItem('MaLat'))+"&lng="+window.btoa(localStorage.getItem('MaLng'))+"&" + bounds+"&zoom="+mymap.getZoom()); 385 MyQuery="poi=" + idfilter + "&lat="+localStorage.getItem('MaLat')+"&lng="+localStorage.getItem('MaLng')+"&" + bounds+"&zoom="+mymap.getZoom()+"&lg="+localStorage.getItem('lang')+"&c="+cache 386 //console.log(MyQuery); 387 $.get("/ajax/marker.json.php?poi=" + idfilter + "&lat="+localStorage.getItem('MaLat')+"&lng="+localStorage.getItem('MaLng')+"&" + bounds+"&zoom="+mymap.getZoom()+"&lg="+localStorage.getItem('lang')+"&c="+cache, function (data) { 388 389 $(data).each(function () { 390 391 var iconUrl = this.isEvent === true ? '/images/markers/100.png' : '/images/markers/'+this.Type+'.png'; 392 var myIcon = L.icon({ 393 iconUrl: iconUrl, 394 iconSize: [40, 52], 395 // iconAnchor: [25, 50], 396 // popupAnchor: [-3, -76], 397 }); 398 399 var MarkerId = this.id 400 var NeedPhoto ; 401 var html; 402 403 // Vérifier si c'est un événement 404 if(this.isEvent === true){ 405 // Popup pour les événements 406 var photoSrc = this.Photos || '/images/noimage.jpg'; 407 html = '<div class="map-popup-wrap"><div class="map-popup"><a href="/' + this.url + '" class="listing-img-content fl-wrap"><div class="infobox-status event-status" style="background:#ff6b35;">'+this.Genre+'</div><img src="' + photoSrc + '" alt=""><div class="card-popup-raining map-card-rainting"><span class="map-popup-reviews-count"><i class="fal fa-calendar-star" style="color:#ff6b35;"></i></span></div></a> <div class="listing-content"><div class="listing-content-item fl-wrap"><div class="listing-title fl-wrap"><h4><a href=/'+this.url+'>' + this.title + '</a></h4><div class="map-popup-location-info"><i class="fas fa-map-marker-alt"></i>'+this.city+'</div></div><div class="map-popup-footer"><a href=/' + this.url + ' class="main-link">Details <i class="fal fa-long-arrow-right"></i></a></div></div></div></div></div>'; 408 } 409 else if(this.Photos==''){ 410 411 html = '<div class="map-popup-wrap"><div class="map-popup"><a href="/' + this.url + '" class="listing-img-content fl-wrap"><div class="infobox-status close">'+this.Genre+'</div><img src="/upload/' + this.Photos + '" alt=""><div class="card-popup-raining map-card-rainting" data-staRrating="5"><span class="map-popup-reviews-count"><i class="fas fa-camera fa-10x npht" style="color:#ff0000" data-idpoi="'+this.id+'"></i></span></div></a> <div class="listing-content"><div class="listing-content-item fl-wrap"><div class="listing-title fl-wrap"><h4><a href=/'+this.url+'>' + this.title + '</a></h4><div class="map-popup-location-info"><i class="fas fa-map-marker-alt"></i>'+this.city+'</div></div><div class="map-popup-footer"><a href=' + this.url + ' class="main-link">Details <i class="fal fa-long-arrow-right"></i></a><a href="#" class="infowindow_wishlist-btn" data-idpoi="'+this.id+'"><i class="fal fa-heart"></i></a></div></div></div></div></div> '; 412 }else{ 413 html = '<div class="map-popup-wrap"><div class="map-popup"><a href="/' + this.url + '" class="listing-img-content fl-wrap"><div class="infobox-status close">
413'+this.Genre+'</div><img src="/upload/' + this.Photos + '" alt=""><div class="card-popup-raining map-card-rainting" data-staRrating="5"><span class="map-popup-reviews-count"></i></span></div></a> <div class="listing-content"><div class="listing-content-item fl-wrap"><div class="listing-title fl-wrap"><h4><a href=/'+this.url+'>' + this.title + '</a></h4><div class="map-popup-location-info"><i class="fas fa-map-marker-alt"></i>'+this.city+'</div></div><div class="map-popup-footer"><a href=' + this.url + ' class="main-link">Details <i class="fal fa-long-arrow-right"></i></a><a href="#" class="infowindow_wishlist-btn" data-idpoi="'+this.id+'"><i class="fal fa-heart"></i></a></div></div></div></div></div> '; 414 } 415 if (Presents.indexOf(MarkerId) == -1) { 416 417 var marker = new L.Marker(new L.LatLng(this.Latitude, this.Longitude), { icon: myIcon , id: MarkerId }); 418 marker.bindPopup(html); 419 420 421 markerClusters.addLayer(marker); 422 423 mymap.addLayer(markerClusters); 424 Presents.push(MarkerId); 425 myarray.push(marker); 426 427 428 if (MarkerId==localStorage.getItem('idp')){ 429 //console.log('en mémoire:'+localStorage.getItem('idp')); 430 //console.log('MrkerID:'+MarkerId); 431 mymap.setView(new L.LatLng(this.Latitude, this.Longitude), 18); 432 marker.openPopup(); 433 console.log('l416='+window.atob(localStorage.getItem('MaLat'))); 434 console.log('l416='+window.atob(localStorage.getItem('MaLng'))); 435 }; 436 437 if (!isNaN(Datalat) && !isNaN(Datalng)&& DataidPoi !=0) { 438 mymap.setView(new L.LatLng(Datalat, Datalng), 18); 439 marker.openPopup(); 440 console.log('l422='+window.atob(localStorage.getItem('MaLat'))); 441 console.log('l422='+window.atob(localStorage.getItem('MaLng'))); 442 console.log('l422='+DataidPoi); 443 DataidPoi=0; 444 } 445 446 447 } 448 449 }); 450 localStorage.setItem('idp', ''); 451 452 453 }, 'json') 454 .done(function() { 455 //console.log('done'); 456 console.log(localStorage.getItem('idp')); 457 458 dragendmap(MyQuery); 459 }) 460 .fail(function() { 461 462 }) 463 .always(function() { 464 $("#route").hide(); 465 $('#map-main').css("opacity", 1); 466 mymap.dragging.enable(); 467 mymap.scrollWheelZoom.enable(); 468 469 }); 470 471 472 } 473 474 mymap.whenReady(function() { 475 476 mymap.invalidateSize(); 477 console.log('DataFilter'+DataFilter); 478 filtermap(DataFilter); 479 480 } 481 482 ); 483 // Indice actuel dans le tableau Presents 484var currentIndex = 0; 485 486// Fonction pour afficher l'ID récupéré dans la console 487function afficherId(id) { 488 console.log("ID récupéré :", id); 489 490} 491 492 function toggleLayers() { 493 if (mymap.hasLayer(defaultBaseLayer)) { 494 mymap.removeLayer(defaultBaseLayer); 495 satelliteLayer.addTo(mymap); 496 } else { 497 mymap.removeLayer(satelliteLayer); 498 defaultBaseLayer.addTo(mymap); 499 } 500 } 501 502 // Ajouter un événement de clic sur le bouton de bascule 503 document.getElementById('mapsat').addEventListener('click', toggleLayers); 504 505 506$(".filtre").on("click", function(){ 507 event.preventDefault(); 508 var idType = $(this).data("idtype"); 509 510 if($(this).hasClass("checket-cat")) { 511 // 512 idType = 0; 513 // console.log(idType+ 'je decoche'); 514 $(this).removeClass("checket-cat"); 515 } else { 516 $(".checket-cat").removeClass("checket-cat"); 517 $(this).addClass("checket-cat"); 518 // console.log(idType+' je coche idType'); 519 } 520 521 filtermap(idType); 522}); 523 524 }
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.