generated from Grigo/AndroidTemplate
added linear slider
This commit is contained in:
+2
-2
@@ -50,7 +50,7 @@ LORATESTER_ELEVATION_URL=http://192.168.1.109:8085/v1/elevation
|
||||
|
||||
БД хранится в volume `loratester-data` (`/data/loratester.db` внутри контейнера).
|
||||
|
||||
## Деплой (grigowashere.ru:7634)
|
||||
## Деплой (lora.grigowashere.ru)
|
||||
|
||||
```bash
|
||||
cd /srv/storage/disk2/services/LoraTester/server
|
||||
@@ -148,6 +148,6 @@ python -m pytest tests/ -v
|
||||
|
||||
## Android
|
||||
|
||||
URL: `http://grigowashere.ru:7634`. На карте: **Начать/Остановить трекинг пути** — точки с GPS, статистикой приёма и высотой (локальный Open-Meteo на сервере). Вкладка **Статистика** — история с сервера.
|
||||
URL: `https://lora.grigowashere.ru`. На карте: **Начать/Остановить трекинг пути** — точки с GPS, статистикой приёма и высотой (локальный Open-Meteo на сервере). Вкладка **Статистика** — история с сервера.
|
||||
|
||||
Telnet: `127.0.0.1:2727` — мост COM→telnet на устройстве.
|
||||
|
||||
Binary file not shown.
@@ -371,6 +371,7 @@ def _offset_m(lat: float, lon: float, north_m: float, east_m: float) -> tuple[fl
|
||||
|
||||
|
||||
_MAX_GRID_POINTS = 2500
|
||||
_MAX_GRID_POINTS_FINE = 12000
|
||||
|
||||
|
||||
def _auto_step_m(radius_m: float) -> float:
|
||||
@@ -401,11 +402,15 @@ def _sample_circular_grid(
|
||||
return cells
|
||||
|
||||
|
||||
def _resolve_grid_step(lat: float, lon: float, radius_m: float, step_m: float) -> float:
|
||||
def _resolve_grid_step(
|
||||
lat: float, lon: float, radius_m: float, step_m: float
|
||||
) -> float:
|
||||
if step_m <= 0:
|
||||
step_m = _auto_step_m(radius_m)
|
||||
step_m = max(5.0, min(float(step_m), 100.0))
|
||||
while len(_sample_circular_grid(lat, lon, radius_m, step_m)) > _MAX_GRID_POINTS:
|
||||
min_step = 1.0 if radius_m <= 100.0 else 5.0
|
||||
step_m = max(min_step, min(float(step_m), 100.0))
|
||||
max_points = _MAX_GRID_POINTS_FINE if radius_m <= 100.0 and step_m <= 1.0 else _MAX_GRID_POINTS
|
||||
while len(_sample_circular_grid(lat, lon, radius_m, step_m)) > max_points:
|
||||
step_m = math.ceil(step_m * 1.25)
|
||||
if step_m >= radius_m:
|
||||
break
|
||||
@@ -427,7 +432,7 @@ def build_elevation_grid(
|
||||
"elevation_url": ELEVATION_API_URL,
|
||||
}
|
||||
|
||||
radius_m = max(100.0, min(float(radius_m), 500.0))
|
||||
radius_m = max(50.0, min(float(radius_m), 500.0))
|
||||
step_m = _resolve_grid_step(lat, lon, radius_m, step_m)
|
||||
|
||||
center_elev = fetch_elevation_m(lat, lon)
|
||||
|
||||
@@ -349,8 +349,8 @@ def elevation_nearest_hill(
|
||||
def elevation_grid(
|
||||
lat: float = Query(..., ge=-90.0, le=90.0),
|
||||
lon: float = Query(..., ge=-180.0, le=180.0),
|
||||
radius_m: float = Query(200.0, ge=100.0, le=500.0),
|
||||
step_m: float = Query(0.0, ge=0.0, le=100.0),
|
||||
radius_m: float = Query(200.0, ge=50.0, le=500.0),
|
||||
step_m: float = Query(0.0, ge=1.0, le=100.0),
|
||||
):
|
||||
from core.elevation import build_elevation_grid
|
||||
|
||||
|
||||
Binary file not shown.
@@ -141,6 +141,22 @@ def test_build_elevation_grid_delta(monkeypatch):
|
||||
assert all("delta_m" in p for p in result["points"])
|
||||
|
||||
|
||||
def test_build_elevation_grid_fine_step_small_radius(monkeypatch):
|
||||
monkeypatch.setattr(elev, "_probe_checked_at", 0.0)
|
||||
monkeypatch.setattr(elev, "probe_elevation_api", lambda force=False: {"ok": True, "error": None})
|
||||
monkeypatch.setattr(elev, "fetch_elevation_m", lambda lat, lon: 120.0)
|
||||
monkeypatch.setattr(
|
||||
elev,
|
||||
"fetch_elevations_batch",
|
||||
lambda lats, lons: [120.0 + i * 0.1 for i in range(len(lats))],
|
||||
)
|
||||
|
||||
result = elev.build_elevation_grid(55.75, 37.62, radius_m=50, step_m=1)
|
||||
assert result["ok"] is True
|
||||
assert result["step_m"] == 1
|
||||
assert len(result["points"]) > 1000
|
||||
|
||||
|
||||
def test_build_elevation_grid_limits_points(monkeypatch):
|
||||
monkeypatch.setattr(elev, "_probe_checked_at", 0.0)
|
||||
monkeypatch.setattr(elev, "probe_elevation_api", lambda force=False: {"ok": True, "error": None})
|
||||
|
||||
Reference in New Issue
Block a user