Back to Atlas map viewer
SOURCE / PINNED RELEASE

Made of little things.

Atlas map viewer

Release
1d2807e80b44…
Author-recorded commit
43810ed2b368…
License
LICENSE
Author’s source reference
nostr://npub182jczunncwe0jn6frpqwq3e0qjws7yqqnc3auccqv9nte2dnd63scjm4rf/wss%3A%2F%2Fgit.napplet.soy%2F/n-4757dbabc86

Archive hash verified: 8db6876d96c460ac…. The source-to-build association is the author’s claim; it has not been independently rebuilt.

packages/format/src/peaks.ts
import { project, type Peak } from "./index";
import type { AtlasReader } from "./reader";
import { bounds, inside, type Polygon } from "../../offline/src/geometry";
export function validPeak(p: Peak) {
  return (
    !!p &&
    typeof p.name === "string" &&
    Array.isArray(p.coordinates) &&
    p.coordinates.length === 2 &&
    p.coordinates.every(Number.isFinite) &&
    (p.elevation === null || Number.isFinite(p.elevation))
  );
}
export function peakSummary(value: unknown): {
  peak: Peak | null;
  known: number;
  unknown: number;
} {
  if (Array.isArray(value)) {
    if (!value.every(validPeak)) throw new Error("Invalid peak query block");
    const known = value
      .filter((p) => p.elevation !== null)
      .sort((a, b) => b.elevation - a.elevation);
    return {
      peak: known[0] ?? null,
      known: known.length,
      unknown: value.length - known.length,
    };
  }
  const s = value as {
    schema: string;
    peak: Peak | null;
    known: number;
    unknown: number;
  };
  if (
    !s ||
    s.schema !== "peaks-paged-v1" ||
    ![s.known, s.unknown].every((n) => Number.isSafeInteger(n) && n >= 0) ||
    (s.known === 0
      ? s.peak !== null
      : !s.peak || !validPeak(s.peak) || s.peak.elevation === null)
  )
    throw new Error("Invalid peak summary");
  return { peak: s.peak, known: s.known, unknown: s.unknown };
}
export async function selectedPeaks(reader: AtlasReader, polygon: Polygon) {
  const root = JSON.parse(
    new TextDecoder().decode(await reader.block("query/peaks")),
  );
  if (Array.isArray(root)) {
    peakSummary(root);
    return (root as Peak[]).filter((p) => inside(p.coordinates, polygon));
  }
  peakSummary(root);
  const b = bounds(polygon),
    nw = project(b[0], b[3]),
    se = project(b[2], b[1]),
    n = 256,
    peaks: Peak[] = [];
  for (const block of await reader.spatial(
    "query/peaks-data",
    8,
    Math.floor(nw[0] * n),
    Math.min(n - 1, Math.floor(se[0] * n)),
    Math.floor(nw[1] * n),
    Math.min(n - 1, Math.floor(se[1] * n)),
  )) {
    const values = JSON.parse(
      new TextDecoder().decode(await reader.block(block.key)),
    ) as Peak[];
    peakSummary(values);
    peaks.push(...values.filter((p) => inside(p.coordinates, polygon)));
    reader.cache.delete(block.key);
    if (peaks.length > 1000000)
      throw new Error("Peak excerpt exceeds its record budget");
  }
  return peaks;
}