Тема: [GPS] Як екстраполювати помилки при обрахуванні наступної позиції?
Добрий день, я олень.
Я знаю, як екстраполювати помилки, коли ми обраховуємо наступну позицію в звичайних декартових координатах на площині.
Формула наступної позиції буде така от
наступна позиція = поточна позиція + вектор напрямку та швидкості * час
наступне помилка = поточна помилка + час в квадраті * помилка вектору напрямку та швидкості
під помилкою я маю на увазі стандартне відхилення. Для позиції воно в метрах, для вектору напрямку та швидкості в метрах на секунду.
Але якшо ми хочемо зробити те саме, але в координатах планети (а конкретніше моделі еліпсоїда WGS84), то наступна позиція рахується отако
// js
export function calcNextPos(
currentLat: number,
currentLon: number,
bearing: number,
speed: number
): { lat: number; long: number } {
// Constants for WGS84 ellipsoid
const a = 6378137; // Semi-major axis
const f = 1 / 298.257223563; // Flattening
// Convert speed from meters per second to meters per millisecond
const speedPerMillisecond = speed / 1000;
// Convert bearing from degrees to radians
const bearingRad = (bearing * Math.PI) / 180;
// Calculate the distance traveled in meters in 1 second
const distance = speedPerMillisecond * 1000;
// Convert current latitude to radians
const currentLatRad = (currentLat * Math.PI) / 180;
// Calculate the reduced latitude
const tanReducedLat = (1 - f) * Math.tan(currentLatRad);
const reducedLat = Math.atan(tanReducedLat);
// Calculate the change in latitude
const deltaLat =
(distance * Math.cos(bearingRad)) / (a * (1 - f) + reducedLat);
// Calculate the change in longitude
const deltaLon =
(distance * Math.sin(bearingRad)) / (a * Math.cos(reducedLat));
// Calculate the next latitude and longitude
const nextLat = currentLat + (deltaLat * 180) / Math.PI;
const nextLon = currentLon + (deltaLon * 180) / Math.PI;
return { lat: nextLat, long: nextLon };
}
тут багато чого, як бачите. У нас навіть вектору нема, а є просто кут (bearing) та швидкість, котрі разом показують, в якому напрямку і з якою швидкістю ми рухаємося.
І от всі ці компоненти мають свою стандартну похибку (поточна позиція, напрямок руху та швидкість мають свої стандартні похибки, в метрах, градусах та метрах на секунду відповідно).
А як обрахувати тепер стандартну похибку нової позиції?