added date and photo type filter

This commit is contained in:
mattiapezzotti
2024-06-13 00:55:21 +02:00
parent baa426d594
commit 15b1f6111e
3 changed files with 61 additions and 7 deletions

View File

@@ -119,12 +119,12 @@ export function rendererPhotos(context) {
}
photos.shouldFilterByDate = function() {
return showsLayer('mapillary') || showsLayer('kartaview') || showsLayer('streetside') || showsLayer('vegbilder');
return showsLayer('mapillary') || showsLayer('kartaview') || showsLayer('streetside') || showsLayer('vegbilder') || showsLayer('panoramax');
};
photos.shouldFilterByPhotoType = function() {
return showsLayer('mapillary') ||
(showsLayer('streetside') && showsLayer('kartaview')) || showsLayer('vegbilder');
(showsLayer('streetside') && showsLayer('kartaview')) || showsLayer('vegbilder') || showsLayer('panoramax');
};
photos.shouldFilterByUsername = function() {

View File

@@ -162,7 +162,7 @@ function loadTileDataToCache(data, tile) {
sequence_id: feature.properties.sequences.split("\"")[1],
heading: feature.properties.heading,
resolution: feature.properties.resolution,
type: feature.properties.type,
isPano: feature.properties.type === "equirectangular",
model: feature.properties.model,
};
cache.forImageId[d.id] = d;
@@ -317,7 +317,7 @@ export default {
function viewfieldPath() {
let d = this.parentNode.__data__;
if (d.type == "equirectangular" && d.id !== selectedImageId) {
if (d.isPano && d.id !== selectedImageId) {
return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
} else {
return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
@@ -471,7 +471,7 @@ export default {
.selectAll('button.forward')
.classed('hide', _currentScene.nextImage == null);
if (d.type == "equirectangular") {
if (d.isPano) {
_sceneOptions.type = "equirectangular";
if (!_pannellumViewer) {
that.initViewer();
@@ -568,7 +568,7 @@ export default {
// continue dispatching events for a few seconds, in case viewer has inertia.
let t = d3_timer(elapsed => {
dispatch.call('viewerChanged');
if (elapsed > 2000) {
if (elapsed > 1000) {
t.stop();
}
});

View File

@@ -34,6 +34,57 @@ export function svgPanoramaxImages(projection, context, dispatch) {
return _panoramax;
}
function filterImages(images) {
const showsPano = context.photos().showsPanoramic();
const showsFlat = context.photos().showsFlat();
const fromDate = context.photos().fromDate();
const toDate = context.photos().toDate();
if (!showsPano || !showsFlat) {
images = images.filter(function(image) {
if (image.isPano) return showsPano;
return showsFlat;
});
}
if (fromDate) {
images = images.filter(function(image) {
return new Date(image.capture_time).getTime() >= new Date(fromDate).getTime();
});
}
if (toDate) {
images = images.filter(function(image) {
return new Date(image.capture_time).getTime() <= new Date(toDate).getTime();
});
}
return images;
}
function filterSequences(sequences) {
const showsPano = context.photos().showsPanoramic();
const showsFlat = context.photos().showsFlat();
const fromDate = context.photos().fromDate();
const toDate = context.photos().toDate();
if (!showsPano || !showsFlat) {
sequences = sequences.filter(function(sequence) {
if (sequence.properties.type === "equirectangular") return showsPano;
return showsFlat;
});
}
if (fromDate) {
sequences = sequences.filter(function(sequence) {
return new Date(sequence.properties.date).getTime() >= new Date(fromDate).getTime().toString();
});
}
if (toDate) {
sequences = sequences.filter(function(sequence) {
return new Date(sequence.properties.date).getTime() <= new Date(toDate).getTime().toString();
});
}
return sequences;
}
function showLayer() {
const service = getService();
@@ -122,6 +173,9 @@ export function svgPanoramaxImages(projection, context, dispatch) {
let sequences = (service ? service.sequences(projection) : []);
let images = (service ? service.images(projection) : []);
images = filterImages(images);
sequences = filterSequences(sequences, service);
let traces = layer.selectAll('.sequences').selectAll('.sequence')
.data(sequences, function(d) { return d.id; });
@@ -186,7 +240,7 @@ export function svgPanoramaxImages(projection, context, dispatch) {
.attr('d', viewfieldPath);
function viewfieldPath() {
if (this.parentNode.__data__.type == "equirectangular") {
if (this.parentNode.__data__.isPano) {
return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
} else {
return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';