Spaces:
Sleeping
Sleeping
| """ | |
| Archivo: test_geometry.py | |
| Fecha de modificación: 03/06/2026 | |
| Autor: Equipo AgroVisión | |
| Descripción: | |
| Pruebas unitarias de las funciones geométricas puras (Fase 1): distancia de muestreo | |
| terrestre (GSD), densidad por hectárea y área geodésica de un polígono lon/lat. | |
| Ejemplo de Integración: | |
| uv run python -m pytest tests/unit/test_geometry.py | |
| """ | |
| from __future__ import annotations | |
| from backend.core.geometry import density_per_ha, geodesic_area_m2, gsd_cm_per_px | |
| def test_gsd_valor_conocido() -> None: | |
| """GSD = (sensor*altura)/(focal*ancho)*100; caso redondo -> 10 cm/px.""" | |
| g = gsd_cm_per_px(sensor_w_mm=10, flight_h_m=100, focal_mm=10, img_w_px=1000) | |
| assert g == 10.0 | |
| def test_density_per_ha_una_hectarea() -> None: | |
| """100 plantas en 10.000 m² (1 ha) -> 100 pl/Ha.""" | |
| assert density_per_ha(100, 10_000) == 100.0 | |
| def test_density_per_ha_area_cero() -> None: | |
| """Área cero no debe dividir por cero; devuelve 0.0.""" | |
| assert density_per_ha(5, 0) == 0.0 | |
| def test_geodesic_area_caja_un_grado_cerca_ecuador() -> None: | |
| """Una caja de 1°x1° cerca del ecuador mide ~1.23e10 m² (≈12.300 km²).""" | |
| box = [[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]] | |
| area = geodesic_area_m2(box) | |
| assert 1.1e10 < area < 1.4e10 | |
| def test_geodesic_area_independiente_del_sentido() -> None: | |
| """El área no depende del sentido de giro del polígono (se toma valor absoluto).""" | |
| horario = [[0, 0], [0, 1], [1, 1], [1, 0], [0, 0]] | |
| antihorario = [[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]] | |
| assert round(geodesic_area_m2(horario), 2) == round(geodesic_area_m2(antihorario), 2) | |