diff --git a/functions.php b/functions.php index 66c5a13..5c2d07b 100644 --- a/functions.php +++ b/functions.php @@ -418,6 +418,8 @@ function data_for_lightbox($data) { global $chemin; //$query4 = "INSERT OR IGNORE INTO photos (filename, filesize, dateoriginal, lens, speed, correctexpo, iso, usercomment, comment, model, metering, flash, focal, program, wb, mode, width, height, html, aperture, software, lat, long, alt, keywords, title, creator, city, department, code, country, copyright, legende); +/* +*/ $filename = $data['filename']; $title_thumb = pathinfo($filename, PATHINFO_FILENAME); @@ -469,6 +471,7 @@ function data_for_lightbox($data) { if (!empty($gps)) { $map = '' . " \u{30FB} \u{2693} " . ''; + $map = htmlspecialchars($map, ENT_QUOTES); } else { $map = ''; @@ -499,6 +502,7 @@ function data_for_lightbox($data) { $description .= "" . gettext("Speed") . "" . $speed . ""; $description .= "" . gettext("Aperture") . "" . $aperture . ""; $description .= "" . gettext("Iso") . "" . $iso . ""; + $description .= "" . gettext("Model") . "". $model . ""; $description .= "" . gettext("Lens") . "" . $objectif . ""; $description .= "" . gettext("Focal") . "" . $focal . ""; @@ -517,11 +521,14 @@ function data_for_lightbox($data) { (!empty($city)) && $description .= "" . gettext("City") . "" . $city . ""; (!empty($department)) && $description .= "" . gettext("Department") . "" . $department . ""; $code = (!empty($code)) ? " (" . $code . ")" : ""; + (!empty($country)) && $description .= "" . gettext("Country") . "" . $country . $code . ""; (!empty($map)) && $description .= "GPS" . $map . ""; + ((!empty($comment)) || (!empty($usercomment))) && $description .= "  "; (!empty($comment)) && $description .= "" . gettext("Comment") . "" . $comment . ""; (!empty($usercomment)) && $description .= "" . gettext("User comment") . "" . $usercomment . ""; +/**/ $description .= ""; $lightbox = array(); @@ -534,10 +541,16 @@ function data_for_lightbox($data) { $lightbox['keywords'] = $keywords; $lightbox['creator'] = $creator; $lightbox['gps'] = $gps; + $lightbox['lat'] = $latitude; + $lightbox['long'] = $longitude; $lightbox['description'] = $description; $lightbox['width'] = $width; $lightbox['height'] = $height; + +//_pr($lightbox); + +//$lightbox = array(); /* Array ( diff --git a/maps/api/liste.php b/maps/api/liste.php new file mode 100644 index 0000000..edd056d --- /dev/null +++ b/maps/api/liste.php @@ -0,0 +1,62 @@ + 'Method unauthorized']); + exit; +} + +include '../../i18n_setup.php'; + +$base = '../../db_photo.sqlite3'; +$chemin = 'photos/img/'; +$chemin_thumb = str_replace("img", "thumb", $chemin); +include '../../functions.php'; + + +try { + $conn4 = new PDO("sqlite:$base"); + $query4 = "SELECT filename, filesize, dateoriginal, lens, speed, correctexpo, iso, usercomment, comment, model, metering, flash, focal, program, wb, mode, width, height, html, aperture, software, lat, long, alt, keywords, title, creator, city, department, code, country, copyright, legende FROM photos WHERE lat != '' ORDER BY dateoriginal DESC"; + #$query4 = "SELECT filename, filesize, dateoriginal, lens, speed, correctexpo, iso, model, metering, flash, focal, program, wb, mode, width, height, aperture, software, lat, long, alt, keywords, title, creator, city, department, code, country, copyright, legende FROM photos WHERE lat != '' ORDER BY dateoriginal DESC"; + + $stmt = $conn4->prepare($query4); + $stmt->execute(); +/* + $result = $stmt->fetchAll(PDO::FETCH_ASSOC); + //$rowcount = count($result); +*/ + $for_map=array(); + + while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { + + $f=array(); + + $f = data_for_lightbox($row); + + //debug_to_console($f['description']); + $for_map[]=$f; + + } + + $conn4 = null; + } + catch(PDOException $e) { + echo $e->getMessage(); + } + + //_pr($result); + //_pr($for_map); +/**/ + +//_pr($for_map['description']); +//debug_to_console($for_map['description']); + +//echo json_encode($result); +echo json_encode($for_map); \ No newline at end of file diff --git a/maps/css/MarkerCluster.Default.css b/maps/css/MarkerCluster.Default.css new file mode 100644 index 0000000..bbc8c9f --- /dev/null +++ b/maps/css/MarkerCluster.Default.css @@ -0,0 +1,60 @@ +.marker-cluster-small { + background-color: rgba(181, 226, 140, 0.6); + } +.marker-cluster-small div { + background-color: rgba(110, 204, 57, 0.6); + } + +.marker-cluster-medium { + background-color: rgba(241, 211, 87, 0.6); + } +.marker-cluster-medium div { + background-color: rgba(240, 194, 12, 0.6); + } + +.marker-cluster-large { + background-color: rgba(253, 156, 115, 0.6); + } +.marker-cluster-large div { + background-color: rgba(241, 128, 23, 0.6); + } + + /* IE 6-8 fallback colors */ +.leaflet-oldie .marker-cluster-small { + background-color: rgb(181, 226, 140); + } +.leaflet-oldie .marker-cluster-small div { + background-color: rgb(110, 204, 57); + } + +.leaflet-oldie .marker-cluster-medium { + background-color: rgb(241, 211, 87); + } +.leaflet-oldie .marker-cluster-medium div { + background-color: rgb(240, 194, 12); + } + +.leaflet-oldie .marker-cluster-large { + background-color: rgb(253, 156, 115); + } +.leaflet-oldie .marker-cluster-large div { + background-color: rgb(241, 128, 23); +} + +.marker-cluster { + background-clip: padding-box; + border-radius: 20px; + } +.marker-cluster div { + width: 30px; + height: 30px; + margin-left: 5px; + margin-top: 5px; + + text-align: center; + border-radius: 15px; + font: 12px "Helvetica Neue", Arial, Helvetica, sans-serif; + } +.marker-cluster span { + line-height: 30px; + } \ No newline at end of file diff --git a/maps/css/MarkerCluster.css b/maps/css/MarkerCluster.css new file mode 100644 index 0000000..c60d71b --- /dev/null +++ b/maps/css/MarkerCluster.css @@ -0,0 +1,14 @@ +.leaflet-cluster-anim .leaflet-marker-icon, .leaflet-cluster-anim .leaflet-marker-shadow { + -webkit-transition: -webkit-transform 0.3s ease-out, opacity 0.3s ease-in; + -moz-transition: -moz-transform 0.3s ease-out, opacity 0.3s ease-in; + -o-transition: -o-transform 0.3s ease-out, opacity 0.3s ease-in; + transition: transform 0.3s ease-out, opacity 0.3s ease-in; +} + +.leaflet-cluster-spider-leg { + /* stroke-dashoffset (duration and function) should match with leaflet-marker-icon transform in order to track it exactly */ + -webkit-transition: -webkit-stroke-dashoffset 0.3s ease-out, -webkit-stroke-opacity 0.3s ease-in; + -moz-transition: -moz-stroke-dashoffset 0.3s ease-out, -moz-stroke-opacity 0.3s ease-in; + -o-transition: -o-stroke-dashoffset 0.3s ease-out, -o-stroke-opacity 0.3s ease-in; + transition: stroke-dashoffset 0.3s ease-out, stroke-opacity 0.3s ease-in; +} diff --git a/maps/css/images/layers-2x.png b/maps/css/images/layers-2x.png new file mode 100644 index 0000000..200c333 Binary files /dev/null and b/maps/css/images/layers-2x.png differ diff --git a/maps/css/images/layers.png b/maps/css/images/layers.png new file mode 100644 index 0000000..1a72e57 Binary files /dev/null and b/maps/css/images/layers.png differ diff --git a/maps/css/images/marker-icon-2x.png b/maps/css/images/marker-icon-2x.png new file mode 100644 index 0000000..88f9e50 Binary files /dev/null and b/maps/css/images/marker-icon-2x.png differ diff --git a/maps/css/images/marker-icon.png b/maps/css/images/marker-icon.png new file mode 100644 index 0000000..950edf2 Binary files /dev/null and b/maps/css/images/marker-icon.png differ diff --git a/maps/css/images/marker-shadow.png b/maps/css/images/marker-shadow.png new file mode 100644 index 0000000..9fd2979 Binary files /dev/null and b/maps/css/images/marker-shadow.png differ diff --git a/maps/css/leaflet.css b/maps/css/leaflet.css new file mode 100644 index 0000000..2961b76 --- /dev/null +++ b/maps/css/leaflet.css @@ -0,0 +1,661 @@ +/* required styles */ + +.leaflet-pane, +.leaflet-tile, +.leaflet-marker-icon, +.leaflet-marker-shadow, +.leaflet-tile-container, +.leaflet-pane > svg, +.leaflet-pane > canvas, +.leaflet-zoom-box, +.leaflet-image-layer, +.leaflet-layer { + position: absolute; + left: 0; + top: 0; + } +.leaflet-container { + overflow: hidden; + } +.leaflet-tile, +.leaflet-marker-icon, +.leaflet-marker-shadow { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + -webkit-user-drag: none; + } +/* Prevents IE11 from highlighting tiles in blue */ +.leaflet-tile::selection { + background: transparent; +} +/* Safari renders non-retina tile on retina better with this, but Chrome is worse */ +.leaflet-safari .leaflet-tile { + image-rendering: -webkit-optimize-contrast; + } +/* hack that prevents hw layers "stretching" when loading new tiles */ +.leaflet-safari .leaflet-tile-container { + width: 1600px; + height: 1600px; + -webkit-transform-origin: 0 0; + } +.leaflet-marker-icon, +.leaflet-marker-shadow { + display: block; + } +/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */ +/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */ +.leaflet-container .leaflet-overlay-pane svg { + max-width: none !important; + max-height: none !important; + } +.leaflet-container .leaflet-marker-pane img, +.leaflet-container .leaflet-shadow-pane img, +.leaflet-container .leaflet-tile-pane img, +.leaflet-container img.leaflet-image-layer, +.leaflet-container .leaflet-tile { + max-width: none !important; + max-height: none !important; + width: auto; + padding: 0; + } + +.leaflet-container img.leaflet-tile { + /* See: https://bugs.chromium.org/p/chromium/issues/detail?id=600120 */ + mix-blend-mode: plus-lighter; +} + +.leaflet-container.leaflet-touch-zoom { + -ms-touch-action: pan-x pan-y; + touch-action: pan-x pan-y; + } +.leaflet-container.leaflet-touch-drag { + -ms-touch-action: pinch-zoom; + /* Fallback for FF which doesn't support pinch-zoom */ + touch-action: none; + touch-action: pinch-zoom; +} +.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom { + -ms-touch-action: none; + touch-action: none; +} +.leaflet-container { + -webkit-tap-highlight-color: transparent; +} +.leaflet-container a { + -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4); +} +.leaflet-tile { + filter: inherit; + visibility: hidden; + } +.leaflet-tile-loaded { + visibility: inherit; + } +.leaflet-zoom-box { + width: 0; + height: 0; + -moz-box-sizing: border-box; + box-sizing: border-box; + z-index: 800; + } +/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ +.leaflet-overlay-pane svg { + -moz-user-select: none; + } + +.leaflet-pane { z-index: 400; } + +.leaflet-tile-pane { z-index: 200; } +.leaflet-overlay-pane { z-index: 400; } +.leaflet-shadow-pane { z-index: 500; } +.leaflet-marker-pane { z-index: 600; } +.leaflet-tooltip-pane { z-index: 650; } +.leaflet-popup-pane { z-index: 700; } + +.leaflet-map-pane canvas { z-index: 100; } +.leaflet-map-pane svg { z-index: 200; } + +.leaflet-vml-shape { + width: 1px; + height: 1px; + } +.lvml { + behavior: url(#default#VML); + display: inline-block; + position: absolute; + } + + +/* control positioning */ + +.leaflet-control { + position: relative; + z-index: 800; + pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ + pointer-events: auto; + } +.leaflet-top, +.leaflet-bottom { + position: absolute; + z-index: 1000; + pointer-events: none; + } +.leaflet-top { + top: 0; + } +.leaflet-right { + right: 0; + } +.leaflet-bottom { + bottom: 0; + } +.leaflet-left { + left: 0; + } +.leaflet-control { + float: left; + clear: both; + } +.leaflet-right .leaflet-control { + float: right; + } +.leaflet-top .leaflet-control { + margin-top: 10px; + } +.leaflet-bottom .leaflet-control { + margin-bottom: 10px; + } +.leaflet-left .leaflet-control { + margin-left: 10px; + } +.leaflet-right .leaflet-control { + margin-right: 10px; + } + + +/* zoom and fade animations */ + +.leaflet-fade-anim .leaflet-popup { + opacity: 0; + -webkit-transition: opacity 0.2s linear; + -moz-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; + } +.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { + opacity: 1; + } +.leaflet-zoom-animated { + -webkit-transform-origin: 0 0; + -ms-transform-origin: 0 0; + transform-origin: 0 0; + } +svg.leaflet-zoom-animated { + will-change: transform; +} + +.leaflet-zoom-anim .leaflet-zoom-animated { + -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); + -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); + transition: transform 0.25s cubic-bezier(0,0,0.25,1); + } +.leaflet-zoom-anim .leaflet-tile, +.leaflet-pan-anim .leaflet-tile { + -webkit-transition: none; + -moz-transition: none; + transition: none; + } + +.leaflet-zoom-anim .leaflet-zoom-hide { + visibility: hidden; + } + + +/* cursors */ + +.leaflet-interactive { + cursor: pointer; + } +.leaflet-grab { + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; + } +.leaflet-crosshair, +.leaflet-crosshair .leaflet-interactive { + cursor: crosshair; + } +.leaflet-popup-pane, +.leaflet-control { + cursor: auto; + } +.leaflet-dragging .leaflet-grab, +.leaflet-dragging .leaflet-grab .leaflet-interactive, +.leaflet-dragging .leaflet-marker-draggable { + cursor: move; + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; + } + +/* marker & overlays interactivity */ +.leaflet-marker-icon, +.leaflet-marker-shadow, +.leaflet-image-layer, +.leaflet-pane > svg path, +.leaflet-tile-container { + pointer-events: none; + } + +.leaflet-marker-icon.leaflet-interactive, +.leaflet-image-layer.leaflet-interactive, +.leaflet-pane > svg path.leaflet-interactive, +svg.leaflet-image-layer.leaflet-interactive path { + pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ + pointer-events: auto; + } + +/* visual tweaks */ + +.leaflet-container { + background: #ddd; + outline-offset: 1px; + } +.leaflet-container a { + color: #0078A8; + } +.leaflet-zoom-box { + border: 2px dotted #38f; + background: rgba(255,255,255,0.5); + } + + +/* general typography */ +.leaflet-container { + font-family: "Helvetica Neue", Arial, Helvetica, sans-serif; + font-size: 12px; + font-size: 0.75rem; + line-height: 1.5; + } + + +/* general toolbar styles */ + +.leaflet-bar { + box-shadow: 0 1px 5px rgba(0,0,0,0.65); + border-radius: 4px; + } +.leaflet-bar a { + background-color: #fff; + border-bottom: 1px solid #ccc; + width: 26px; + height: 26px; + line-height: 26px; + display: block; + text-align: center; + text-decoration: none; + color: black; + } +.leaflet-bar a, +.leaflet-control-layers-toggle { + background-position: 50% 50%; + background-repeat: no-repeat; + display: block; + } +.leaflet-bar a:hover, +.leaflet-bar a:focus { + background-color: #f4f4f4; + } +.leaflet-bar a:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + } +.leaflet-bar a:last-child { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom: none; + } +.leaflet-bar a.leaflet-disabled { + cursor: default; + background-color: #f4f4f4; + color: #bbb; + } + +.leaflet-touch .leaflet-bar a { + width: 30px; + height: 30px; + line-height: 30px; + } +.leaflet-touch .leaflet-bar a:first-child { + border-top-left-radius: 2px; + border-top-right-radius: 2px; + } +.leaflet-touch .leaflet-bar a:last-child { + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; + } + +/* zoom control */ + +.leaflet-control-zoom-in, +.leaflet-control-zoom-out { + font: bold 18px 'Lucida Console', Monaco, monospace; + text-indent: 1px; + } + +.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out { + font-size: 22px; + } + + +/* layers control */ + +.leaflet-control-layers { + box-shadow: 0 1px 5px rgba(0,0,0,0.4); + background: #fff; + border-radius: 5px; + } +.leaflet-control-layers-toggle { + background-image: url(images/layers.png); + width: 36px; + height: 36px; + } +.leaflet-retina .leaflet-control-layers-toggle { + background-image: url(images/layers-2x.png); + background-size: 26px 26px; + } +.leaflet-touch .leaflet-control-layers-toggle { + width: 44px; + height: 44px; + } +.leaflet-control-layers .leaflet-control-layers-list, +.leaflet-control-layers-expanded .leaflet-control-layers-toggle { + display: none; + } +.leaflet-control-layers-expanded .leaflet-control-layers-list { + display: block; + position: relative; + } +.leaflet-control-layers-expanded { + padding: 6px 10px 6px 6px; + color: #333; + background: #fff; + } +.leaflet-control-layers-scrollbar { + overflow-y: scroll; + overflow-x: hidden; + padding-right: 5px; + } +.leaflet-control-layers-selector { + margin-top: 2px; + position: relative; + top: 1px; + } +.leaflet-control-layers label { + display: block; + font-size: 13px; + font-size: 1.08333em; + } +.leaflet-control-layers-separator { + height: 0; + border-top: 1px solid #ddd; + margin: 5px -10px 5px -6px; + } + +/* Default icon URLs */ +.leaflet-default-icon-path { /* used only in path-guessing heuristic, see L.Icon.Default */ + background-image: url(images/marker-icon.png); + } + + +/* attribution and scale controls */ + +.leaflet-container .leaflet-control-attribution { + background: #fff; + background: rgba(255, 255, 255, 0.8); + margin: 0; + } +.leaflet-control-attribution, +.leaflet-control-scale-line { + padding: 0 5px; + color: #333; + line-height: 1.4; + } +.leaflet-control-attribution a { + text-decoration: none; + } +.leaflet-control-attribution a:hover, +.leaflet-control-attribution a:focus { + text-decoration: underline; + } +.leaflet-attribution-flag { + display: inline !important; + vertical-align: baseline !important; + width: 1em; + height: 0.6669em; + } +.leaflet-left .leaflet-control-scale { + margin-left: 5px; + } +.leaflet-bottom .leaflet-control-scale { + margin-bottom: 5px; + } +.leaflet-control-scale-line { + border: 2px solid #777; + border-top: none; + line-height: 1.1; + padding: 2px 5px 1px; + white-space: nowrap; + -moz-box-sizing: border-box; + box-sizing: border-box; + background: rgba(255, 255, 255, 0.8); + text-shadow: 1px 1px #fff; + } +.leaflet-control-scale-line:not(:first-child) { + border-top: 2px solid #777; + border-bottom: none; + margin-top: -2px; + } +.leaflet-control-scale-line:not(:first-child):not(:last-child) { + border-bottom: 2px solid #777; + } + +.leaflet-touch .leaflet-control-attribution, +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + box-shadow: none; + } +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + border: 2px solid rgba(0,0,0,0.2); + background-clip: padding-box; + } + + +/* popup */ + +.leaflet-popup { + position: absolute; + text-align: center; + margin-bottom: 20px; + } +.leaflet-popup-content-wrapper { + padding: 1px; + text-align: left; + border-radius: 12px; + } +.leaflet-popup-content { + margin: 13px 24px 13px 20px; + line-height: 1.3; + font-size: 13px; + font-size: 1.08333em; + min-height: 1px; + } +.leaflet-popup-content p { + margin: 17px 0; + margin: 1.3em 0; + } +.leaflet-popup-tip-container { + width: 40px; + height: 20px; + position: absolute; + left: 50%; + margin-top: -1px; + margin-left: -20px; + overflow: hidden; + pointer-events: none; + } +.leaflet-popup-tip { + width: 17px; + height: 17px; + padding: 1px; + + margin: -10px auto 0; + pointer-events: auto; + + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + } +.leaflet-popup-content-wrapper, +.leaflet-popup-tip { + background: white; + color: #333; + box-shadow: 0 3px 14px rgba(0,0,0,0.4); + } +.leaflet-container a.leaflet-popup-close-button { + position: absolute; + top: 0; + right: 0; + border: none; + text-align: center; + width: 24px; + height: 24px; + font: 16px/24px Tahoma, Verdana, sans-serif; + color: #757575; + text-decoration: none; + background: transparent; + } +.leaflet-container a.leaflet-popup-close-button:hover, +.leaflet-container a.leaflet-popup-close-button:focus { + color: #585858; + } +.leaflet-popup-scrolled { + overflow: auto; + } + +.leaflet-oldie .leaflet-popup-content-wrapper { + -ms-zoom: 1; + } +.leaflet-oldie .leaflet-popup-tip { + width: 24px; + margin: 0 auto; + + -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"; + filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678); + } + +.leaflet-oldie .leaflet-control-zoom, +.leaflet-oldie .leaflet-control-layers, +.leaflet-oldie .leaflet-popup-content-wrapper, +.leaflet-oldie .leaflet-popup-tip { + border: 1px solid #999; + } + + +/* div icon */ + +.leaflet-div-icon { + background: #fff; + border: 1px solid #666; + } + + +/* Tooltip */ +/* Base styles for the element that has a tooltip */ +.leaflet-tooltip { + position: absolute; + padding: 6px; + background-color: #fff; + border: 1px solid #fff; + border-radius: 3px; + color: #222; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + pointer-events: none; + box-shadow: 0 1px 3px rgba(0,0,0,0.4); + } +.leaflet-tooltip.leaflet-interactive { + cursor: pointer; + pointer-events: auto; + } +.leaflet-tooltip-top:before, +.leaflet-tooltip-bottom:before, +.leaflet-tooltip-left:before, +.leaflet-tooltip-right:before { + position: absolute; + pointer-events: none; + border: 6px solid transparent; + background: transparent; + content: ""; + } + +/* Directions */ + +.leaflet-tooltip-bottom { + margin-top: 6px; +} +.leaflet-tooltip-top { + margin-top: -6px; +} +.leaflet-tooltip-bottom:before, +.leaflet-tooltip-top:before { + left: 50%; + margin-left: -6px; + } +.leaflet-tooltip-top:before { + bottom: 0; + margin-bottom: -12px; + border-top-color: #fff; + } +.leaflet-tooltip-bottom:before { + top: 0; + margin-top: -12px; + margin-left: -6px; + border-bottom-color: #fff; + } +.leaflet-tooltip-left { + margin-left: -6px; +} +.leaflet-tooltip-right { + margin-left: 6px; +} +.leaflet-tooltip-left:before, +.leaflet-tooltip-right:before { + top: 50%; + margin-top: -6px; + } +.leaflet-tooltip-left:before { + right: 0; + margin-right: -12px; + border-left-color: #fff; + } +.leaflet-tooltip-right:before { + left: 0; + margin-left: -12px; + border-right-color: #fff; + } + +/* Printing */ + +@media print { + /* Prevent printers from removing background-images of controls. */ + .leaflet-control { + -webkit-print-color-adjust: exact; + print-color-adjust: exact; + } + } diff --git a/maps/css/styles.css b/maps/css/styles.css new file mode 100644 index 0000000..87b7425 --- /dev/null +++ b/maps/css/styles.css @@ -0,0 +1,19 @@ +#map{ + height: 600px; +} + +.popup{ + display: flex; + align-items: center; + gap: 10px +} + +.popup h2{ + text-align: center; +} + +.popup img{ + display: block; + margin-left: auto; + margin-right: auto; +} \ No newline at end of file diff --git a/maps/images/pin.png b/maps/images/pin.png new file mode 100644 index 0000000..bb64db8 Binary files /dev/null and b/maps/images/pin.png differ diff --git a/maps/images/poi.png b/maps/images/poi.png new file mode 100644 index 0000000..0e9dffe Binary files /dev/null and b/maps/images/poi.png differ diff --git a/maps/images/poi2.png b/maps/images/poi2.png new file mode 100644 index 0000000..80fc43f Binary files /dev/null and b/maps/images/poi2.png differ diff --git a/maps/index.php b/maps/index.php new file mode 100644 index 0000000..4767e0e --- /dev/null +++ b/maps/index.php @@ -0,0 +1,120 @@ + + + + + + + + + <?php echo gettext("Maps"); ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +
+ +
+ + + + + +

© 2013- sur-le-sentier.fr

+ + + + + + \ No newline at end of file diff --git a/maps/js/Control.FullScreen.css b/maps/js/Control.FullScreen.css new file mode 100644 index 0000000..45ec5b3 --- /dev/null +++ b/maps/js/Control.FullScreen.css @@ -0,0 +1,39 @@ +.fullscreen-icon { + background-image: url('icon-fullscreen.svg'); + background-size: 26px 52px; +} + +.fullscreen-icon.leaflet-fullscreen-on { + background-position: 0 -26px; +} + +.leaflet-touch .fullscreen-icon { + background-position: 2px 2px; +} + +.leaflet-touch .fullscreen-icon.leaflet-fullscreen-on { + background-position: 2px -24px; +} + +/* Safari still needs this vendor-prefix: https://caniuse.com/mdn-css_selectors_fullscreen */ +/* stylelint-disable-next-line selector-no-vendor-prefix */ +.leaflet-container:-webkit-full-screen { + width: 100% !important; + height: 100% !important; + z-index: 99999; +} + +.leaflet-container:fullscreen { + width: 100% !important; + height: 100% !important; + z-index: 99999; +} + +.leaflet-pseudo-fullscreen { + position: fixed !important; + width: 100% !important; + height: 100% !important; + top: 0 !important; + left: 0 !important; + z-index: 99999; +} diff --git a/maps/js/Control.FullScreen.js b/maps/js/Control.FullScreen.js new file mode 100644 index 0000000..08a29ea --- /dev/null +++ b/maps/js/Control.FullScreen.js @@ -0,0 +1,284 @@ +/* + * leaflet.fullscreen + * (c) Bruno B.; MIT License + * Uses fragments from the package 'screenfull' + */ +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // define an AMD module that requires 'leaflet' + // and resolve to an object containing leaflet + define('leafletFullScreen', ['leaflet'], factory); + } else if (typeof module === 'object' && module.exports) { + // define a CommonJS module that requires 'leaflet' + module.exports = factory(require('leaflet')); + } else { + // Assume 'leaflet' are loaded into global variable already + factory(root.L); + } +}(typeof self !== 'undefined' + ? self + : this, (leaflet) => { + 'use strict'; + + if (typeof document === 'undefined') { + console.warn('"window.document" is undefined; leaflet.fullscreen requires this object to access the DOM'); + return false; + } + + const nativeAPI = (() => { + const methodMap = [ + // Standard + [ + 'requestFullscreen', + 'exitFullscreen', + 'fullscreenElement', + 'fullscreenEnabled', + 'fullscreenchange', + 'fullscreenerror' + ], + // New WebKit + [ + 'webkitRequestFullscreen', + 'webkitExitFullscreen', + 'webkitFullscreenElement', + 'webkitFullscreenEnabled', + 'webkitfullscreenchange', + 'webkitfullscreenerror' + ] + ]; + + const baseList = methodMap[0]; + const ret = {}; + + for (const methodList of methodMap) { + if (methodList[1] in document) { + for (let i = 0; i < methodList.length; i++) { + ret[baseList[i]] = methodList[i]; + } + return ret; + } + } + + return false; + })(); + + const eventNameMap = { + change: nativeAPI.fullscreenchange, + error: nativeAPI.fullscreenerror, + }; + + const fullscreenAPI = { + request(element, options) { + return new Promise((resolve, reject) => { + const onFullScreenEntered = function() { + this.off('change', onFullScreenEntered); + resolve(); + }.bind(this); + + this.on('change', onFullScreenEntered); + element = element || document.documentElement; + const returnPromise = element[nativeAPI.requestFullscreen](options); + if (returnPromise instanceof Promise) { + returnPromise.then(onFullScreenEntered).catch(reject); + } + }); + }, + exit() { + return new Promise((resolve, reject) => { + if (!this.isFullscreen) { + resolve(); + return; + } + + const onFullScreenExit = function() { + this.off('change', onFullScreenExit); + resolve(); + }.bind(this); + + this.on('change', onFullScreenExit); + const returnPromise = document[nativeAPI.exitFullscreen](); + if (returnPromise instanceof Promise) { + returnPromise.then(onFullScreenExit).catch(reject); + } + }); + }, + on(event, callback) { + const eventName = eventNameMap[event]; + if (eventName) { + document.addEventListener(eventName, callback, false); + } + }, + off(event, callback) { + const eventName = eventNameMap[event]; + if (eventName) { + document.removeEventListener(eventName, callback, false); + } + }, + nativeAPI: nativeAPI + }; + + Object.defineProperties(fullscreenAPI, { + isFullscreen: { + get() { + return Boolean(document[nativeAPI.fullscreenElement]); + } + }, + isEnabled: { + enumerable: true, + get() { + // Coerce to boolean in case of old WebKit + return Boolean(document[nativeAPI.fullscreenEnabled]); + } + } + }); + + leaflet.Control.FullScreen = leaflet.Control.extend({ + options: { + position: 'topleft', + title: 'Full Screen', + titleCancel: 'Exit Full Screen', + forceSeparateButton: false, + forcePseudoFullscreen: false, + fullscreenElement: false + }, + + _screenfull: fullscreenAPI, + + onAdd(map) { + let className = 'leaflet-control-zoom-fullscreen'; + let container; + let content = ''; + + if (map.zoomControl && !this.options.forceSeparateButton) { + container = map.zoomControl._container; + } else { + container = leaflet.DomUtil.create('div', 'leaflet-bar'); + } + + if (this.options.content) { + content = this.options.content; + } else { + className += ' fullscreen-icon'; + } + + this._createButton(this.options.title, className, content, container, this.toggleFullScreen, this); + this._map.fullscreenControl = this; + + this._map.on('enterFullscreen exitFullscreen', this._toggleState, this); + + return container; + }, + + onRemove() { + leaflet.DomEvent + .off(this.link, 'click', leaflet.DomEvent.stop) + .off(this.link, 'click', this.toggleFullScreen, this); + + if (this._screenfull.isEnabled) { + leaflet.DomEvent + .off(this._container, this._screenfull.nativeAPI.fullscreenchange, leaflet.DomEvent.stop) + .off(this._container, this._screenfull.nativeAPI.fullscreenchange, this._handleFullscreenChange, this); + + leaflet.DomEvent + .off(document, this._screenfull.nativeAPI.fullscreenchange, leaflet.DomEvent.stop) + .off(document, this._screenfull.nativeAPI.fullscreenchange, this._handleFullscreenChange, this); + } + }, + + _createButton(title, className, content, container, fn, context) { + this.link = leaflet.DomUtil.create('a', className, container); + this.link.href = '#'; + this.link.title = title; + this.link.innerHTML = content; + + this.link.setAttribute('role', 'button'); + this.link.setAttribute('aria-label', title); + + L.DomEvent.disableClickPropagation(container); + + leaflet.DomEvent + .on(this.link, 'click', leaflet.DomEvent.stop) + .on(this.link, 'click', fn, context); + + if (this._screenfull.isEnabled) { + leaflet.DomEvent + .on(container, this._screenfull.nativeAPI.fullscreenchange, leaflet.DomEvent.stop) + .on(container, this._screenfull.nativeAPI.fullscreenchange, this._handleFullscreenChange, context); + + leaflet.DomEvent + .on(document, this._screenfull.nativeAPI.fullscreenchange, leaflet.DomEvent.stop) + .on(document, this._screenfull.nativeAPI.fullscreenchange, this._handleFullscreenChange, context); + } + + return this.link; + }, + + toggleFullScreen() { + const map = this._map; + map._exitFired = false; + if (map._isFullscreen) { + if (this._screenfull.isEnabled && !this.options.forcePseudoFullscreen) { + this._screenfull.exit().then(() => map.invalidateSize()); + } else { + leaflet.DomUtil.removeClass(this.options.fullscreenElement + ? this.options.fullscreenElement + : map._container, 'leaflet-pseudo-fullscreen'); + map.invalidateSize(); + } + map.fire('exitFullscreen'); + map._exitFired = true; + map._isFullscreen = false; + } else { + if (this._screenfull.isEnabled && !this.options.forcePseudoFullscreen) { + this._screenfull.request(this.options.fullscreenElement + ? this.options.fullscreenElement + : map._container).then(() => map.invalidateSize()); + } else { + leaflet.DomUtil.addClass(this.options.fullscreenElement + ? this.options.fullscreenElement + : map._container, 'leaflet-pseudo-fullscreen'); + map.invalidateSize(); + } + map.fire('enterFullscreen'); + map._isFullscreen = true; + } + }, + + _toggleState() { + this.link.title = this._map._isFullscreen + ? this.options.title + : this.options.titleCancel; + this._map._isFullscreen + ? L.DomUtil.removeClass(this.link, 'leaflet-fullscreen-on') + : L.DomUtil.addClass(this.link, 'leaflet-fullscreen-on'); + }, + + _handleFullscreenChange(ev) { + const map = this._map; + if (ev.target === map.getContainer() && !this._screenfull.isFullscreen && !map._exitFired) { + this._screenfull.exit().then(() => map.invalidateSize()); + map.fire('exitFullscreen'); + map._exitFired = true; + map._isFullscreen = false; + } + } + }); + + leaflet.Map.include({ + toggleFullscreen() { + this.fullscreenControl.toggleFullScreen(); + } + }); + + leaflet.Map.addInitHook(function() { + if (this.options.fullscreenControl) { + this.addControl(leaflet.control.fullscreen(this.options.fullscreenControlOptions)); + } + }); + + leaflet.control.fullscreen = function(options) { + return new leaflet.Control.FullScreen(options); + }; + + return { leaflet }; +})); diff --git a/maps/js/icon-fullscreen.svg b/maps/js/icon-fullscreen.svg new file mode 100644 index 0000000..a3a2332 --- /dev/null +++ b/maps/js/icon-fullscreen.svg @@ -0,0 +1 @@ + diff --git a/maps/js/leafler.markercluster.js.map b/maps/js/leafler.markercluster.js.map new file mode 100644 index 0000000..b146332 --- /dev/null +++ b/maps/js/leafler.markercluster.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/MarkerClusterGroup.js","../src/MarkerCluster.js","../src/MarkerOpacity.js","../src/DistanceGrid.js","../src/MarkerCluster.QuickHull.js","../src/MarkerCluster.Spiderfier.js","../src/MarkerClusterGroup.Refresh.js"],"names":["MarkerClusterGroup","L","FeatureGroup","extend","options","maxClusterRadius","iconCreateFunction","clusterPane","Marker","prototype","pane","spiderfyOnEveryZoom","spiderfyOnMaxZoom","showCoverageOnHover","zoomToBoundsOnClick","singleMarkerMode","disableClusteringAtZoom","removeOutsideVisibleBounds","animate","animateAddingMarkers","spiderfyShapePositions","spiderfyDistanceMultiplier","spiderLegPolylineOptions","weight","color","opacity","chunkedLoading","chunkInterval","chunkDelay","chunkProgress","polygonOptions","initialize","Util","setOptions","this","_defaultIconCreateFunction","_featureGroup","featureGroup","addEventParent","_nonPointGroup","_inZoomAnimation","_needsClustering","_needsRemoving","_currentShownBounds","_queue","_childMarkerEventHandlers","dragstart","_childMarkerDragStart","move","_childMarkerMoved","dragend","_childMarkerDragEnd","DomUtil","TRANSITION","_withAnimation","_noAnimation","_markerCluster","MarkerCluster","MarkerClusterNonAnimated","addLayer","layer","LayerGroup","addLayers","getLatLng","fire","_map","push","hasLayer","_unspiderfy","_addLayer","_maxZoom","_topClusterLevel","_recalculateBounds","_refreshClustersIcons","visibleLayer","currentZoom","_zoom","__parent","contains","_animationAddLayer","_animationAddLayerNonAnimated","removeLayer","removeLayers","_unspiderfyLayer","_removeLayer","off","clusterShow","_arraySplice","latlng","_latlng","layersArray","skipLayerAddEvent","isArray","m","fg","npg","chunked","l","length","offset","originalArray","started","Date","getTime","process","bind","start","elapsed","slice","_extractNonGroupLayers","getChildCount","markers","getAllChildMarkers","otherMarker","_recursivelyAddChildrenToMap","setTimeout","needsClustering","i","layersArray2","l2","clearLayers","_gridClusters","_gridUnclustered","_noanimationUnspiderfy","eachLayer","marker","_generateInitialClusters","getBounds","bounds","LatLngBounds","_bounds","method","context","thisNeedsRemoving","j","needsRemoving","call","getLayers","layers","getLayer","id","result","parseInt","stamp","anArray","_group","zoomToShowLayer","callback","map","showMarker","_icon","once","spiderfy","Math","round","on","panTo","zoomToBounds","onAdd","isFinite","getMaxZoom","addTo","_maxLat","crs","projection","MAX_LATITUDE","newlatlng","_getExpandedVisibleBounds","_zoomEnd","_moveEnd","_spiderfierOnAdd","_bindEvents","onRemove","_unbindEvents","_mapPane","className","replace","_spiderfierOnRemove","_hideCoverage","remove","getVisibleParent","vMarker","obj","splice","_removeFromGridUnclustered","z","gridUnclustered","minZoom","floor","getMinZoom","removeObject","project","e","target","__dragStart","_ignoreMove","isPopupOpen","_popup","isOpen","_moveChild","oldLatLng","openPopup","from","to","dragStart","removeFromDistanceGrid","dontUpdateMap","gridClusters","cluster","_markers","_childCount","_boundsNeedUpdate","_cLatLng","addObject","_childClusters","_iconNeedsUpdate","_isOrIsParent","el","oel","parentNode","type","data","propagate","originalEvent","relatedTarget","listens","childCount","c","DivIcon","html","iconSize","Point","_zoomOrSpiderfy","_showCoverage","bottomCluster","keyCode","_container","focus","_shownPolygon","_spiderfied","Polygon","getConvexHull","_mergeSplitClusters","newBounds","_recursivelyRemoveChildrenFromMap","maxZoom","ceil","radius","radiusFn","zoom","DistanceGrid","markerPoint","_overrideMarkerIcon","closest","getNearObject","_addChild","parent","newCluster","lastParent","_updateIcon","_enqueue","fn","_queueTimeout","_processQueue","clearTimeout","mapZoom","intersects","_animationStart","_animationZoomIn","_animationZoomOut","Browser","mobile","_checkBoundsMaxLat","pad","_mapBoundsInfinite","maxLat","undefined","getNorth","_northEast","lat","Infinity","getSouth","_southWest","_addToMap","group","output","icon","include","LatLng","previousZoomLevel","newZoomLevel","_recursively","startPos","_isSingleParent","clusterHide","_forceLayout","_recursivelyBecomeVisible","n","_recursivelyRestoreChildPositions","_animationEnd","_animationZoomOutSingle","me","_setPos","latLngToLayerPoint","_recursivelyAnimateChildrenInAndAddSelfToMap","setLatLng","falseFn","document","body","offsetWidth","markerClusterGroup","Icon","a","b","storageArray","ignoreDraggedMarker","fitBoundsOptions","childClusters","boundsZoom","getBoundsZoom","getZoom","newClusters","concat","setView","fitBounds","setIcon","createIcon","_iconObj","createShadow","new1","isNotificationFromChild","_setClusterCenter","child","_resetBounds","lng","childLatLng","latSum","lngSum","totalCount","_wLatLng","_backupLatlng","_recursivelyAnimateChildrenIn","center","cm","mapMinZoom","zoomLevel","nm","_restorePosition","k","previousBounds","exceptBounds","boundsToApplyTo","zoomLevelToStart","zoomLevelToStop","runAtEveryLevel","runAtBottomLevel","backup","setOpacity","cellSize","_cellSize","_sqCellSize","_grid","_objectPoint","point","x","_getCoord","y","grid","row","cell","updateObject","len","eachObject","dist","objectPoint","closestDistSq","_sqDist","coord","p","p2","dx","dy","QuickHull","getDistant","cpt","bl","vY","findMostDistantPointFromBaseLine","baseLine","latLngs","pt","d","maxD","maxPt","newPoints","maxPoint","buildConvexHull","convexHullBaseLines","t","minLat","maxLng","minLng","maxLatPt","minLatPt","maxLngPt","minLngPt","minPt","childMarkers","points","_2PI","PI","_circleFootSeparation","_circleStartAngle","_spiralFootSeparation","_spiralLengthStart","_spiralLengthFactor","_circleSpiralSwitchover","positions","_generatePointsSpiral","_generatePointsCircle","_animationSpiderfy","unspiderfy","zoomDetails","_animationUnspiderfy","count","centerPt","angle","legLength","angleStep","res","max","cos","sin","_round","separation","lengthFactor","_preSpiderfyLatlng","setZIndexOffset","_spiderLeg","leg","newPos","legOptions","layerPointToLatLng","Polyline","legPath","thisLayerLatLng","thisLayerPos","svg","Path","SVG","finalLegOpacity","_path","getTotalLength","style","strokeDasharray","strokeDashoffset","setStyle","nonAnimatable","_latLngToNewLayerPoint","closePopup","stillThereChildCount","apply","arguments","_unspiderfyWrapper","zoomAnimation","_unspiderfyZoomStart","touch","getRenderer","_unspiderfyZoomAnim","hasClass","refreshClusters","_layers","_flagParentsIconsNeedUpdate","_refreshSingleMarkerModeMarkers","refreshIconOptions","directlyRefreshClusters"],"mappings":"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","file":"dist/leaflet.markercluster.js.map"} \ No newline at end of file diff --git a/maps/js/leaflet.js b/maps/js/leaflet.js new file mode 100644 index 0000000..a3bf693 --- /dev/null +++ b/maps/js/leaflet.js @@ -0,0 +1,6 @@ +/* @preserve + * Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com + * (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).leaflet={})}(this,function(t){"use strict";function l(t){for(var e,i,n=1,o=arguments.length;n=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=_(t);var e=this.min,i=this.max,n=t.min,t=t.max,o=t.x>=e.x&&n.x<=i.x,t=t.y>=e.y&&n.y<=i.y;return o&&t},overlaps:function(t){t=_(t);var e=this.min,i=this.max,n=t.min,t=t.max,o=t.x>e.x&&n.xe.y&&n.y=n.lat&&i.lat<=o.lat&&e.lng>=n.lng&&i.lng<=o.lng},intersects:function(t){t=g(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),t=t.getNorthEast(),o=t.lat>=e.lat&&n.lat<=i.lat,t=t.lng>=e.lng&&n.lng<=i.lng;return o&&t},overlaps:function(t){t=g(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),t=t.getNorthEast(),o=t.lat>e.lat&&n.late.lng&&n.lng","http://www.w3.org/2000/svg"===(Wt.firstChild&&Wt.firstChild.namespaceURI));function y(t){return 0<=navigator.userAgent.toLowerCase().indexOf(t)}var b={ie:pt,ielt9:mt,edge:n,webkit:ft,android:gt,android23:vt,androidStock:yt,opera:xt,chrome:wt,gecko:bt,safari:Pt,phantom:Lt,opera12:o,win:Tt,ie3d:Mt,webkit3d:zt,gecko3d:_t,any3d:Ct,mobile:Zt,mobileWebkit:St,mobileWebkit3d:Et,msPointer:kt,pointer:Ot,touch:Bt,touchNative:At,mobileOpera:It,mobileGecko:Rt,retina:Nt,passiveEvents:Dt,canvas:jt,svg:Ht,vml:!Ht&&function(){try{var t=document.createElement("div"),e=(t.innerHTML='',t.firstChild);return e.style.behavior="url(#default#VML)",e&&"object"==typeof e.adj}catch(t){return!1}}(),inlineSvg:Wt,mac:0===navigator.platform.indexOf("Mac"),linux:0===navigator.platform.indexOf("Linux")},Ft=b.msPointer?"MSPointerDown":"pointerdown",Ut=b.msPointer?"MSPointerMove":"pointermove",Vt=b.msPointer?"MSPointerUp":"pointerup",qt=b.msPointer?"MSPointerCancel":"pointercancel",Gt={touchstart:Ft,touchmove:Ut,touchend:Vt,touchcancel:qt},Kt={touchstart:function(t,e){e.MSPOINTER_TYPE_TOUCH&&e.pointerType===e.MSPOINTER_TYPE_TOUCH&&O(e);ee(t,e)},touchmove:ee,touchend:ee,touchcancel:ee},Yt={},Xt=!1;function Jt(t,e,i){return"touchstart"!==e||Xt||(document.addEventListener(Ft,$t,!0),document.addEventListener(Ut,Qt,!0),document.addEventListener(Vt,te,!0),document.addEventListener(qt,te,!0),Xt=!0),Kt[e]?(i=Kt[e].bind(this,i),t.addEventListener(Gt[e],i,!1),i):(console.warn("wrong event specified:",e),u)}function $t(t){Yt[t.pointerId]=t}function Qt(t){Yt[t.pointerId]&&(Yt[t.pointerId]=t)}function te(t){delete Yt[t.pointerId]}function ee(t,e){if(e.pointerType!==(e.MSPOINTER_TYPE_MOUSE||"mouse")){for(var i in e.touches=[],Yt)e.touches.push(Yt[i]);e.changedTouches=[e],t(e)}}var ie=200;function ne(t,i){t.addEventListener("dblclick",i);var n,o=0;function e(t){var e;1!==t.detail?n=t.detail:"mouse"===t.pointerType||t.sourceCapabilities&&!t.sourceCapabilities.firesTouchEvents||((e=Ne(t)).some(function(t){return t instanceof HTMLLabelElement&&t.attributes.for})&&!e.some(function(t){return t instanceof HTMLInputElement||t instanceof HTMLSelectElement})||((e=Date.now())-o<=ie?2===++n&&i(function(t){var e,i,n={};for(i in t)e=t[i],n[i]=e&&e.bind?e.bind(t):e;return(t=n).type="dblclick",n.detail=2,n.isTrusted=!1,n._simulated=!0,n}(t)):n=1,o=e))}return t.addEventListener("click",e),{dblclick:i,simDblclick:e}}var oe,se,re,ae,he,le,ue=we(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),ce=we(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),de="webkitTransition"===ce||"OTransition"===ce?ce+"End":"transitionend";function _e(t){return"string"==typeof t?document.getElementById(t):t}function pe(t,e){var i=t.style[e]||t.currentStyle&&t.currentStyle[e];return"auto"===(i=i&&"auto"!==i||!document.defaultView?i:(t=document.defaultView.getComputedStyle(t,null))?t[e]:null)?null:i}function P(t,e,i){t=document.createElement(t);return t.className=e||"",i&&i.appendChild(t),t}function T(t){var e=t.parentNode;e&&e.removeChild(t)}function me(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function fe(t){var e=t.parentNode;e&&e.lastChild!==t&&e.appendChild(t)}function ge(t){var e=t.parentNode;e&&e.firstChild!==t&&e.insertBefore(t,e.firstChild)}function ve(t,e){return void 0!==t.classList?t.classList.contains(e):0<(t=xe(t)).length&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(t)}function M(t,e){var i;if(void 0!==t.classList)for(var n=F(e),o=0,s=n.length;othis.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,e){this._enforcingBounds=!0;var i=this.getCenter(),t=this._limitCenter(i,this._zoom,g(t));return i.equals(t)||this.panTo(t,e),this._enforcingBounds=!1,this},panInside:function(t,e){var i=m((e=e||{}).paddingTopLeft||e.padding||[0,0]),n=m(e.paddingBottomRight||e.padding||[0,0]),o=this.project(this.getCenter()),t=this.project(t),s=this.getPixelBounds(),i=_([s.min.add(i),s.max.subtract(n)]),s=i.getSize();return i.contains(t)||(this._enforcingBounds=!0,n=t.subtract(i.getCenter()),i=i.extend(t).getSize().subtract(s),o.x+=n.x<0?-i.x:i.x,o.y+=n.y<0?-i.y:i.y,this.panTo(this.unproject(o),e),this._enforcingBounds=!1),this},invalidateSize:function(t){if(!this._loaded)return this;t=l({animate:!1,pan:!0},!0===t?{animate:!0}:t);var e=this.getSize(),i=(this._sizeChanged=!0,this._lastCenter=null,this.getSize()),n=e.divideBy(2).round(),o=i.divideBy(2).round(),n=n.subtract(o);return n.x||n.y?(t.animate&&t.pan?this.panBy(n):(t.pan&&this._rawPanBy(n),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(a(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i})):this},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){var e,i;return t=this._locateOptions=l({timeout:1e4,watch:!1},t),"geolocation"in navigator?(e=a(this._handleGeolocationResponse,this),i=a(this._handleGeolocationError,this),t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t)):this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var e;this._container._leaflet_id&&(e=t.code,t=t.message||(1===e?"permission denied":2===e?"position unavailable":"timeout"),this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+t+"."}))},_handleGeolocationResponse:function(t){if(this._container._leaflet_id){var e,i,n=new v(t.coords.latitude,t.coords.longitude),o=n.toBounds(2*t.coords.accuracy),s=this._locateOptions,r=(s.setView&&(e=this.getBoundsZoom(o),this.setView(n,s.maxZoom?Math.min(e,s.maxZoom):e)),{latlng:n,bounds:o,timestamp:t.timestamp});for(i in t.coords)"number"==typeof t.coords[i]&&(r[i]=t.coords[i]);this.fire("locationfound",r)}},addHandler:function(t,e){return e&&(e=this[t]=new e(this),this._handlers.push(e),this.options[t]&&e.enable()),this},remove:function(){if(this._initEvents(!0),this.options.maxBounds&&this.off("moveend",this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch(t){this._container._leaflet_id=void 0,this._containerId=void 0}for(var t in void 0!==this._locationWatchId&&this.stopLocate(),this._stop(),T(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(r(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire("unload"),this._layers)this._layers[t].remove();for(t in this._panes)T(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,e){e=P("div","leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),e||this._mapPane);return t&&(this._panes[t]=e),e},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter.clone():this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds();return new s(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return void 0===this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return void 0===this.options.maxZoom?void 0===this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=g(t),i=m(i||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),s=this.getMaxZoom(),r=t.getNorthWest(),t=t.getSouthEast(),i=this.getSize().subtract(i),t=_(this.project(t,n),this.project(r,n)).getSize(),r=b.any3d?this.options.zoomSnap:1,a=i.x/t.x,i=i.y/t.y,t=e?Math.max(a,i):Math.min(a,i),n=this.getScaleZoom(t,n);return r&&(n=Math.round(n/(r/100))*(r/100),n=e?Math.ceil(n/r)*r:Math.floor(n/r)*r),Math.max(o,Math.min(s,n))},getSize:function(){return this._size&&!this._sizeChanged||(this._size=new p(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,e){t=this._getTopLeftPoint(t,e);return new f(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(void 0===t?this.getZoom():t)},getPane:function(t){return"string"==typeof t?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,e){var i=this.options.crs;return e=void 0===e?this._zoom:e,i.scale(t)/i.scale(e)},getScaleZoom:function(t,e){var i=this.options.crs,t=(e=void 0===e?this._zoom:e,i.zoom(t*i.scale(e)));return isNaN(t)?1/0:t},project:function(t,e){return e=void 0===e?this._zoom:e,this.options.crs.latLngToPoint(w(t),e)},unproject:function(t,e){return e=void 0===e?this._zoom:e,this.options.crs.pointToLatLng(m(t),e)},layerPointToLatLng:function(t){t=m(t).add(this.getPixelOrigin());return this.unproject(t)},latLngToLayerPoint:function(t){return this.project(w(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(w(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(g(t))},distance:function(t,e){return this.options.crs.distance(w(t),w(e))},containerPointToLayerPoint:function(t){return m(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return m(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){t=this.containerPointToLayerPoint(m(t));return this.layerPointToLatLng(t)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(w(t)))},mouseEventToContainerPoint:function(t){return De(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){t=this._container=_e(t);if(!t)throw new Error("Map container not found.");if(t._leaflet_id)throw new Error("Map container is already initialized.");S(t,"scroll",this._onScroll,this),this._containerId=h(t)},_initLayout:function(){var t=this._container,e=(this._fadeAnimated=this.options.fadeAnimation&&b.any3d,M(t,"leaflet-container"+(b.touch?" leaflet-touch":"")+(b.retina?" leaflet-retina":"")+(b.ielt9?" leaflet-oldie":"")+(b.safari?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":"")),pe(t,"position"));"absolute"!==e&&"relative"!==e&&"fixed"!==e&&"sticky"!==e&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),Z(this._mapPane,new p(0,0)),this.createPane("tilePane"),this.createPane("overlayPane"),this.createPane("shadowPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(M(t.markerPane,"leaflet-zoom-hide"),M(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,e,i){Z(this._mapPane,new p(0,0));var n=!this._loaded,o=(this._loaded=!0,e=this._limitZoom(e),this.fire("viewprereset"),this._zoom!==e);this._moveStart(o,i)._move(t,e)._moveEnd(o),this.fire("viewreset"),n&&this.fire("load")},_moveStart:function(t,e){return t&&this.fire("zoomstart"),e||this.fire("movestart"),this},_move:function(t,e,i,n){void 0===e&&(e=this._zoom);var o=this._zoom!==e;return this._zoom=e,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),n?i&&i.pinch&&this.fire("zoom",i):((o||i&&i.pinch)&&this.fire("zoom",i),this.fire("move",i)),this},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return r(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){Z(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={};var e=t?k:S;e((this._targets[h(this._container)]=this)._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup",this._handleDOMEvent,this),this.options.trackResize&&e(window,"resize",this._onResize,this),b.any3d&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){r(this._resizeRequest),this._resizeRequest=x(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,e){for(var i,n=[],o="mouseout"===e||"mouseover"===e,s=t.target||t.srcElement,r=!1;s;){if((i=this._targets[h(s)])&&("click"===e||"preclick"===e)&&this._draggableMoved(i)){r=!0;break}if(i&&i.listens(e,!0)){if(o&&!We(s,t))break;if(n.push(i),o)break}if(s===this._container)break;s=s.parentNode}return n=n.length||r||o||!this.listens(e,!0)?n:[this]},_isClickDisabled:function(t){for(;t&&t!==this._container;){if(t._leaflet_disable_click)return!0;t=t.parentNode}},_handleDOMEvent:function(t){var e,i=t.target||t.srcElement;!this._loaded||i._leaflet_disable_events||"click"===t.type&&this._isClickDisabled(i)||("mousedown"===(e=t.type)&&Me(i),this._fireDOMEvent(t,e))},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,i){"click"===t.type&&((a=l({},t)).type="preclick",this._fireDOMEvent(a,a.type,i));var n=this._findEventTargets(t,e);if(i){for(var o=[],s=0;sthis.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),n=this._getCenterOffset(t)._divideBy(1-1/n);if(!0!==i.animate&&!this.getSize().contains(n))return!1;x(function(){this._moveStart(!0,i.noMoveStart||!1)._animateZoom(t,e,!0)},this)}return!0},_animateZoom:function(t,e,i,n){this._mapPane&&(i&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=e,M(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:e,noUpdate:n}),this._tempFireZoomEvent||(this._tempFireZoomEvent=this._zoom!==this._animateToZoom),this._move(this._animateToCenter,this._animateToZoom,void 0,!0),setTimeout(a(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&z(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom,void 0,!0),this._tempFireZoomEvent&&this.fire("zoom"),delete this._tempFireZoomEvent,this.fire("move"),this._moveEnd(!0))}});function Ue(t){return new B(t)}var B=et.extend({options:{position:"topright"},initialize:function(t){c(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),t=t._controlCorners[i];return M(e,"leaflet-control"),-1!==i.indexOf("bottom")?t.insertBefore(e,t.firstChild):t.appendChild(e),this._map.on("unload",this.remove,this),this},remove:function(){return this._map&&(T(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null),this},_refocusOnMap:function(t){this._map&&t&&0",e=document.createElement("div");return e.innerHTML=t,e.firstChild},_addItem:function(t){var e,i=document.createElement("label"),n=this._map.hasLayer(t.layer),n=(t.overlay?((e=document.createElement("input")).type="checkbox",e.className="leaflet-control-layers-selector",e.defaultChecked=n):e=this._createRadioElement("leaflet-base-layers_"+h(this),n),this._layerControlInputs.push(e),e.layerId=h(t.layer),S(e,"click",this._onInputClick,this),document.createElement("span")),o=(n.innerHTML=" "+t.name,document.createElement("span"));return i.appendChild(o),o.appendChild(e),o.appendChild(n),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(i),this._checkDisabledLayers(),i},_onInputClick:function(){if(!this._preventClick){var t,e,i=this._layerControlInputs,n=[],o=[];this._handlingClick=!0;for(var s=i.length-1;0<=s;s--)t=i[s],e=this._getLayer(t.layerId).layer,t.checked?n.push(e):t.checked||o.push(e);for(s=0;se.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expandSafely:function(){var t=this._section,e=(this._preventClick=!0,S(t,"click",O),this.expand(),this);setTimeout(function(){k(t,"click",O),e._preventClick=!1})}})),qe=B.extend({options:{position:"topleft",zoomInText:'',zoomInTitle:"Zoom in",zoomOutText:'',zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=P("div",e+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,e+"-in",i,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,e+"-out",i,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,e,i,n,o){i=P("a",i,n);return i.innerHTML=t,i.href="#",i.title=e,i.setAttribute("role","button"),i.setAttribute("aria-label",e),Ie(i),S(i,"click",Re),S(i,"click",o,this),S(i,"click",this._refocusOnMap,this),i},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";z(this._zoomInButton,e),z(this._zoomOutButton,e),this._zoomInButton.setAttribute("aria-disabled","false"),this._zoomOutButton.setAttribute("aria-disabled","false"),!this._disabled&&t._zoom!==t.getMinZoom()||(M(this._zoomOutButton,e),this._zoomOutButton.setAttribute("aria-disabled","true")),!this._disabled&&t._zoom!==t.getMaxZoom()||(M(this._zoomInButton,e),this._zoomInButton.setAttribute("aria-disabled","true"))}}),Ge=(A.mergeOptions({zoomControl:!0}),A.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new qe,this.addControl(this.zoomControl))}),B.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var e="leaflet-control-scale",i=P("div",e),n=this.options;return this._addScales(n,e+"-line",i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=P("div",e,i)),t.imperial&&(this._iScale=P("div",e,i))},_update:function(){var t=this._map,e=t.getSize().y/2,t=t.distance(t.containerPointToLatLng([0,e]),t.containerPointToLatLng([this.options.maxWidth,e]));this._updateScales(t)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var e=this._getRoundNum(t);this._updateScale(this._mScale,e<1e3?e+" m":e/1e3+" km",e/t)},_updateImperial:function(t){var e,i,t=3.2808399*t;5280'+(b.inlineSvg?' ':"")+"Leaflet"},initialize:function(t){c(this,t),this._attributions={}},onAdd:function(t){for(var e in(t.attributionControl=this)._container=P("div","leaflet-control-attribution"),Ie(this._container),t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return this._update(),t.on("layeradd",this._addAttribution,this),this._container},onRemove:function(t){t.off("layeradd",this._addAttribution,this)},_addAttribution:function(t){t.layer.getAttribution&&(this.addAttribution(t.layer.getAttribution()),t.layer.once("remove",function(){this.removeAttribution(t.layer.getAttribution())},this))},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t&&(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update()),this},removeAttribution:function(t){return t&&this._attributions[t]&&(this._attributions[t]--,this._update()),this},_update:function(){if(this._map){var t,e=[];for(t in this._attributions)this._attributions[t]&&e.push(t);var i=[];this.options.prefix&&i.push(this.options.prefix),e.length&&i.push(e.join(", ")),this._container.innerHTML=i.join(' ')}}}),n=(A.mergeOptions({attributionControl:!0}),A.addInitHook(function(){this.options.attributionControl&&(new Ke).addTo(this)}),B.Layers=Ve,B.Zoom=qe,B.Scale=Ge,B.Attribution=Ke,Ue.layers=function(t,e,i){return new Ve(t,e,i)},Ue.zoom=function(t){return new qe(t)},Ue.scale=function(t){return new Ge(t)},Ue.attribution=function(t){return new Ke(t)},et.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled||(this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled&&(this._enabled=!1,this.removeHooks()),this},enabled:function(){return!!this._enabled}})),ft=(n.addTo=function(t,e){return t.addHandler(e,this),this},{Events:e}),Ye=b.touch?"touchstart mousedown":"mousedown",Xe=it.extend({options:{clickTolerance:3},initialize:function(t,e,i,n){c(this,n),this._element=t,this._dragStartTarget=e||t,this._preventOutline=i},enable:function(){this._enabled||(S(this._dragStartTarget,Ye,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(Xe._dragging===this&&this.finishDrag(!0),k(this._dragStartTarget,Ye,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){var e,i;this._enabled&&(this._moved=!1,ve(this._element,"leaflet-zoom-anim")||(t.touches&&1!==t.touches.length?Xe._dragging===this&&this.finishDrag():Xe._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||((Xe._dragging=this)._preventOutline&&Me(this._element),Le(),re(),this._moving||(this.fire("down"),i=t.touches?t.touches[0]:t,e=Ce(this._element),this._startPoint=new p(i.clientX,i.clientY),this._startPos=Pe(this._element),this._parentScale=Ze(e),i="mousedown"===t.type,S(document,i?"mousemove":"touchmove",this._onMove,this),S(document,i?"mouseup":"touchend touchcancel",this._onUp,this)))))},_onMove:function(t){var e;this._enabled&&(t.touches&&1e&&(i.push(t[n]),o=n);oe.max.x&&(i|=2),t.ye.max.y&&(i|=8),i}function ri(t,e,i,n){var o=e.x,e=e.y,s=i.x-o,r=i.y-e,a=s*s+r*r;return 0this._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()t.y!=n.y>t.y&&t.x<(n.x-i.x)*(t.y-i.y)/(n.y-i.y)+i.x&&(l=!l);return l||yi.prototype._containsPoint.call(this,t,!0)}});var wi=ci.extend({initialize:function(t,e){c(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e,i,n,o=d(t)?t:t.features;if(o){for(e=0,i=o.length;es.x&&(r=i.x+a-s.x+o.x),i.x-r-n.x<(a=0)&&(r=i.x-n.x),i.y+e+o.y>s.y&&(a=i.y+e-s.y+o.y),i.y-a-n.y<0&&(a=i.y-n.y),(r||a)&&(this.options.keepInView&&(this._autopanning=!0),t.fire("autopanstart").panBy([r,a]))))},_getAnchor:function(){return m(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}})),Ii=(A.mergeOptions({closePopupOnClick:!0}),A.include({openPopup:function(t,e,i){return this._initOverlay(Bi,t,e,i).openOn(this),this},closePopup:function(t){return(t=arguments.length?t:this._popup)&&t.close(),this}}),o.include({bindPopup:function(t,e){return this._popup=this._initOverlay(Bi,this._popup,t,e),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t){return this._popup&&(this instanceof ci||(this._popup._source=this),this._popup._prepareOpen(t||this._latlng)&&this._popup.openOn(this._map)),this},closePopup:function(){return this._popup&&this._popup.close(),this},togglePopup:function(){return this._popup&&this._popup.toggle(this),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var e;this._popup&&this._map&&(Re(t),e=t.layer||t.target,this._popup._source!==e||e instanceof fi?(this._popup._source=e,this.openPopup(t.latlng)):this._map.hasLayer(this._popup)?this.closePopup():this.openPopup(t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}}),Ai.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,opacity:.9},onAdd:function(t){Ai.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&(this.addEventParent(this._source),this._source.fire("tooltipopen",{tooltip:this},!0))},onRemove:function(t){Ai.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&(this.removeEventParent(this._source),this._source.fire("tooltipclose",{tooltip:this},!0))},getEvents:function(){var t=Ai.prototype.getEvents.call(this);return this.options.permanent||(t.preclick=this.close),t},_initLayout:function(){var t="leaflet-tooltip "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=P("div",t),this._container.setAttribute("role","tooltip"),this._container.setAttribute("id","leaflet-tooltip-"+h(this))},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var e,i=this._map,n=this._container,o=i.latLngToContainerPoint(i.getCenter()),i=i.layerPointToContainerPoint(t),s=this.options.direction,r=n.offsetWidth,a=n.offsetHeight,h=m(this.options.offset),l=this._getAnchor(),i="top"===s?(e=r/2,a):"bottom"===s?(e=r/2,0):(e="center"===s?r/2:"right"===s?0:"left"===s?r:i.xthis.options.maxZoom||nthis.options.maxZoom||void 0!==this.options.minZoom&&oi.max.x)||!e.wrapLat&&(t.yi.max.y))return!1}return!this.options.bounds||(e=this._tileCoordsToBounds(t),g(this.options.bounds).overlaps(e))},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var e=this._map,i=this.getTileSize(),n=t.scaleBy(i),i=n.add(i);return[e.unproject(n,t.z),e.unproject(i,t.z)]},_tileCoordsToBounds:function(t){t=this._tileCoordsToNwSe(t),t=new s(t[0],t[1]);return t=this.options.noWrap?t:this._map.wrapLatLngBounds(t)},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var t=t.split(":"),e=new p(+t[0],+t[1]);return e.z=+t[2],e},_removeTile:function(t){var e=this._tiles[t];e&&(T(e.el),delete this._tiles[t],this.fire("tileunload",{tile:e.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){M(t,"leaflet-tile");var e=this.getTileSize();t.style.width=e.x+"px",t.style.height=e.y+"px",t.onselectstart=u,t.onmousemove=u,b.ielt9&&this.options.opacity<1&&C(t,this.options.opacity)},_addTile:function(t,e){var i=this._getTilePos(t),n=this._tileCoordsToKey(t),o=this.createTile(this._wrapCoords(t),a(this._tileReady,this,t));this._initTile(o),this.createTile.length<2&&x(a(this._tileReady,this,t,null,o)),Z(o,i),this._tiles[n]={el:o,coords:t,current:!0},e.appendChild(o),this.fire("tileloadstart",{tile:o,coords:t})},_tileReady:function(t,e,i){e&&this.fire("tileerror",{error:e,tile:i,coords:t});var n=this._tileCoordsToKey(t);(i=this._tiles[n])&&(i.loaded=+new Date,this._map._fadeAnimated?(C(i.el,0),r(this._fadeFrame),this._fadeFrame=x(this._updateOpacity,this)):(i.active=!0,this._pruneTiles()),e||(M(i.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:i.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),b.ielt9||!this._map._fadeAnimated?x(this._pruneTiles,this):setTimeout(a(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var e=new p(this._wrapX?H(t.x,this._wrapX):t.x,this._wrapY?H(t.y,this._wrapY):t.y);return e.z=t.z,e},_pxBoundsToTileRange:function(t){var e=this.getTileSize();return new f(t.min.unscaleBy(e).floor(),t.max.unscaleBy(e).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});var Di=Ni.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1,referrerPolicy:!1},initialize:function(t,e){this._url=t,(e=c(this,e)).detectRetina&&b.retina&&0')}}catch(t){}return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}(),zt={_initContainer:function(){this._container=P("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(Wi.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var e=t._container=Vi("shape");M(e,"leaflet-vml-shape "+(this.options.className||"")),e.coordsize="1 1",t._path=Vi("path"),e.appendChild(t._path),this._updateStyle(t),this._layers[h(t)]=t},_addPath:function(t){var e=t._container;this._container.appendChild(e),t.options.interactive&&t.addInteractiveTarget(e)},_removePath:function(t){var e=t._container;T(e),t.removeInteractiveTarget(e),delete this._layers[h(t)]},_updateStyle:function(t){var e=t._stroke,i=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(e=e||(t._stroke=Vi("stroke")),o.appendChild(e),e.weight=n.weight+"px",e.color=n.color,e.opacity=n.opacity,n.dashArray?e.dashStyle=d(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):e.dashStyle="",e.endcap=n.lineCap.replace("butt","flat"),e.joinstyle=n.lineJoin):e&&(o.removeChild(e),t._stroke=null),n.fill?(i=i||(t._fill=Vi("fill")),o.appendChild(i),i.color=n.fillColor||n.color,i.opacity=n.fillOpacity):i&&(o.removeChild(i),t._fill=null)},_updateCircle:function(t){var e=t._point.round(),i=Math.round(t._radius),n=Math.round(t._radiusY||i);this._setPath(t,t._empty()?"M0 0":"AL "+e.x+","+e.y+" "+i+","+n+" 0,23592600")},_setPath:function(t,e){t._path.v=e},_bringToFront:function(t){fe(t._container)},_bringToBack:function(t){ge(t._container)}},qi=b.vml?Vi:ct,Gi=Wi.extend({_initContainer:function(){this._container=qi("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=qi("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){T(this._container),k(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_update:function(){var t,e,i;this._map._animatingZoom&&this._bounds||(Wi.prototype._update.call(this),e=(t=this._bounds).getSize(),i=this._container,this._svgSize&&this._svgSize.equals(e)||(this._svgSize=e,i.setAttribute("width",e.x),i.setAttribute("height",e.y)),Z(i,t.min),i.setAttribute("viewBox",[t.min.x,t.min.y,e.x,e.y].join(" ")),this.fire("update"))},_initPath:function(t){var e=t._path=qi("path");t.options.className&&M(e,t.options.className),t.options.interactive&&M(e,"leaflet-interactive"),this._updateStyle(t),this._layers[h(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){T(t._path),t.removeInteractiveTarget(t._path),delete this._layers[h(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var e=t._path,t=t.options;e&&(t.stroke?(e.setAttribute("stroke",t.color),e.setAttribute("stroke-opacity",t.opacity),e.setAttribute("stroke-width",t.weight),e.setAttribute("stroke-linecap",t.lineCap),e.setAttribute("stroke-linejoin",t.lineJoin),t.dashArray?e.setAttribute("stroke-dasharray",t.dashArray):e.removeAttribute("stroke-dasharray"),t.dashOffset?e.setAttribute("stroke-dashoffset",t.dashOffset):e.removeAttribute("stroke-dashoffset")):e.setAttribute("stroke","none"),t.fill?(e.setAttribute("fill",t.fillColor||t.color),e.setAttribute("fill-opacity",t.fillOpacity),e.setAttribute("fill-rule",t.fillRule||"evenodd")):e.setAttribute("fill","none"))},_updatePoly:function(t,e){this._setPath(t,dt(t._parts,e))},_updateCircle:function(t){var e=t._point,i=Math.max(Math.round(t._radius),1),n="a"+i+","+(Math.max(Math.round(t._radiusY),1)||i)+" 0 1,0 ",e=t._empty()?"M0 0":"M"+(e.x-i)+","+e.y+n+2*i+",0 "+n+2*-i+",0 ";this._setPath(t,e)},_setPath:function(t,e){t._path.setAttribute("d",e)},_bringToFront:function(t){fe(t._path)},_bringToBack:function(t){ge(t._path)}});function Ki(t){return b.svg||b.vml?new Gi(t):null}b.vml&&Gi.include(zt),A.include({getRenderer:function(t){t=(t=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer)||(this._renderer=this._createRenderer());return this.hasLayer(t)||this.addLayer(t),t},_getPaneRenderer:function(t){var e;return"overlayPane"!==t&&void 0!==t&&(void 0===(e=this._paneRenderers[t])&&(e=this._createRenderer({pane:t}),this._paneRenderers[t]=e),e)},_createRenderer:function(t){return this.options.preferCanvas&&Ui(t)||Ki(t)}});var Yi=xi.extend({initialize:function(t,e){xi.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return[(t=g(t)).getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});Gi.create=qi,Gi.pointsToPath=dt,wi.geometryToLayer=bi,wi.coordsToLatLng=Li,wi.coordsToLatLngs=Ti,wi.latLngToCoords=Mi,wi.latLngsToCoords=zi,wi.getFeature=Ci,wi.asFeature=Zi,A.mergeOptions({boxZoom:!0});var _t=n.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){S(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){k(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){T(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),re(),Le(),this._startPoint=this._map.mouseEventToContainerPoint(t),S(document,{contextmenu:Re,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=P("div","leaflet-zoom-box",this._container),M(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var t=new f(this._point,this._startPoint),e=t.getSize();Z(this._box,t.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(T(this._box),z(this._container,"leaflet-crosshair")),ae(),Te(),k(document,{contextmenu:Re,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){1!==t.which&&1!==t.button||(this._finish(),this._moved&&(this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(a(this._resetState,this),0),t=new s(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point)),this._map.fitBounds(t).fire("boxzoomend",{boxZoomBounds:t})))},_onKeyDown:function(t){27===t.keyCode&&(this._finish(),this._clearDeferredResetState(),this._resetState())}}),Ct=(A.addInitHook("addHandler","boxZoom",_t),A.mergeOptions({doubleClickZoom:!0}),n.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom(),n=e.options.zoomDelta,i=t.originalEvent.shiftKey?i-n:i+n;"center"===e.options.doubleClickZoom?e.setZoom(i):e.setZoomAround(t.containerPoint,i)}})),Zt=(A.addInitHook("addHandler","doubleClickZoom",Ct),A.mergeOptions({dragging:!0,inertia:!0,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0}),n.extend({addHooks:function(){var t;this._draggable||(t=this._map,this._draggable=new Xe(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))),M(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){z(this._map._container,"leaflet-grab"),z(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t,e=this._map;e._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity?(t=g(this._map.options.maxBounds),this._offsetLimit=_(this._map.latLngToContainerPoint(t.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(t.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))):this._offsetLimit=null,e.fire("movestart").fire("dragstart"),e.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){var e,i;this._map.options.inertia&&(e=this._lastTime=+new Date,i=this._lastPos=this._draggable._absPos||this._draggable._newPos,this._positions.push(i),this._times.push(e),this._prunePositions(e)),this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;1e.max.x&&(t.x=this._viscousLimit(t.x,e.max.x)),t.y>e.max.y&&(t.y=this._viscousLimit(t.y,e.max.y)),this._draggable._newPos=this._draggable._startPos.add(t))},_onPreDragWrap:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,n=(n+e+i)%t-e-i,t=Math.abs(o+i)e.getMaxZoom()&&1=i;)t=t.__parent;return this._currentShownBounds.contains(t.getLatLng())&&(this.options.animateAddingMarkers?this._animationAddLayer(e,t):this._animationAddLayerNonAnimated(e,t)),this},removeLayer:function(e){return e instanceof L.LayerGroup?this.removeLayers([e]):(e.getLatLng?this._map?e.__parent&&(this._unspiderfy&&(this._unspiderfy(),this._unspiderfyLayer(e)),this._removeLayer(e,!0),this.fire("layerremove",{layer:e}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),e.off(this._childMarkerEventHandlers,this),this._featureGroup.hasLayer(e)&&(this._featureGroup.removeLayer(e),e.clusterShow&&e.clusterShow())):(!this._arraySplice(this._needsClustering,e)&&this.hasLayer(e)&&this._needsRemoving.push({layer:e,latlng:e._latlng}),this.fire("layerremove",{layer:e})):(this._nonPointGroup.removeLayer(e),this.fire("layerremove",{layer:e})),this)},addLayers:function(n,s){if(!L.Util.isArray(n))return this.addLayer(n);var o,a=this._featureGroup,h=this._nonPointGroup,l=this.options.chunkedLoading,u=this.options.chunkInterval,_=this.options.chunkProgress,d=n.length,p=0,c=!0;if(this._map){var f=(new Date).getTime(),m=L.bind(function(){var e=(new Date).getTime();for(this._map&&this._unspiderfy&&this._unspiderfy();p"+t+"",className:"marker-cluster"+i,iconSize:new L.Point(40,40)})},_bindEvents:function(){var e=this._map,t=this.options.spiderfyOnMaxZoom,i=this.options.showCoverageOnHover,r=this.options.zoomToBoundsOnClick,n=this.options.spiderfyOnEveryZoom;(t||r||n)&&this.on("clusterclick clusterkeypress",this._zoomOrSpiderfy,this),i&&(this.on("clustermouseover",this._showCoverage,this),this.on("clustermouseout",this._hideCoverage,this),e.on("zoomend",this._hideCoverage,this))},_zoomOrSpiderfy:function(e){var t=e.layer,i=t;if("clusterkeypress"!==e.type||!e.originalEvent||13===e.originalEvent.keyCode){for(;1===i._childClusters.length;)i=i._childClusters[0];i._zoom===this._maxZoom&&i._childCount===t._childCount&&this.options.spiderfyOnMaxZoom?t.spiderfy():this.options.zoomToBoundsOnClick&&t.zoomToBounds(),this.options.spiderfyOnEveryZoom&&t.spiderfy(),e.originalEvent&&13===e.originalEvent.keyCode&&this._map._container.focus()}},_showCoverage:function(e){var t=this._map;this._inZoomAnimation||(this._shownPolygon&&t.removeLayer(this._shownPolygon),2h._zoom;r--)u=new this._markerCluster(this,r,u),n[r].addObject(u,this._map.project(a.getLatLng(),r));return h._addChild(u),void this._removeFromGridUnclustered(a,t)}s[t].addObject(e,i)}this._topClusterLevel._addChild(e),e.__parent=this._topClusterLevel},_refreshClustersIcons:function(){this._featureGroup.eachLayer(function(e){e instanceof L.MarkerCluster&&e._iconNeedsUpdate&&e._updateIcon()})},_enqueue:function(e){this._queue.push(e),this._queueTimeout||(this._queueTimeout=setTimeout(L.bind(this._processQueue,this),300))},_processQueue:function(){for(var e=0;ee?(this._animationStart(),this._animationZoomOut(this._zoom,e)):this._moveEnd()},_getExpandedVisibleBounds:function(){return this.options.removeOutsideVisibleBounds?L.Browser.mobile?this._checkBoundsMaxLat(this._map.getBounds()):this._checkBoundsMaxLat(this._map.getBounds().pad(1)):this._mapBoundsInfinite},_checkBoundsMaxLat:function(e){var t=this._maxLat;return void 0!==t&&(e.getNorth()>=t&&(e._northEast.lat=1/0),e.getSouth()<=-t&&(e._southWest.lat=-1/0)),e},_animationAddLayerNonAnimated:function(e,t){if(t===e)this._featureGroup.addLayer(e);else if(2===t._childCount){t._addToMap();var i=t.getAllChildMarkers();this._featureGroup.removeLayer(i[0]),this._featureGroup.removeLayer(i[1])}else t._updateIcon()},_extractNonGroupLayers:function(e,t){var i,r=e.getLayers(),n=0;for(t=t||[];ni)&&(i=(o=d).lat),(!1===r||d.latn)&&(n=(h=d).lng),(!1===s||d.lng=this._circleSpiralSwitchover?this._generatePointsSpiral(t.length,i):(i.y+=10,this._generatePointsCircle(t.length,i)),this._animationSpiderfy(t,e)}},unspiderfy:function(e){this._group._inZoomAnimation||(this._animationUnspiderfy(e),this._group._spiderfied=null)},_generatePointsCircle:function(e,t){var i,r,n=this._group.options.spiderfyDistanceMultiplier*this._circleFootSeparation*(2+e)/this._2PI,s=this._2PI/e,o=[];for(n=Math.max(n,35),o.length=e,i=0;iOpenStreetMap/ODbL - rendu OSM France' +}).addTo(map); + + +// On charge sites.json +fetch("/maps/api/liste.php") + .then(data => data.json()) + .then(sites => { + // On boucle sur les sites + for(let site of sites){ + let coords = [site.lat, site.long]; + + // On charge l'icône du marqueur + let icone = L.icon({ + iconUrl: "/maps/images/poi.png", + iconSize: [41,41], + iconAnchor: [12.5, 41], + popupAnchor: [0, -41] +/* + iconUrl: "/maps/images/pin.png", + iconSize: [25,41], +*/ + }); + + // On crée le marqueur pour chaque site + let marker = L.marker(coords, { + icon: icone + }); + +/* + $lightbox['title_thumb'] = $title_thumb; + $lightbox['exif'] = $exif; + $lightbox['title'] = $x; + $lightbox['legende'] = $y; + $lightbox['thumb'] = $thumb; + $lightbox['big'] = $big; + $lightbox['keywords'] = $keywords; + $lightbox['creator'] = $creator; + $lightbox['gps'] = $gps; + $lightbox['lat'] = $latitude; + $lightbox['long'] = $longitude; + $lightbox['description'] = $description; + $lightbox['width'] = $width; + $lightbox['height'] = $height; + ${site.filename} + ${site.filename} +*/ + + if ( parseInt(site.width) <= parseInt(site.height) ) { + largeur = 200; + hauteur = 300; + } + else + { + largeur = 300; + hauteur = 200; + } + + let popup = ``; + + marker.bindPopup(popup); + limites.push(coords); + + // On ajoute le marqueur au cluster + markers.addLayer(marker); + } + + // On ajoute les clusters à la carte + map.addLayer(markers); + + map.fitBounds(limites); + }); \ No newline at end of file diff --git a/maps/test.php b/maps/test.php new file mode 100644 index 0000000..00cf2ac --- /dev/null +++ b/maps/test.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/maps/villes.json b/maps/villes.json new file mode 100644 index 0000000..ab4520f --- /dev/null +++ b/maps/villes.json @@ -0,0 +1,26 @@ +{ + "Paris": { + "lat": 48.852969, + "lon": 2.349903, + "description": "Paris est la capitale de la France et une collectivité à statut particulier. Divisée en vingt arrondissements, elle est le chef-lieu de la région Île-de-France et le siège de la métropole du Grand Paris.", + "image": "paris.webp" + }, + "Brest": { + "lat": 48.383, + "lon": -4.5, + "description": "Brest est une commune française, chef-lieu d’arrondissement du département du Finistère dans la région Bretagne. C'est un port important, deuxième port militaire en France après Toulon, situé à l'extrémité ouest de la Bretagne.", + "image": "brest.webp" + }, + "Quimper": { + "lat": 48.0, + "lon": -4.1, + "description": "Quimper est une commune française de la région Bretagne située dans le nord-ouest de la France. Préfecture du département du Finistère et siège du Conseil départemental, elle est composée de deux cantons. Elle est également la capitale traditionnelle de la Cornouaille, du Pays Glazik et du Pays de Cornouaille (331 300 habitants en 2009), le siège de l'intercommunalité de Quimper Bretagne occidentale (100 187 habitants en 2014), le siège de l'arrondissement de Quimper et enfin le siège du diocèse de Quimper et Léon. Ses habitants sont appelés les Quimpérois.", + "image": "quimper.webp" + }, + "Bayonne": { + "lat": 43.5, + "lon": -1.467, + "description": "Bayonne, Baiona en basque et en gascon, est une commune française et l’une des deux sous-préfectures du département des Pyrénées-Atlantiques, en région Nouvelle-Aquitaine.", + "image": "bayonne.webp" + } +} diff --git a/maps_osm.php b/maps_osm.php deleted file mode 100644 index 57a5cd0..0000000 --- a/maps_osm.php +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - - - <?php echo gettext("Maps"); ?> - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - prepare($query4); - $stmt->execute(); - - $result = $stmt->fetchAll(PDO::FETCH_ASSOC); - $rowcount = count($result); - - $conn4 = null; - } - catch(PDOException $e) { - echo $e->getMessage(); - } - - //_pr($result); - ?> - -
- -
- - - - - - - - -

© 2013- sur-le-sentier.fr

- - - - - - \ No newline at end of file