145 lines
2.8 KiB
JavaScript
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,
|
|
};
|
|
})();
|