mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-15 07:42:23 +00:00
Street Level: drop the unused coverageLines diagnostics
Nothing reads the drawn coverage lines: the browser gate aims elsewhere, so lineCoverage's drawnLines, the providers' coverageLines and the layer's coverageLines go, with their tests and the doc mention.
This commit is contained in:
1 parent
e34b5103c6
commit
c76832ca69
10 files changed
+2
-139
No files matched your search
@@ -5121,9 +5121,8 @@ app.
|
|||||||
(`revealPanel`, which does nothing above 720px).
|
(`revealPanel`, which does nothing above 720px).
|
||||||
|
|
||||||
The layer also exposes `requiredMapStack(id)` and `providerStatus(id)` for
|
The layer also exposes `requiredMapStack(id)` and `providerStatus(id)` for
|
||||||
callers that decide before the panel lists a source, `holdViewer()`, and
|
callers that decide before the panel lists a source, and `holdViewer()`. A
|
||||||
`coverageLines(id)` (the lines a provider draws now, as `[lon, lat]` parts)
|
caller's abort is honoured through the viewer's mount and
|
||||||
for diagnostics. A caller's abort is honoured through the viewer's mount and
|
|
||||||
load, and only the lookup that still owns the panel changes its spinner or
|
load, and only the lookup that still owns the panel changes its spinner or
|
||||||
error.
|
error.
|
||||||
|
|
||||||
|
|||||||
@@ -515,10 +515,6 @@ export function createStreetLevelLayer({
|
|||||||
const def = defs.find((entry) => entry.id === providerId);
|
const def = defs.find((entry) => entry.id === providerId);
|
||||||
return def?.requiresMapStack || null;
|
return def?.requiresMapStack || null;
|
||||||
},
|
},
|
||||||
/** The coverage lines a provider draws now (see `coverageLines`). */
|
|
||||||
coverageLines(providerId) {
|
|
||||||
return state.providers.get(providerId)?.instance.coverageLines?.() ?? [];
|
|
||||||
},
|
|
||||||
/**
|
/**
|
||||||
* A provider's name and key state on any map (the panel lists a provider
|
* A provider's name and key state on any map (the panel lists a provider
|
||||||
* only on the map it needs). `configured` is null until its status call
|
* only on the map it needs). `configured` is null until its status call
|
||||||
|
|||||||
@@ -1604,43 +1604,6 @@ test('the action over the real layer: a billed link arms without a lookup, and o
|
|||||||
assert.equal(fake.lookups.length, before + 2);
|
assert.equal(fake.lookups.length, before + 2);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('coverageLines hands back what a provider draws, and nothing for providers without lines', async (t) => {
|
|
||||||
const drawing = fakeProvider();
|
|
||||||
const create = drawing.create;
|
|
||||||
drawing.create = (context) => ({
|
|
||||||
...create(context),
|
|
||||||
coverageLines: () => [
|
|
||||||
{
|
|
||||||
id: 's1',
|
|
||||||
parts: [
|
|
||||||
[
|
|
||||||
[1, 2],
|
|
||||||
[1, 2.001],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
|
||||||
const { layer } = await enabledLayer(t, [drawing]);
|
|
||||||
assert.deepEqual(layer.coverageLines(drawing.id), [
|
|
||||||
{
|
|
||||||
id: 's1',
|
|
||||||
parts: [
|
|
||||||
[
|
|
||||||
[1, 2],
|
|
||||||
[1, 2.001],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
assert.deepEqual(layer.coverageLines('nope'), []);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('coverageLines is empty for a provider that draws no coverage', async (t) => {
|
|
||||||
const { layer } = await enabledLayer(t, [fakeProvider()]);
|
|
||||||
assert.deepEqual(layer.coverageLines(fakeProvider().id), []);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('openNearest keeps honouring the caller after the lookup: an abort while the viewer loads opens nothing', async (t) => {
|
test('openNearest keeps honouring the caller after the lookup: an abort while the viewer loads opens nothing', async (t) => {
|
||||||
let releaseMount = null;
|
let releaseMount = null;
|
||||||
const provider = fakeProvider({ nearestImage: async () => 'img-1' });
|
const provider = fakeProvider({ nearestImage: async () => 'img-1' });
|
||||||
|
|||||||
@@ -531,24 +531,6 @@ export function createLineCoverage({
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* The sequence lines drawn now, as `[lon, lat]` parts per sequence, for
|
|
||||||
* diagnostics: what each tile drew (`attachPrimitive` keeps it in
|
|
||||||
* `entry.sequences`). Read-only copies.
|
|
||||||
*/
|
|
||||||
function drawnLines() {
|
|
||||||
const lines = [];
|
|
||||||
for (const entry of state.coverage.tiles.values())
|
|
||||||
for (const sequence of entry.sequences.values())
|
|
||||||
lines.push({
|
|
||||||
id: sequence.id,
|
|
||||||
parts: (sequence.parts || []).map((part) =>
|
|
||||||
part.map(([lon, lat]) => [lon, lat]),
|
|
||||||
),
|
|
||||||
});
|
|
||||||
return lines;
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
attach,
|
attach,
|
||||||
detach,
|
detach,
|
||||||
@@ -561,6 +543,5 @@ export function createLineCoverage({
|
|||||||
highlight,
|
highlight,
|
||||||
sequenceCount,
|
sequenceCount,
|
||||||
stats,
|
stats,
|
||||||
drawnLines,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -654,67 +654,3 @@ test('the selected sequence is drawn and highlighted even past the per-tile cap'
|
|||||||
assert.ok(state.coverage.highlight, 'the selected line is highlighted');
|
assert.ok(state.coverage.highlight, 'the selected line is highlighted');
|
||||||
coverage.clear();
|
coverage.clear();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('drawnLines reports the lines on the globe as [lon, lat] copies, filtered like the drawing', async () => {
|
|
||||||
const { source, state, coverage, centre } = setup();
|
|
||||||
assert.deepEqual(coverage.drawnLines(), [], 'nothing before a tile');
|
|
||||||
const sequences = [
|
|
||||||
{
|
|
||||||
id: 'flat-1',
|
|
||||||
parts: [
|
|
||||||
[
|
|
||||||
[centre.lon - 0.001, centre.lat],
|
|
||||||
[centre.lon + 0.001, centre.lat],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
capturedAt: 2_000_000_000_000,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'pano-1',
|
|
||||||
parts: [
|
|
||||||
[
|
|
||||||
[centre.lon, centre.lat - 0.001],
|
|
||||||
[centre.lon, centre.lat],
|
|
||||||
[centre.lon, centre.lat + 0.001],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
capturedAt: 1_000_000_000_000,
|
|
||||||
isPano: true,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
state.filter = { pano: 'pano', sinceDays: 0 };
|
|
||||||
coverage.refresh();
|
|
||||||
source.calls[0].resolve(encodeCoverageTile(centre.tile, { sequences }));
|
|
||||||
await settle();
|
|
||||||
const lines = coverage.drawnLines();
|
|
||||||
assert.deepEqual(
|
|
||||||
lines.map((line) => line.id),
|
|
||||||
['pano-1'],
|
|
||||||
'only the drawn (filtered) lines',
|
|
||||||
);
|
|
||||||
assert.equal(lines[0].parts.length, 1);
|
|
||||||
assert.equal(lines[0].parts[0].length, 3);
|
|
||||||
// Tile coordinates are quantised to the tile grid (a few metres at z14).
|
|
||||||
const [midLon, midLat] = lines[0].parts[0][1];
|
|
||||||
assert.ok(
|
|
||||||
Math.abs(midLon - centre.lon) < 1e-4 &&
|
|
||||||
Math.abs(midLat - centre.lat) < 1e-4,
|
|
||||||
`coordinates as [lon, lat]: ${midLon}, ${midLat} vs ${centre.lon}, ${centre.lat}`,
|
|
||||||
);
|
|
||||||
assert.ok(
|
|
||||||
lines[0].parts[0][0][1] < lines[0].parts[0][2][1],
|
|
||||||
'vertex order kept: south to north',
|
|
||||||
);
|
|
||||||
// Copies: a caller cannot bend the drawn line.
|
|
||||||
lines[0].parts[0][1][0] = 0;
|
|
||||||
assert.notEqual(coverage.drawnLines()[0].parts[0][1][0], 0);
|
|
||||||
state.filter = { pano: 'all', sinceDays: 0 };
|
|
||||||
coverage.rebuild();
|
|
||||||
assert.deepEqual(
|
|
||||||
coverage
|
|
||||||
.drawnLines()
|
|
||||||
.map((line) => line.id)
|
|
||||||
.sort(),
|
|
||||||
['flat-1', 'pano-1'],
|
|
||||||
);
|
|
||||||
});
|
|
||||||
@@ -535,7 +535,6 @@ export function createKartaViewProvider({
|
|||||||
loading: state.sequence.loading,
|
loading: state.sequence.loading,
|
||||||
error: state.sequence.error,
|
error: state.sequence.error,
|
||||||
}),
|
}),
|
||||||
coverageLines: () => coverage.drawnLines(),
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The nearest photo within the search radius that can be shown, or
|
* The nearest photo within the search radius that can be shown, or
|
||||||
|
|||||||
@@ -196,7 +196,6 @@ export function createMapillaryProvider({ source, photoViewer = null }) {
|
|||||||
loading: state.sequence.loading,
|
loading: state.sequence.loading,
|
||||||
error: state.sequence.error,
|
error: state.sequence.error,
|
||||||
}),
|
}),
|
||||||
coverageLines: () => parts.coverage.drawnLines(),
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The nearest image that passes the imagery filter, or null: what
|
* The nearest image that passes the imagery filter, or null: what
|
||||||
|
|||||||
@@ -526,9 +526,6 @@ export function createPanoramaxProvider({
|
|||||||
cones.clearSelection();
|
cones.clearSelection();
|
||||||
drawn = null;
|
drawn = null;
|
||||||
},
|
},
|
||||||
// The lines drawn now (current and stale tiles), as [lon, lat]
|
|
||||||
// parts, for diagnostics and the browser gate's line clicks.
|
|
||||||
coverageLines: () => coverage.drawnLines(),
|
|
||||||
sequenceStats: () => ({
|
sequenceStats: () => ({
|
||||||
selectedId: state.sequence.selectedId,
|
selectedId: state.sequence.selectedId,
|
||||||
images: state.sequence.images.length,
|
images: state.sequence.images.length,
|
||||||
|
|||||||
@@ -1182,9 +1182,3 @@ test('a busy or timed-out tile keeps its own message; only a body that is not a
|
|||||||
assert.equal(env.instance.sequenceStats().error, failure.message);
|
assert.equal(env.instance.sequenceStats().error, failure.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test('coverageLines exposes the drawn lines, none before any tile', () => {
|
|
||||||
const { instance } = setup();
|
|
||||||
assert.equal(typeof instance.coverageLines, 'function');
|
|
||||||
assert.deepEqual(instance.coverageLines(), []);
|
|
||||||
});
|
|
||||||
@@ -51,7 +51,6 @@ export function filtersOf(provider) {
|
|||||||
* @property {(sequenceId: string) => Promise<void>} [selectSequence]
|
* @property {(sequenceId: string) => Promise<void>} [selectSequence]
|
||||||
* @property {() => void} [clearSequence]
|
* @property {() => void} [clearSequence]
|
||||||
* @property {() => {selectedId: string|null, images: number, loading: boolean, error?: string|null}} [sequenceStats]
|
* @property {() => {selectedId: string|null, images: number, loading: boolean, error?: string|null}} [sequenceStats]
|
||||||
* @property {() => Array<{id: string, parts: Array<Array<[number, number]>>}>} [coverageLines] The coverage lines drawn now, as [lon, lat] parts (diagnostics).
|
|
||||||
* @property {(point: {lat: number, lon: number}, options?: {signal?: AbortSignal, radiusM?: number}) => Promise<string|null>} [nearestImage] For ground clicks and `openNearest`; an aborted lookup gives up (it may reject with an AbortError). `radiusM` asks for a wider search than NEAREST_RADIUS_M; a provider that cannot search wider ignores it.
|
* @property {(point: {lat: number, lon: number}, options?: {signal?: AbortSignal, radiusM?: number}) => Promise<string|null>} [nearestImage] For ground clicks and `openNearest`; an aborted lookup gives up (it may reject with an AbortError). `radiusM` asks for a wider search than NEAREST_RADIUS_M; a provider that cannot search wider ignores it.
|
||||||
* @property {ViewerAdapter} viewer
|
* @property {ViewerAdapter} viewer
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in new issue
Block a user