mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-04-23 00:56:37 +00:00
component decomposition is done
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
# GSD Calculator Helper
|
||||
|
||||
## Interface Definition
|
||||
|
||||
**Interface Name**: `IGSDCalculator`
|
||||
|
||||
### Interface Methods
|
||||
|
||||
```python
|
||||
class IGSDCalculator(ABC):
|
||||
@abstractmethod
|
||||
def compute_gsd(self, altitude: float, camera_params: CameraParameters) -> float:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def altitude_to_scale(self, altitude: float, focal_length: float) -> float:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def meters_per_pixel(self, lat: float, zoom: int) -> float:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def gsd_from_camera(self, altitude: float, focal_length: float, sensor_width: float, image_width: int) -> float:
|
||||
pass
|
||||
```
|
||||
|
||||
## Component Description
|
||||
|
||||
Ground Sampling Distance computations for altitude and coordinate systems.
|
||||
|
||||
## API Methods
|
||||
|
||||
### `compute_gsd(altitude: float, camera_params: CameraParameters) -> float`
|
||||
|
||||
**Description**: Computes GSD from altitude and camera parameters.
|
||||
|
||||
**Formula**:
|
||||
```
|
||||
GSD = (altitude * sensor_width) / (focal_length * image_width)
|
||||
```
|
||||
|
||||
**Example**: altitude=800m, focal=24mm, sensor=36mm, width=6000px → GSD=0.2 m/pixel
|
||||
|
||||
---
|
||||
|
||||
### `altitude_to_scale(altitude: float, focal_length: float) -> float`
|
||||
|
||||
**Description**: Converts altitude to scale factor for VO.
|
||||
|
||||
---
|
||||
|
||||
### `meters_per_pixel(lat: float, zoom: int) -> float`
|
||||
|
||||
**Description**: Computes GSD for Web Mercator tiles at zoom level.
|
||||
|
||||
**Formula**:
|
||||
```
|
||||
meters_per_pixel = 156543.03392 * cos(lat * π/180) / 2^zoom
|
||||
```
|
||||
|
||||
**Example**: lat=48°N, zoom=19 → ~0.3 m/pixel
|
||||
|
||||
---
|
||||
|
||||
### `gsd_from_camera(altitude: float, focal_length: float, sensor_width: float, image_width: int) -> float`
|
||||
|
||||
**Description**: Direct GSD calculation from parameters.
|
||||
|
||||
## Dependencies
|
||||
|
||||
**External**: numpy
|
||||
|
||||
## Test Cases
|
||||
|
||||
1. Standard camera at 800m → GSD ~0.1-0.3 m/pixel
|
||||
2. Web Mercator zoom 19 at Ukraine → ~0.3 m/pixel
|
||||
|
||||
Reference in New Issue
Block a user