Тема: [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) та швидкість, котрі разом показують, в якому напрямку і з якою швидкістю ми рухаємося.
І от всі ці компоненти мають свою стандартну похибку (поточна позиція, напрямок руху та швидкість мають свої стандартні похибки, в метрах, градусах та метрах на секунду відповідно).
А як обрахувати тепер стандартну похибку нової позиції?