Наближення координат GPS для точки з n очікуваних місць


9

Я намагаюся знайти координати моєї точки зору (точка X, позначена синім кольором). Я використовував GPS-пристрій свого автомобіля для збору координат відповідно до того, де я стояв на своєму транспортному засобі кожного разу, коли відвідував точку x. Отож, виконуючи цю вправу протягом 16 днів, мені вдалося отримати 16 наборів координат, поширившись навколо моєї точки зору.

Накресливши ці координати на карті, я помітив наступне: Двічі чи тричі з десяти разів мій GPS-пристрій давав неправильний набір координат, який виявився тихим далеко від точки X. Також із-за трафіку, зрідка я не в змозі припаркуватися близько до точки x, а отже, і в цьому випадку отримані координати далекі від точки X.

Проблема: з 16 отриманих наборів координат, який процес я використовую для звуження до одного набору координат, який знаходиться в безпосередній близькості від моєї точки зору (точка X)?

Зображення підтримує опис проблеми вище


чи є у вас інформація про PDOP, наданий вашим GPS-пристроєм? це може допомогти вам виявити недостовірні моменти.
radouxju

Я би поставив це у відповідях, але я не впевнений, чи це саме те, що ви намагаєтесь зробити, але кидаючи випускників та використовуючи принаймні коригування квадратів, я вважаю, що можна вирішити вашу проблему. utdallas.edu/~aiken/GPSCLASS/ch11.pdf
ed.hank

Відповіді:


13

Один із способів підійти до цієї цікавої проблеми - розглянути її як надійну оцінку центру розподілу точок біваріанта. (Добре відоме) рішення - це відшаровування опуклих корпусів, поки нічого не залишиться . Центроїд останнього не порожнього корпусу локалізує центр.

(Це пов’язано з торфою . Для отримання додаткової інформації в Інтернеті знайдіть "мультиваріантний пілінг корпусу з опуклим корпусом".)

Малюнок

Результат для 16 ілюстрованих точок показаний як центральний трикутник на цій карті. Три навколишніх багатокутника показують послідовні опуклі корпуси. П'ять початкових пунктів (30% від загальної кількості!) Були видалені за перші два етапи.


Приклад був обчислений у R. Сам алгоритм реалізований в середньому блоці, "опуклий лущення". Він використовує вбудовану chullпроцедуру, яка повертає індекси точок на корпусі. Ці точки видаляються за допомогою вираження негативного індексування xy[-hull, ]. Це повторюється, поки не будуть видалені останні точки. На останньому кроці центроїд обчислюється шляхом усереднення координат.

Зауважте, що у багатьох випадках проектування даних навіть не є необхідним: опуклі корпуси не зміняться, якщо оригінальні особливості не охоплюють антимеридіан (+/- 180 градусів), або полюс, або настільки обширні, що кривизна сегментів між ними буде змінити значення. (Навіть тоді кривизна буде мало турбувати, тому що лущення все ще сходиться до центральної точки.)

#
# Project the data.
#
dy <- c(8,7,5,10,7,17,19,19,21,22,22,22,24,24,26,26)
dx <- c(66,67,66,89,89,79,78,76,75,81,78,77,75,80,77,83)
lat <- (28.702 + dy/1e5) / 180 * pi
lon <- (77.103 + dx/1e5) / 180 * pi
y <- dy
x <- cos(mean(lat)) * dx
#
# Convex peeling.
#
xy <- cbind(x, y)
while(TRUE) {
  hull <- chull(xy)
  if (length(hull) < nrow(xy)) {
    xy <- xy[-hull, ]
  } else {
    xy.0 <- matrix(apply(xy, 2, mean), 1, 2)
    break
  }
}
#
# Plot the data `xy` and the solution `xy.0`.
#
plot(range(x), range(y), type="n", asp=1)
points(x, y, pch=21, bg="#a01010")
points(xy.0, pch=24, cex=1.2, bg="#404080")

Приємно. Одна думка: чи було б доцільно відкинути будь-які ймовірні погані дані перед обчисленням корпусів - виходячи виключно з того, як вони були зібрані (неможливість припаркуватися поруч), а НЕ на основі перевірки даних?
Simbamangu

@Simba Це розумний підхід.
whuber

Якщо у нас є кілька подібних сайтів, кожен з яких має різну кількість спостережень (наприклад, у цього було 16) у файлі excel, як би ми змінили код для цього.
користувач3587184

@ user3587184 В ідеалі ви не зробили б роботу в Excel. Якщо потрібно, то напишіть макрос, щоб перейти на групи спостережень.
whuber
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.