export type LocalBounds = { west: number; east: number; south: number; north: number };
export type LocalCenter = { eastMeters: number; northMeters: number };
export type GeodeticBounds = { west: number; east: number; south: number; north: number };
export type GeodeticCenter = { longitude: number; latitude: number };
export type LocalGridDefinition = {
lod: number;
originLatitude: number;
originLongitude: number;
stepMeters: number;
};
export type LocalHierarchyDefinition = LocalGridDefinition & { tileSizeMeters: number };
export type LocalVolumeDefinition = LocalGridDefinition & {
altitudeFloorMeters?: number;
altitudeCeilingMeters?: number;
/** @deprecated Use altitudeFloorMeters. */
altitudeOriginMeters?: number;
altitudeBandMeters: number;
};
export type LocalSectorAddress = {
family: "local-enu";
lod: number;
eastIndex: number;
northIndex: number;
id: string;
};
export type LocalMajorTileAddress = {
family: "local-enu-major";
lod: number;
eastIndex: number;
northIndex: number;
minorPerSide: number;
id: string;
};
export type LocalVolumeAddress = {
family: "local-enu-volume";
lod: number;
eastIndex: number;
northIndex: number;
bandIndex: number;
altitudeFloorMeters: number;
altitudeCeilingMeters: number;
altitudeBandMeters: number;
id: string;
};
export type GraticuleDefinition = { lod: number; stepDegrees: number };
export type GraticuleHierarchyDefinition = GraticuleDefinition & { majorStepDegrees: number };
export type GraticuleSectorAddress = {
family: "wgs84-graticule";
lod: number;
longitudeIndex: number;
latitudeIndex: number;
id: string;
};
export type GraticuleMajorTileAddress = {
family: "wgs84-graticule-major";
lod: number;
longitudeIndex: number;
latitudeIndex: number;
minorPerSide: number;
id: string;
};
export type AddressDetail
= {
address: Address;
bounds: Bounds;
center: Center;
areaSquareMeters: number;
};
export type LocalSectorDetail = AddressDetail;
export type LocalMajorTileDetail = AddressDetail;
export type GraticuleSectorDetail = AddressDetail;
export type GraticuleMajorTileDetail = AddressDetail;
export type LocalSectorSummary = {
id: string;
address: LocalSectorAddress;
family: "local-enu";
lod: number;
label: string;
indices: { eastIndex: number; northIndex: number };
bounds: LocalBounds;
center: LocalCenter;
areaSquareMeters: number;
neighbors: Record<"north" | "east" | "south" | "west", LocalSectorDetail>;
majorTile: LocalMajorTileSummary | null;
parentMajorTile: LocalMajorTileSummary | null;
};
export type LocalMajorTileSummary = {
id: string;
address: LocalMajorTileAddress;
family: "local-enu-major";
lod: number;
label: string;
indices: { eastIndex: number; northIndex: number };
minorPerSide: number;
childCount: number;
bounds: LocalBounds;
center: LocalCenter;
areaSquareMeters: number;
neighbors: Record<"north" | "east" | "south" | "west", LocalMajorTileDetail>;
};
export type LocalVolumeBounds = LocalBounds & {
altitudeFloorMeters: number;
altitudeCeilingMeters: number;
};
export type LocalVolumeSummary = {
id: string;
address: LocalVolumeAddress;
family: "local-enu-volume";
lod: number;
label: string;
indices: { eastIndex: number; northIndex: number; bandIndex: number };
bounds: LocalVolumeBounds;
center: LocalCenter & { altitudeMeters: number };
footprintAreaSquareMeters: number;
volumeCubicMeters: number;
};
export type GraticuleSectorSummary = {
id: string;
address: GraticuleSectorAddress;
family: "wgs84-graticule";
lod: number;
label: string;
indices: { longitudeIndex: number; latitudeIndex: number };
bounds: GeodeticBounds;
center: GeodeticCenter;
areaSquareMeters: number;
neighbors: Record<"north" | "east" | "south" | "west", GraticuleSectorDetail | null>;
majorTile: GraticuleMajorTileSummary | null;
parentMajorTile: GraticuleMajorTileSummary | null;
};
export type GraticuleMajorTileSummary = {
id: string;
address: GraticuleMajorTileAddress;
family: "wgs84-graticule-major";
lod: number;
label: string;
indices: { longitudeIndex: number; latitudeIndex: number };
minorPerSide: number;
childCount: number;
bounds: GeodeticBounds;
center: GeodeticCenter;
areaSquareMeters: number;
neighbors: Record<"north" | "east" | "south" | "west", GraticuleMajorTileDetail | null>;
};
export const MAX_LOCAL_GRID_INDEX: number;
export const MAX_GRID_CHILD_PAGE_SIZE: number;
export type GridChildPage = { offset?: number; limit?: number };
export function normalizeLongitudeDegrees(value: number): number;
export function fixedGridOrigin(settings: { gridCenterLatitude?: number; gridCenterLongitude?: number }): { latitude: number; longitude: number };
// Existing horizontal sector IDs are intentionally unchanged in v2.
export function localSectorId(definition: LocalGridDefinition, eastIndex: number, northIndex: number): string;
export function localSectorAt(point: { eastMeters: number; northMeters: number }, definition: LocalGridDefinition): LocalSectorAddress;
export function localSectorBounds(address: LocalSectorAddress, stepMeters: number): LocalBounds;
export function localSectorNeighbors(address: LocalSectorAddress, definition: LocalGridDefinition): Record<"north" | "east" | "south" | "west", LocalSectorAddress>;
export function localParentSector(address: LocalSectorAddress, childStepMeters: number, parentDefinition: LocalGridDefinition): LocalSectorAddress;
export function localSectorCenter(address: LocalSectorAddress, stepMeters: number): LocalCenter;
export function localSectorAreaSquareMeters(address: LocalSectorAddress, stepMeters: number): number;
export function localSectorSummary(
address: LocalSectorAddress,
definition: LocalGridDefinition & { tileSizeMeters?: number },
): LocalSectorSummary;
export function localMajorTileId(definition: LocalHierarchyDefinition, eastIndex: number, northIndex: number): string;
export function localMajorTileAt(point: { eastMeters: number; northMeters: number }, definition: LocalHierarchyDefinition): LocalMajorTileAddress;
export function localMajorTileBounds(address: LocalMajorTileAddress, tileSizeMeters: number): LocalBounds;
export function localMajorTileForSector(address: LocalSectorAddress, definition: LocalHierarchyDefinition): LocalMajorTileAddress;
export function localMajorTileChildren(
address: LocalMajorTileAddress,
definition: LocalHierarchyDefinition,
options?: GridChildPage,
): LocalSectorAddress[];
export function localMajorTileNeighbors(address: LocalMajorTileAddress, definition: LocalHierarchyDefinition): Record<"north" | "east" | "south" | "west", LocalMajorTileAddress>;
export function isLocalMajorLineIndex(lineIndex: number, definition: LocalHierarchyDefinition): boolean;
export function localMajorTileCenter(address: LocalMajorTileAddress, tileSizeMeters: number): LocalCenter;
export function localMajorTileAreaSquareMeters(address: LocalMajorTileAddress, tileSizeMeters: number): number;
export function localMajorTileSummary(address: LocalMajorTileAddress, definition: LocalHierarchyDefinition): LocalMajorTileSummary;
export function localVolumeId(definition: LocalVolumeDefinition, eastIndex: number, northIndex: number, bandIndex: number): string;
export function localVolumeAt(
point: { eastMeters: number; northMeters: number; altitudeMeters: number },
definition: LocalVolumeDefinition,
): LocalVolumeAddress | null;
export function localVolumeBounds(address: LocalVolumeAddress, definition: LocalVolumeDefinition): LocalVolumeBounds;
export function localVolumeNeighbors(address: LocalVolumeAddress, definition: LocalVolumeDefinition): {
north: LocalVolumeAddress;
east: LocalVolumeAddress;
south: LocalVolumeAddress;
west: LocalVolumeAddress;
above: LocalVolumeAddress | null;
below: LocalVolumeAddress | null;
};
export function localVolumeCenter(address: LocalVolumeAddress, definition: LocalVolumeDefinition): LocalCenter & { altitudeMeters: number };
export function localVolumeSummary(address: LocalVolumeAddress, definition: LocalVolumeDefinition): LocalVolumeSummary;
export function localGridPlan(input: { stepMeters: number; radiusMeters: number; maximumMarkers?: number }): {
stepMeters: number;
radiusMeters: number;
requestedRadiusMeters: number;
clipped: boolean;
maximumIndex: number;
markerStride: number;
lines: Array<{ index: number; offsetMeters: number; extentMeters: number }>;
};
// Existing horizontal graticule IDs are intentionally unchanged in v2.
export function graticuleSectorId(definition: GraticuleDefinition, longitudeIndex: number, latitudeIndex: number): string;
export function graticuleSectorAt(point: { longitude: number; latitude: number }, definition: GraticuleDefinition): GraticuleSectorAddress;
export function graticuleSectorBounds(address: GraticuleSectorAddress, stepDegrees: number): GeodeticBounds;
export function graticuleSectorNeighbors(address: GraticuleSectorAddress, definition: GraticuleDefinition): Record<"north" | "east" | "south" | "west", GraticuleSectorAddress | null>;
export function graticuleSectorCenter(address: GraticuleSectorAddress, stepDegrees: number): GeodeticCenter;
export function graticuleSectorAreaSquareMeters(address: GraticuleSectorAddress, stepDegrees: number): number;
export function graticuleSectorSummary(
address: GraticuleSectorAddress,
definition: GraticuleDefinition & { majorStepDegrees?: number },
): GraticuleSectorSummary;
export function graticuleMajorTileId(definition: GraticuleHierarchyDefinition, longitudeIndex: number, latitudeIndex: number): string;
export function graticuleMajorTileAt(point: { longitude: number; latitude: number }, definition: GraticuleHierarchyDefinition): GraticuleMajorTileAddress;
export function graticuleMajorTileBounds(address: GraticuleMajorTileAddress, majorStepDegrees: number): GeodeticBounds;
export function graticuleMajorTileForSector(address: GraticuleSectorAddress, definition: GraticuleHierarchyDefinition): GraticuleMajorTileAddress;
export function graticuleMajorTileChildren(
address: GraticuleMajorTileAddress,
definition: GraticuleHierarchyDefinition,
options?: GridChildPage,
): GraticuleSectorAddress[];
export function graticuleMajorTileNeighbors(address: GraticuleMajorTileAddress, definition: GraticuleHierarchyDefinition): Record<"north" | "east" | "south" | "west", GraticuleMajorTileAddress | null>;
export function isGraticuleMajorLineIndex(lineIndex: number, definition: GraticuleHierarchyDefinition): boolean;
export function isGraticuleMajorLineValue(valueDegrees: number, definition: GraticuleHierarchyDefinition): boolean;
export function graticuleMajorTileCenter(address: GraticuleMajorTileAddress, majorStepDegrees: number): GeodeticCenter;
export function graticuleMajorTileAreaSquareMeters(address: GraticuleMajorTileAddress, majorStepDegrees: number): number;
export function graticuleMajorTileSummary(address: GraticuleMajorTileAddress, definition: GraticuleHierarchyDefinition): GraticuleMajorTileSummary;
export function geodeticRectangleAreaSquareMeters(bounds: GeodeticBounds): number;
export function splitLongitudeRange(west: number, east: number): Array<{ west: number; east: number }>;
export function alignedGridValues(minimum: number, maximum: number, step: number, options?: { includeMaximum?: boolean }): number[];
export function boundedAngularParts(start: number, end: number, maximumSpanDegrees?: number): Array<{ start: number; end: number }>;
export function graticuleGranularity(stepDegrees: number, clampToGround: boolean): number;
export function graticuleLinePlan(input: {
south: number;
north: number;
longitudeIntervals: Array<{ west: number; east: number }>;
stepDegrees: number;
}): {
stepDegrees: number;
south: number;
north: number;
longitudeIntervals: Array<{ west: number; east: number }>;
parallels: number[];
meridians: Array<{ longitude: number; interval: { west: number; east: number } }>;
};