feat(map): add fixed ENU and WGS84 sector grid

This commit is contained in:
Codex
2026-08-06 10:31:03 +03:00
parent 80e948c018
commit 6f1fcb1eb0
15 changed files with 1806 additions and 362 deletions
+62
View File
@@ -0,0 +1,62 @@
export type LocalGridDefinition = {
lod: number;
originLatitude: number;
originLongitude: number;
stepMeters: number;
};
export type LocalSectorAddress = {
family: "local-enu";
lod: number;
eastIndex: number;
northIndex: number;
id: string;
};
export type GraticuleDefinition = { lod: number; stepDegrees: number };
export type GraticuleSectorAddress = {
family: "wgs84-graticule";
lod: number;
longitudeIndex: number;
latitudeIndex: number;
id: string;
};
export const MAX_LOCAL_GRID_INDEX: number;
export function normalizeLongitudeDegrees(value: number): number;
export function fixedGridOrigin(settings: { gridCenterLatitude?: number; gridCenterLongitude?: number }): { latitude: number; longitude: number };
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): { west: number; east: number; south: number; north: number };
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 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 }>;
};
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): { west: number; east: number; south: number; north: 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 } }>;
};