240 lines
4.1 KiB
JavaScript
240 lines
4.1 KiB
JavaScript
// public/js/map/activities/activitySource.js
|
|
// ===================================
|
|
// ACTIVITY SOURCE
|
|
// ===================================
|
|
|
|
(() => {
|
|
"use strict";
|
|
|
|
const SOURCE_ID = "activities";
|
|
const CLUSTER_RADIUS = 80;
|
|
|
|
// ===============================
|
|
// CREATE SOURCE
|
|
// ===============================
|
|
|
|
function createActivitySource(
|
|
map,
|
|
features = [],
|
|
) {
|
|
if (!map) {
|
|
return null;
|
|
}
|
|
|
|
if (!map.isStyleLoaded()) {
|
|
console.log(
|
|
"[ActivitySource] create rimandato: style non pronto",
|
|
);
|
|
|
|
return null;
|
|
}
|
|
|
|
const existingSource =
|
|
map.getSource(SOURCE_ID);
|
|
|
|
if (existingSource) {
|
|
existingSource.setData({
|
|
type: "FeatureCollection",
|
|
features,
|
|
});
|
|
|
|
return existingSource;
|
|
}
|
|
|
|
const data = {
|
|
type: "FeatureCollection",
|
|
features,
|
|
};
|
|
|
|
console.log(
|
|
"[ActivitySource] creo source activities",
|
|
{
|
|
features: features.length,
|
|
},
|
|
);
|
|
|
|
map.addSource(SOURCE_ID, {
|
|
type: "geojson",
|
|
data,
|
|
|
|
cluster: true,
|
|
clusterRadius: CLUSTER_RADIUS,
|
|
});
|
|
|
|
console.log(
|
|
"[ActivitySource] source activities creata",
|
|
{
|
|
source:
|
|
!!map.getSource(SOURCE_ID),
|
|
},
|
|
);
|
|
|
|
return map.getSource(SOURCE_ID);
|
|
}
|
|
|
|
// ===============================
|
|
// UPDATE SOURCE
|
|
// ===============================
|
|
|
|
function updateActivitySource(
|
|
map,
|
|
features = [],
|
|
) {
|
|
if (!map) {
|
|
return null;
|
|
}
|
|
|
|
console.log(
|
|
"[ActivitySource.update]",
|
|
{
|
|
features: features.length,
|
|
styleLoaded: map.isStyleLoaded(),
|
|
sourceExists: !!map.getSource("activities"),
|
|
}
|
|
)
|
|
|
|
if (!map.isStyleLoaded()) {
|
|
console.log(
|
|
"[ActivitySource] update rimandato: style non pronto",
|
|
);
|
|
|
|
return null;
|
|
}
|
|
|
|
const data = {
|
|
type: "FeatureCollection",
|
|
features,
|
|
};
|
|
|
|
const source =
|
|
map.getSource(SOURCE_ID);
|
|
|
|
// --------------------------------
|
|
// SOURCE ESISTENTE
|
|
// --------------------------------
|
|
|
|
if (source) {
|
|
source.setData(data);
|
|
|
|
console.log(
|
|
"[ActivitySource] source aggiornata",
|
|
{
|
|
features: features.length,
|
|
},
|
|
);
|
|
|
|
return source;
|
|
}
|
|
|
|
// --------------------------------
|
|
// SOURCE NON ESISTENTE
|
|
// --------------------------------
|
|
|
|
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 CLUSTERS
|
|
// ===============================
|
|
|
|
function getActivitySourceClusters(map) {
|
|
if (!map) {
|
|
return [];
|
|
}
|
|
|
|
if (!map.getSource(SOURCE_ID)) {
|
|
return [];
|
|
}
|
|
|
|
return map.querySourceFeatures(
|
|
SOURCE_ID,
|
|
{
|
|
filter: [
|
|
"has",
|
|
"point_count",
|
|
],
|
|
},
|
|
);
|
|
}
|
|
|
|
// ===============================
|
|
// GET POINTS
|
|
// ===============================
|
|
|
|
function getActivitySourcePoints(map) {
|
|
if (!map) {
|
|
return [];
|
|
}
|
|
|
|
if (!map.getSource(SOURCE_ID)) {
|
|
return [];
|
|
}
|
|
|
|
return map.querySourceFeatures(
|
|
SOURCE_ID,
|
|
{
|
|
filter: [
|
|
"!",
|
|
["has", "point_count"],
|
|
],
|
|
},
|
|
);
|
|
}
|
|
|
|
// ===============================
|
|
// PUBLIC API
|
|
// ===============================
|
|
|
|
window.ActivitySource = {
|
|
create:
|
|
createActivitySource,
|
|
|
|
update:
|
|
updateActivitySource,
|
|
|
|
get:
|
|
getActivitySource,
|
|
|
|
getFeatures:
|
|
getActivitySourceFeatures,
|
|
|
|
getClusters:
|
|
getActivitySourceClusters,
|
|
|
|
getPoints:
|
|
getActivitySourcePoints,
|
|
};
|
|
})();
|