server_photo_s85js/public/js/map/activities/activitySource.js
2026-08-11 08:45:04 +02:00

145 lines
2.8 KiB
JavaScript

// public/js/map/activities/activitySource.js
// ===================================
// ACTIVITY SOURCE
// ===================================
(() => {
"use strict";
const SOURCE_ID = "activities";
// ===================================
// CREA SOURCE
// ===================================
function createActivitySource(map, features = []) {
if (!map) {
return null;
}
const data = {
type: "FeatureCollection",
features,
};
const existingSource = map.getSource(SOURCE_ID);
if (existingSource) {
existingSource.setData(data);
return existingSource;
}
map.addSource(SOURCE_ID, {
type: "geojson",
data,
cluster: true,
clusterRadius: 80,
});
return map.getSource(SOURCE_ID);
}
// ===================================
// AGGIORNA SOURCE
// ===================================
function updateActivitySource(map, features = []) {
if (!map) {
return;
}
if (!map.isStyleLoaded()) {
return;
}
const data = {
type: "FeatureCollection",
features,
};
const source = map.getSource(SOURCE_ID);
if (source) {
source.setData(data);
return;
}
createActivitySource(map, features);
}
// ===================================
// GET SOURCE
// ===================================
function getActivitySource(map) {
if (!map) {
return null;
}
return map.getSource(SOURCE_ID) || null;
}
// ===================================
// GET FEATURES
// ===================================
function getActivitySourceFeatures(map) {
const source = getActivitySource(map);
if (!source) {
return [];
}
return source._data?.features || [];
}
// ===================================
// GET CLUSTER
// ===================================
function getActivitySourceClusters(map) {
if (!map) {
return [];
}
if (!map.getSource(SOURCE_ID)) {
return [];
}
return map.querySourceFeatures(SOURCE_ID, {
filter: ["has", "point_count"],
});
}
// ===================================
// GET PUNTI
// ===================================
function getActivitySourcePoints(map) {
if (!map) {
return [];
}
if (!map.getSource(SOURCE_ID)) {
return [];
}
return map.querySourceFeatures(SOURCE_ID, {
filter: ["!", ["has", "point_count"]],
});
}
// ===================================
// API PUBBLICA
// ===================================
window.ActivitySource = {
create: createActivitySource,
update: updateActivitySource,
get: getActivitySource,
getFeatures: getActivitySourceFeatures,
getClusters: getActivitySourceClusters,
getPoints: getActivitySourcePoints,
};
})();