popup ok
This commit is contained in:
parent
95fb2d6fab
commit
9f0a33d5c0
@ -43,6 +43,8 @@ class geogallery extends common
|
|||||||
|
|
||||||
public static $config = [];
|
public static $config = [];
|
||||||
|
|
||||||
|
public static $galleriesCenter = [];
|
||||||
|
|
||||||
public static $actions = [
|
public static $actions = [
|
||||||
'config' => self::GROUP_EDITOR,
|
'config' => self::GROUP_EDITOR,
|
||||||
'delete' => self::GROUP_EDITOR,
|
'delete' => self::GROUP_EDITOR,
|
||||||
@ -56,109 +58,6 @@ class geogallery extends common
|
|||||||
'index' => self::GROUP_VISITOR
|
'index' => self::GROUP_VISITOR
|
||||||
];
|
];
|
||||||
|
|
||||||
public static $sort = [
|
|
||||||
self::SORT_ASC => 'Alphabétique ',
|
|
||||||
self::SORT_DSC => 'Alphabétique inverse',
|
|
||||||
self::SORT_HAND => 'Manuel'
|
|
||||||
];
|
|
||||||
|
|
||||||
public static $galleryThemeFlexAlign = [
|
|
||||||
'flex-start' => 'À gauche',
|
|
||||||
'center' => 'Au centre',
|
|
||||||
'flex-end' => 'À droite',
|
|
||||||
'space-around' => 'Distribué avec marges',
|
|
||||||
'space-between' => 'Distribué sans marge',
|
|
||||||
];
|
|
||||||
|
|
||||||
public static $galleryThemeAlign = [
|
|
||||||
'left' => 'À gauche',
|
|
||||||
'center' => 'Au centre',
|
|
||||||
'right' => 'À droite'
|
|
||||||
];
|
|
||||||
|
|
||||||
public static $galleryThemeSizeWidth = [
|
|
||||||
'9em' => 'Très petite',
|
|
||||||
'12em' => 'Petite',
|
|
||||||
'15em' => 'Moyenne',
|
|
||||||
'18em' => 'Grande',
|
|
||||||
'21em' => 'Très grande',
|
|
||||||
'100%' => 'Proportionnelle'
|
|
||||||
];
|
|
||||||
|
|
||||||
public static $galleryThemeSizeHeight = [
|
|
||||||
'9em' => 'Très petite',
|
|
||||||
'12em' => 'Petite',
|
|
||||||
'15em' => 'Moyenne',
|
|
||||||
'18em' => 'Grande',
|
|
||||||
'21em' => 'Très grande'
|
|
||||||
];
|
|
||||||
|
|
||||||
public static $galleryThemeLegendHeight = [
|
|
||||||
'.125em' => 'Très petite',
|
|
||||||
'.25em' => 'Petite',
|
|
||||||
'.375em' => 'Moyenne',
|
|
||||||
'.5em' => 'Grande',
|
|
||||||
'.625em' => 'Très grande'
|
|
||||||
];
|
|
||||||
|
|
||||||
public static $galleryThemeBorder = [
|
|
||||||
'0em' => 'Aucune',
|
|
||||||
'.1em' => 'Très fine',
|
|
||||||
'.3em' => 'Fine',
|
|
||||||
'.5em' => 'Moyenne',
|
|
||||||
'.7em' => 'Epaisse',
|
|
||||||
'.9em' => 'Très épaisse'
|
|
||||||
];
|
|
||||||
|
|
||||||
public static $galleryThemeOpacity = [
|
|
||||||
'1' => 'Aucun ',
|
|
||||||
'.9' => 'Très Discrète',
|
|
||||||
'.8' => 'Discrète',
|
|
||||||
'.7' => 'Moyenne',
|
|
||||||
'.6' => 'Forte',
|
|
||||||
'.5' => 'Très forte'
|
|
||||||
];
|
|
||||||
|
|
||||||
public static $galleryThemeMargin = [
|
|
||||||
'0em' => 'Aucune',
|
|
||||||
'.1em' => 'Très petite',
|
|
||||||
'.3em' => 'Petite',
|
|
||||||
'.5em' => 'Moyenne',
|
|
||||||
'.7em' => 'Grande',
|
|
||||||
'.9em' => 'Très grande'
|
|
||||||
];
|
|
||||||
|
|
||||||
public static $galleryThemeRadius = [
|
|
||||||
'0em' => 'Aucun',
|
|
||||||
'.3em' => 'Très léger',
|
|
||||||
'.6em' => 'Léger',
|
|
||||||
'.9em' => 'Moyen',
|
|
||||||
'1.2em' => 'Important',
|
|
||||||
'1.5em' => 'Très important'
|
|
||||||
];
|
|
||||||
|
|
||||||
public static $galleryThemeShadows = [
|
|
||||||
'0px' => 'Aucune',
|
|
||||||
'1px 1px 5px' => 'Très légère',
|
|
||||||
'1px 1px 10px' => 'Légère',
|
|
||||||
'1px 1px 15px' => 'Moyenne',
|
|
||||||
'1px 1px 25px' => 'Importante',
|
|
||||||
'1px 1px 50px' => 'Très importante'
|
|
||||||
];
|
|
||||||
|
|
||||||
public static $galleryOptionBackPosition = [
|
|
||||||
'none' => 'Masqué',
|
|
||||||
'top' => 'Au-dessus',
|
|
||||||
'both' => 'Au-dessus et en dessous',
|
|
||||||
'bottom' => 'En dessous',
|
|
||||||
];
|
|
||||||
public static $galleryOptionBackAlign = [
|
|
||||||
'left' => 'A gauche',
|
|
||||||
'center' => 'Au centre',
|
|
||||||
'right' => 'A droite',
|
|
||||||
];
|
|
||||||
|
|
||||||
public static $formOptionSelect = '';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mise à jour du module
|
* Mise à jour du module
|
||||||
@ -353,7 +252,7 @@ class geogallery extends common
|
|||||||
// Données géographiques
|
// Données géographiques
|
||||||
foreach ((array) $this->getInput('legend', null) as $file => $data) {
|
foreach ((array) $this->getInput('legend', null) as $file => $data) {
|
||||||
$geo[str_replace('.', '', $file)] = [
|
$geo[str_replace('.', '', $file)] = [
|
||||||
'long' => $this->getInput('gpslong[' . $file . ']', helper::FILTER_FLOAT),
|
'long' => $this->getInput('gpslong[' . $file . ']', helper::FILTER_FLOAT),
|
||||||
'lat' => $this->getInput('gpslat[' . $file . ']', helper::FILTER_FLOAT)
|
'lat' => $this->getInput('gpslat[' . $file . ']', helper::FILTER_FLOAT)
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@ -503,26 +402,60 @@ class geogallery extends common
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
$exif = exif_read_data($fileInfos->getPath() . '/' . $fileInfos->getFilename());
|
$exif = exif_read_data($fileInfos->getPath() . '/' . $fileInfos->getFilename());
|
||||||
|
|
||||||
// Vérifier si les données EXIF contiennent des informations de géolocalisation
|
// Vérifier si les données EXIF contiennent des informations de géolocalisation
|
||||||
if (!empty($exif['GPSLatitude']) || !empty($exif['GPSLongitude'])) {
|
if (!empty($exif['GPSLatitude']) || !empty($exif['GPSLongitude'])) {
|
||||||
// Coordonnées
|
// Coordonnées
|
||||||
self::$galleries[] = [
|
self::$galleries[] = [
|
||||||
'lat' => $this->gps_decimal($exif['GPSLatitude'], $exif['GPSLatitudeRef']),
|
'lat' => $this->gps_decimal($exif['GPSLatitude'], $exif['GPSLatitudeRef']),
|
||||||
'long' => $this->gps_decimal($exif['GPSLongitude'], $exif['GPSLatitudeRef']),
|
'long' => $this->gps_decimal($exif['GPSLongitude'], $exif['GPSLatitudeRef']),
|
||||||
'thumb' => str_replace('source', 'thumb', $fileInfos->getPath()) . '/' . self::THUMBS_SEPARATOR . strtolower($fileInfos->getFilename())
|
'thumb' => str_replace('source', 'thumb', $fileInfos->getPath()) . '/' . self::THUMBS_SEPARATOR . strtolower($fileInfos->getFilename()),
|
||||||
|
'label' => $this->getData(['module', $this->getUrl(0), 'content', $gallery, 'legend', str_replace('.', '', $fileInfos->getFilename())])
|
||||||
];
|
];
|
||||||
} else {
|
} else {
|
||||||
self::$galleries[] = [
|
self::$galleries[] = [
|
||||||
'lat' => $this->getData(['module', $this->getUrl(0), 'content', $gallery, 'positions', 'directory', str_replace('.', '', $fileInfos->getFilename())]) ,
|
'lat' => $this->getData(['module', $this->getUrl(0), 'content', $gallery, 'positions', 'directory', str_replace('.', '', $fileInfos->getFilename())]),
|
||||||
'long' => $this->getData(['module', $this->getUrl(0), 'content', $gallery, 'positions', 'directory', str_replace('.', '', $fileInfos->getFilename())]),
|
'long' => $this->getData(['module', $this->getUrl(0), 'content', $gallery, 'positions', 'directory', str_replace('.', '', $fileInfos->getFilename())]),
|
||||||
'thumb' => str_replace('source', 'thumb', $fileInfos->getPath()) . '/' . self::THUMBS_SEPARATOR . strtolower($fileInfos->getFilename())
|
'thumb' => str_replace('source', 'thumb', $fileInfos->getPath()) . '/' . self::THUMBS_SEPARATOR . strtolower($fileInfos->getFilename()),
|
||||||
|
'label' => $this->getData(['module', $this->getUrl(0), 'content', $gallery, 'legend', str_replace('.', '', $fileInfos->getFilename())])
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Calcul du point central
|
||||||
|
|
||||||
|
// Calculer le centre géographique
|
||||||
|
$totalLat = 0;
|
||||||
|
$totalLong = 0;
|
||||||
|
$count = count(self::$galleries);
|
||||||
|
|
||||||
|
foreach (self::$galleries as $coordinate) {
|
||||||
|
$totalLat += $coordinate["lat"];
|
||||||
|
$totalLong += $coordinate["long"];
|
||||||
|
}
|
||||||
|
|
||||||
|
$centerLat = $totalLat / $count;
|
||||||
|
$centerLong = $totalLong / $count;
|
||||||
|
|
||||||
|
// Calculer la distance maximale au centre pour déterminer le niveau de zoom
|
||||||
|
$maxDistance = 0;
|
||||||
|
foreach (self::$galleries as $coordinate) {
|
||||||
|
$distance = $this->haversineGreatCircleDistance($centerLat, $centerLong, $coordinate["lat"], $coordinate["long"]);
|
||||||
|
if ($distance > $maxDistance) {
|
||||||
|
$maxDistance = $distance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$zoomLevel = $this->getZoomLevel($maxDistance);
|
||||||
|
|
||||||
|
self::$galleriesCenter = array(
|
||||||
|
'lat' => $centerLat,
|
||||||
|
'long' => $centerLong,
|
||||||
|
'zoom' => $zoomLevel
|
||||||
|
);
|
||||||
|
|
||||||
// Affichage du template
|
// Affichage du template
|
||||||
if (self::$galleries) {
|
if (self::$galleries) {
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
@ -603,6 +536,37 @@ class geogallery extends common
|
|||||||
return floatval($parts[0]) / floatval($parts[1]);
|
return floatval($parts[0]) / floatval($parts[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fonction pour calculer la distance entre deux points géographiques
|
||||||
|
private function haversineGreatCircleDistance($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371)
|
||||||
|
{
|
||||||
|
$latFrom = deg2rad($latitudeFrom);
|
||||||
|
$lonFrom = deg2rad($longitudeFrom);
|
||||||
|
$latTo = deg2rad($latitudeTo);
|
||||||
|
$lonTo = deg2rad($longitudeTo);
|
||||||
|
|
||||||
|
$latDelta = $latTo - $latFrom;
|
||||||
|
$lonDelta = $lonTo - $lonFrom;
|
||||||
|
|
||||||
|
$angle = 2 * asin(sqrt(pow(sin($latDelta / 2), 2) +
|
||||||
|
cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2)));
|
||||||
|
return $angle * $earthRadius;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Déterminer le niveau de zoom
|
||||||
|
// Cette fonction est une approximation pour le calcul du zoom
|
||||||
|
private function getZoomLevel($maxDistance)
|
||||||
|
{
|
||||||
|
$maxZoom = 21; // Le zoom maximal pour Leaflet
|
||||||
|
$earthCircumference = 40075; // La circonférence de la Terre en km
|
||||||
|
|
||||||
|
for ($zoom = $maxZoom; $zoom >= 0; $zoom--) {
|
||||||
|
if ($maxDistance < ($earthCircumference / pow(2, $zoom))) {
|
||||||
|
return $zoom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class geogalleriesHelper extends helper
|
class geogalleriesHelper extends helper
|
||||||
|
@ -12,14 +12,20 @@
|
|||||||
* @link http://zwiicms.fr/
|
* @link http://zwiicms.fr/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// Centrage de la carte et niveau de zoom
|
||||||
|
const jsonOptions = '<?php echo json_encode($module::$galleriesCenter); ?>';
|
||||||
|
const objOptions = JSON.parse(jsonOptions);
|
||||||
|
|
||||||
// Initialisation de la carte
|
// Initialisation de la carte
|
||||||
var map = L.map('map').setView([51.505, -0.09], 2);
|
var map = L.map('map').setView([objOptions.lat, objOptions.long], objOptions.zoom - 1);
|
||||||
|
|
||||||
// Ajouter une couche de tuiles OpenStreetMap
|
// Ajouter une couche de tuiles OpenStreetMap
|
||||||
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||||||
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
||||||
}).addTo(map);
|
}).addTo(map);
|
||||||
|
|
||||||
|
|
||||||
// Les données PHP converties en JSON pour JavaScript
|
// Les données PHP converties en JSON pour JavaScript
|
||||||
const json = '<?php echo json_encode($module::$galleries); ?>';
|
const json = '<?php echo json_encode($module::$galleries); ?>';
|
||||||
const obj = JSON.parse(json);
|
const obj = JSON.parse(json);
|
||||||
@ -27,6 +33,7 @@
|
|||||||
|
|
||||||
// Ajouter les marqueurs à la carte
|
// Ajouter les marqueurs à la carte
|
||||||
obj.forEach(function(location) {
|
obj.forEach(function(location) {
|
||||||
var marker = L.marker([location.lat, location.long]).addTo(map);
|
var marker = L.marker([location.lat, location.long], {title: location.label});
|
||||||
marker.bindPopup('<img src="' + location.thumb + '" alt="Thumbnail" style="width:100px;height:auto;"><br>Latitude: ' + location.lat + '<br>Longitude: ' + location.long);
|
marker.addTo(map);
|
||||||
|
marker.bindPopup('<a href="' + location.thumb + '" data-lity><img src="' + location.thumb + '" alt="Thumbnail" class="thumbnail"></a>');
|
||||||
});
|
});
|
Loading…
Reference in New Issue
Block a user