// public/js/map/photos/photoSource.js // =================================== // PHOTO SOURCE // =================================== (() => { "use strict"; function createPhotoSource(map, features = []) { if (!map) { return null; } const data = { type: "FeatureCollection", features, }; const existingSource = map.getSource("photos"); if (existingSource) { existingSource.setData(data); return existingSource; } map.addSource("photos", { type: "geojson", data, cluster: true, clusterRadius: 80, }); return map.getSource("photos"); } function updatePhotoSource(map, features = []) { if (!map) { return; } if (!map.isStyleLoaded()) { return; } const source = map.getSource("photos"); const data = { type: "FeatureCollection", features, }; if (source) { source.setData(data); return; } createPhotoSource(map, features); } function getPhotoSource(map) { if (!map) { return null; } return map.getSource("photos") || null; } function getPhotoSourceFeatures(map) { const source = getPhotoSource(map); if (!source) { return []; } return source._data?.features || []; } function getPhotoSourceClusters(map) { if (!map) { return []; } return map.querySourceFeatures("photos", { filter: ["has", "point_count"], }); } function getPhotoSourcePoints(map) { if (!map) { return []; } return map.querySourceFeatures("photos", { filter: ["!", ["has", "point_count"]], }); } window.PhotoSource = { create: createPhotoSource, update: updatePhotoSource, get: getPhotoSource, getFeatures: getPhotoSourceFeatures, getClusters: getPhotoSourceClusters, getPoints: getPhotoSourcePoints, }; })();