Monaljain's picture
renamed satellite-interpolation-app to frontend
86f4c12
Raw
History Blame Contribute Delete
3.41 kB
import { ComparisonFrame, DifferenceMapData } from '../types';
const generateMockData = (offset: number, noise: number): number[][] => {
const data: number[][] = [];
for (let y = 0; y < 100; y++) {
const row: number[] = [];
for (let x = 0; x < 100; x++) {
const cx = 50 + offset;
const cy = 50 + offset * 0.5;
const dist = Math.sqrt(Math.pow(x - cx, 2) + Math.pow(y - cy, 2));
let temp = 280;
if (dist < 20) {
temp = 220 + dist + Math.random() * noise;
} else if (dist < 40) {
temp = 250 - (40 - dist) * 0.5 + Math.random() * noise;
} else {
temp += Math.random() * noise - (noise / 2);
}
row.push(Number(temp.toFixed(2)));
}
data.push(row);
}
return data;
};
const getMinMax = (data: number[][]) => {
let min = Infinity;
let max = -Infinity;
data.forEach(row => row.forEach(val => {
if (val < min) min = val;
if (val > max) max = val;
}));
return { min, max };
};
const t0Data = generateMockData(-15, 5);
const t1Data = generateMockData(15, 5);
const t05Data = generateMockData(0, 3); // smoother generated
const { min: t0Min, max: t0Max } = getMinMax(t0Data);
const { min: t1Min, max: t1Max } = getMinMax(t1Data);
const { min: t05Min, max: t05Max } = getMinMax(t05Data);
export const MOCK_COMP_T0: ComparisonFrame = {
id: 'comp-t0',
type: 'T0',
timestamp: '2023-05-14T08:00:00Z',
band: 'Band 13 (TIR)',
resolution: '2 km',
dimensions: [100, 100],
data: t0Data,
min: t0Min,
max: t0Max,
};
export const MOCK_COMP_T1: ComparisonFrame = {
id: 'comp-t1',
type: 'T1',
timestamp: '2023-05-14T08:30:00Z',
band: 'Band 13 (TIR)',
resolution: '2 km',
dimensions: [100, 100],
data: t1Data,
min: t1Min,
max: t1Max,
};
export const MOCK_COMP_T05: ComparisonFrame = {
id: 'comp-t05',
type: 'T0.5',
timestamp: '2023-05-14T08:15:00Z',
band: 'Band 13 (TIR)',
resolution: '2 km',
dimensions: [100, 100],
data: t05Data,
min: t05Min,
max: t05Max,
};
// Calculate Difference between T0.5 and average of T0/T1 (as a mock difference)
export const calculateMockDifference = (): DifferenceMapData => {
const diffData: number[][] = [];
let meanDiff = 0;
let maxDiff = -Infinity;
let minDiff = Infinity;
let count = 0;
for (let y = 0; y < 100; y++) {
const row: number[] = [];
for (let x = 0; x < 100; x++) {
const expected = (t0Data[y][x] + t1Data[y][x]) / 2;
const actual = t05Data[y][x];
const diff = Number((actual - expected).toFixed(2));
row.push(diff);
meanDiff += Math.abs(diff);
if (diff > maxDiff) maxDiff = diff;
if (diff < minDiff) minDiff = diff;
count++;
}
diffData.push(row);
}
meanDiff = meanDiff / count;
// std dev
let variance = 0;
diffData.forEach(row => row.forEach(val => {
variance += Math.pow(Math.abs(val) - meanDiff, 2);
}));
const stdDeviation = Math.sqrt(variance / count);
return {
id: 'comp-diff',
type: 'T0.5',
timestamp: '2023-05-14T08:15:00Z',
band: 'Difference Map',
resolution: '2 km',
dimensions: [100, 100],
data: diffData,
min: minDiff,
max: maxDiff,
meanDifference: meanDiff,
maxDifference: maxDiff,
minDifference: minDiff,
stdDeviation: stdDeviation,
similarityScore: 0.942,
};
};
export const MOCK_DIFFERENCE_MAP = calculateMockDifference();