diff --git a/modules/services/vegbilder.js b/modules/services/vegbilder.js index 2d04bdaf4..752d626f1 100644 --- a/modules/services/vegbilder.js +++ b/modules/services/vegbilder.js @@ -76,17 +76,20 @@ function filterAvailableLayers(photoContex) { function loadWFSLayers(projection, margin, layers) { const tiles = tiler.margin(margin).getTiles(projection); - Promise.all(layers.map( - ({name}) => loadWFSLayer(name, tiles) - )) - .then(() => orderSequences(projection)); + for (const {name} of layers) { + loadWFSLayer(projection, name, tiles); + } } -async function loadWFSLayer(layername, tiles) { +function loadWFSLayer(projection, layername, tiles) { let cache = _vegbilderCache.wfslayers.get(layername); if (!cache) { - cache = {loaded: new Map(), inflight: new Map()}; + cache = { + loaded: new Map(), + inflight: new Map(), + points: new Map(), + sequences: []}; _vegbilderCache.wfslayers.set(layername, cache); } @@ -99,9 +102,9 @@ async function loadWFSLayer(layername, tiles) { } } - await Promise.all(tiles.map( + Promise.all(tiles.map( tile => loadTile(cache, layername, tile) - )); + )).then(() => orderSequences(projection, cache)); } /** @@ -166,7 +169,6 @@ async function loadTile(cache, layername, tile) { ca, image_path, preview_path, - layername, road_reference: roadReference(properties), metering, lane_code, @@ -175,7 +177,7 @@ async function loadTile(cache, layername, tile) { is_sphere: image_type === '360' }; - _vegbilderCache.points.set(key, data); + cache.points.set(key, data); return { minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data @@ -186,14 +188,12 @@ async function loadTile(cache, layername, tile) { dispatch.call('loadedImages'); } -function orderSequences(projection) { - const {points} = _vegbilderCache; - if (points.size === 0) return; - +function orderSequences(projection, cache) { const imageSequences = []; + const {points} = cache; const grouped = Array.from(points.values()).reduce((mapping, image) => { - let key = `${image.layername} ${image.road_reference}`; + let key = image.road_reference; if (mapping.has(key)) { mapping.get(key).push(image); } else { @@ -241,7 +241,7 @@ function orderSequences(projection) { imageSequences.push(imageSequence); } - _vegbilderCache.sequences = imageSequences.map(images => { + cache.sequences = imageSequences.map(images => { const seqence = { images, key: images[0].key, @@ -256,7 +256,6 @@ function orderSequences(projection) { }); } - function roadReference(properties) { let { FYLKENUMMER: county_number, @@ -337,8 +336,6 @@ export default { _vegbilderCache = { wfslayers: new Map(), rtree: new RBush(), - points: new Map(), - sequences: new Map(), image2sequence_map: new Map() }; @@ -377,9 +374,10 @@ export default { return line_strings; }, - cachedImage: function (key) { - return _vegbilderCache.points.get(key); + for (const {points} of _vegbilderCache.wfslayers.values()) { + if (points.has(key)) return points.get(key); + } }, getSequenceForImage: function (image) { diff --git a/modules/svg/vegbilder.js b/modules/svg/vegbilder.js index 8b1cc9a2e..98d53fe14 100644 --- a/modules/svg/vegbilder.js +++ b/modules/svg/vegbilder.js @@ -189,7 +189,7 @@ export function svgVegbilder(projection, context, dispatch) { if (toDateString) { const toDate = new Date(toDateString); - sequences = sequences.filter(({images}) => images[-1].captured_at.getTime() <= toDate.getTime()); + sequences = sequences.filter(({images}) => images[images.length - 1].captured_at.getTime() <= toDate.getTime()); } if (!showsPano) { diff --git a/test/spec/services/vegbilder.js b/test/spec/services/vegbilder.js index dd4f98f32..2839d2d22 100644 --- a/test/spec/services/vegbilder.js +++ b/test/spec/services/vegbilder.js @@ -30,7 +30,7 @@ describe('iD.serviceVegbilder', function() { const cache = vegbilder.cache(); expect(cache).to.have.property('wfslayers'); expect(cache).to.have.property('rtree'); - expect(cache).to.have.property('sequences'); + expect(cache).to.have.property('image2sequence_map'); vegbilder.init(); const cache2 = vegbilder.cache();