mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-04 10:24:02 +00:00
115 lines
3.7 KiB
JavaScript
115 lines
3.7 KiB
JavaScript
import { PbfWriter } from 'pbf';
|
|
|
|
const json = (body) => ({
|
|
status: 200,
|
|
contentType: 'application/json',
|
|
body: JSON.stringify(body),
|
|
});
|
|
|
|
// Cesium heightmap-1.0: 65x65 little-endian uint16 heights, scale .2,
|
|
// offset -1000, followed by child availability and a uniform land mask.
|
|
const flatTerrain = Buffer.alloc(65 * 65 * 2 + 2);
|
|
for (let i = 0; i < 65 * 65; i++) flatTerrain.writeUInt16LE(5000, i * 2);
|
|
|
|
/** Synthetic, geographically aligned motor roads at both source zooms. */
|
|
export function trafficFixtureTile(zoom, flow = false) {
|
|
const writer = new PbfWriter();
|
|
writer.writeMessage(
|
|
3,
|
|
(_, layer) => {
|
|
layer.writeVarintField(15, 2);
|
|
layer.writeStringField(1, flow ? 'Traffic flow' : 'transportation');
|
|
layer.writeVarintField(5, 4096);
|
|
layer.writeStringField(3, flow ? 'traffic_level' : 'class');
|
|
layer.writeMessage(
|
|
4,
|
|
(_, value) => {
|
|
if (flow) value.writeDoubleField(3, 0.6);
|
|
else value.writeStringField(1, 'primary');
|
|
},
|
|
null,
|
|
);
|
|
if (flow) {
|
|
layer.writeStringField(3, 'road_type');
|
|
layer.writeMessage(
|
|
4,
|
|
(_, value) => value.writeStringField(1, 'Major road'),
|
|
null,
|
|
);
|
|
}
|
|
// z12 has four times the span of z14. Keep the same world spacing,
|
|
// and cover only alternate roads with flow to exercise hide/sim controls.
|
|
const step = 256 * 2 ** (zoom - 14);
|
|
for (let y = step; y < 4096; y += step) {
|
|
if (flow && (y / step) % 2) continue;
|
|
layer.writeMessage(
|
|
2,
|
|
(_, feature) => {
|
|
feature.writeVarintField(3, 2);
|
|
feature.writePackedVarint(2, flow ? [0, 0, 1, 1] : [0, 0]);
|
|
feature.writePackedVarint(4, [9, 0, y * 2, 10, 8192, 0]);
|
|
},
|
|
null,
|
|
);
|
|
}
|
|
},
|
|
null,
|
|
);
|
|
return Buffer.from(writer.finish());
|
|
}
|
|
|
|
/** Intercept the current vector sources; never fall through to live roads. */
|
|
export function trafficFixtureResponse(request) {
|
|
const url = new URL(request.url());
|
|
if (url.hostname === 'terrain.reearth.land') {
|
|
if (url.pathname.endsWith('/layer.json'))
|
|
return json({
|
|
tilejson: '2.1.0',
|
|
format: 'heightmap-1.0',
|
|
version: 'qa-flat',
|
|
scheme: 'tms',
|
|
projection: 'EPSG:4326',
|
|
minzoom: 0,
|
|
maxzoom: 0,
|
|
tiles: ['{z}/{x}/{y}.terrain?v={version}'],
|
|
available: [[{ startX: 0, startY: 0, endX: 1, endY: 0 }]],
|
|
attribution:
|
|
'Synthetic flat terrain for Traffic QA; not live elevation data',
|
|
});
|
|
if (/\/0\/[01]\/0\.terrain$/.test(url.pathname))
|
|
return {
|
|
status: 200,
|
|
contentType: 'application/octet-stream',
|
|
body: flatTerrain,
|
|
};
|
|
throw new Error(`Unexpected terrain fixture request: ${url.pathname}`);
|
|
}
|
|
if (url.pathname === '/api/tomtom/status')
|
|
return json({ hasKey: true, dailyCount: 0 });
|
|
const flow = url.pathname.match(
|
|
/^\/api\/tomtom\/flow\/(\d+)\/\d+\/\d+\.pbf$/,
|
|
);
|
|
if (flow)
|
|
return {
|
|
status: 200,
|
|
contentType: 'application/x-protobuf',
|
|
body: trafficFixtureTile(Number(flow[1]), true),
|
|
};
|
|
if (url.hostname !== 'tiles.openfreemap.org') return null;
|
|
if (url.pathname === '/planet')
|
|
return json({
|
|
tilejson: '3.0.0',
|
|
minzoom: 0,
|
|
maxzoom: 14,
|
|
tiles: ['https://tiles.openfreemap.org/qa-traffic/{z}/{x}/{y}.pbf'],
|
|
});
|
|
const road = url.pathname.match(/^\/qa-traffic\/(\d+)\/\d+\/\d+\.pbf$/);
|
|
if (!road)
|
|
throw new Error(`Unrecognized road fixture request: ${url.pathname}`);
|
|
return {
|
|
status: 200,
|
|
contentType: 'application/x-protobuf',
|
|
body: trafficFixtureTile(Number(road[1])),
|
|
};
|
|
}
|