60 lines
2.2 KiB
Markdown
60 lines
2.2 KiB
Markdown
## ADDED Requirements
|
|
|
|
### Requirement: Earth constant
|
|
|
|
The system SHALL export a pre-built `EARTH` `PlanetConfig` using the WGS84 ellipsoid, Moon as a `SatelliteConfig`, and ISA atmosphere as `AtmosphereConfig`.
|
|
|
|
#### Scenario: Earth constant validation
|
|
|
|
- **WHEN** `EARTH` is imported
|
|
- **THEN** `EARTH.name` equals `"Earth"`
|
|
- **AND** `EARTH.radius` equals `6378137`
|
|
- **AND** `EARTH.satellites` contains exactly one entry with `name` matching `"Moon"`
|
|
|
|
### Requirement: Earth surface instance
|
|
|
|
The system SHALL export a pre-built `earthSurface` `PlanetSurface` constructed from `EARTH`.
|
|
|
|
#### Scenario: Earth surface delegation
|
|
|
|
- **WHEN** `earthSurface.distance(a, b)` is called for two coordinates
|
|
- **THEN** the result equals the WGS84 geodesic distance
|
|
|
|
### Requirement: Geocoding provider interface
|
|
|
|
The system SHALL export `GeocodingProvider`, `GeocodingResult`, `createInMemoryProvider`, and `batchGeocode`.
|
|
|
|
#### Scenario: In-memory geocode
|
|
|
|
- **WHEN** `createInMemoryProvider([{ name: "London", latitude: 51.5074, longitude: -0.1278 }])` is created
|
|
- **AND** `batchGeocode` is called with `["London"]`
|
|
- **THEN** the result contains one entry with matching coordinates
|
|
|
|
### Requirement: Geohash encoding and decoding
|
|
|
|
The system SHALL export `encodeGeohash` and `decodeGeohash` with round-trip fidelity.
|
|
|
|
#### Scenario: Geohash round-trip
|
|
|
|
- **WHEN** `encodeGeohash({ latitude: 51.5074, longitude: -0.1278 }, 9)` is called
|
|
- **AND** the result is passed to `decodeGeohash`
|
|
- **THEN** the decoded coordinate matches the original within `0.0001` degrees
|
|
|
|
### Requirement: Coordinate parsing and formatting
|
|
|
|
The system SHALL export `parseCoordinate` and `formatCoordinate` supporting DMS (degrees-minutes-seconds) and decimal formats.
|
|
|
|
#### Scenario: Parse DMS string
|
|
|
|
- **WHEN** `parseCoordinate("51°30'26.5\"N")` is called
|
|
- **THEN** the result is approximately `51.5074`
|
|
|
|
### Requirement: Preserve existing geo public API
|
|
|
|
The system SHALL preserve all public exports that existed in the legacy `@suaveplan/geo` package.
|
|
|
|
#### Scenario: Legacy export compatibility
|
|
|
|
- **WHEN** all public exports of the legacy `@suaveplan/geo` are compared to `@suaveplan/geo-earth`
|
|
- **THEN** every legacy export name exists in `geo-earth` with the same or broader type signature
|