feat(gps): фильтр «далеко от дороги» в LBS-режиме (offRoadMeters, OSRM nearest); пробег «точно + примерно (по вышкам)» в Маршрутах
This commit is contained in:
@@ -5,6 +5,7 @@ import { gpsStorage } from "./storage";
|
||||
import { processPosition, filterTrackPoints } from "./geozone.service";
|
||||
import { hasGpsAccess } from "./access";
|
||||
import { ensureDevice, deleteDevice } from "./traccar.client";
|
||||
import { OSRM_URL } from "./osrm";
|
||||
import { storage } from "../storage";
|
||||
|
||||
/**
|
||||
@@ -19,8 +20,7 @@ const MAX_TRACK_POINTS = 2000;
|
||||
// OSRM map matching (привязка трека к дорогам)
|
||||
// =====================
|
||||
|
||||
// URL OSRM-сервиса (контейнер во внутренней Docker-сети)
|
||||
const OSRM_URL = process.env.OSRM_URL || "http://osrm:5000";
|
||||
// URL OSRM-сервиса — см. ./osrm (общий модуль, используется и в geozone.service)
|
||||
// Лимит OSRM Match API — 100 координат на запрос; берём с запасом
|
||||
const OSRM_CHUNK_SIZE = 95;
|
||||
// Таймаут запроса к OSRM
|
||||
@@ -432,6 +432,11 @@ export function registerGpsRoutes(app: Express) {
|
||||
if (!Number.isInteger(gpsLostHours) || gpsLostHours < 1 || gpsLostHours > 72) {
|
||||
return badRequest(res, "gpsLostHours: целое число от 1 до 72");
|
||||
}
|
||||
const offRoadMeters =
|
||||
req.body?.offRoadMeters !== undefined ? Number(req.body.offRoadMeters) : current.offRoadMeters;
|
||||
if (!Number.isInteger(offRoadMeters) || offRoadMeters < 0 || offRoadMeters > 2000) {
|
||||
return badRequest(res, "offRoadMeters: целое число от 0 до 2000 (0 = фильтр выключен)");
|
||||
}
|
||||
|
||||
// Центр карты по умолчанию — только для admin (у остальных молча игнорируется)
|
||||
let defaultLat = current.defaultLat;
|
||||
@@ -471,6 +476,7 @@ export function registerGpsRoutes(app: Express) {
|
||||
maxJumpSpeedKmh,
|
||||
tripStopMinutes,
|
||||
gpsLostHours,
|
||||
offRoadMeters,
|
||||
defaultLat,
|
||||
defaultLng,
|
||||
defaultZoom,
|
||||
@@ -481,6 +487,7 @@ export function registerGpsRoutes(app: Express) {
|
||||
maxJumpSpeedKmh: row.maxJumpSpeedKmh,
|
||||
tripStopMinutes: row.tripStopMinutes,
|
||||
gpsLostHours: row.gpsLostHours,
|
||||
offRoadMeters: row.offRoadMeters,
|
||||
defaultLat: row.defaultLat,
|
||||
defaultLng: row.defaultLng,
|
||||
defaultZoom: row.defaultZoom,
|
||||
|
||||
Reference in New Issue
Block a user