Как эффективно обнаружить изменения местоположения с помощью зашумленных данных GPS? - PullRequest
3 голосов
/ 22 июня 2011

Я работаю над приложением отслеживания активов. У меня есть устройства, которые отправляют обновления о положении GPS каждые ~ 5 минут.

Теперь мне нужно создать отчет, который показывает мне, когда актив начал перемещаться, когда останавливался и как долго и т. Д. В основном мне нужно группировать эти данные.

Проблема у меня в том, что данные GPS не точны. Если устройство лежит на одном и том же месте - оно будет отправлять разные широты / долготы с разной точностью, создавая зашумленные данные.

Каков наиболее эффективный способ анализа таких данных? Или может быть есть способы сделать это "чистым", поскольку я собираю это? Какие-либо предложения?

Немного открытый вопрос, но я хотел бы получить любые идеи, которые вы можете мне дать:)

enter image description here

Ответы [ 3 ]

2 голосов
/ 22 июня 2011

Каждая запись определяет центр тяжести (местоположение и нечеткое пространство вокруг него - размер размытого пространства, определяемый точностью), где актив может фактически находиться.Надеюсь, вы можете игнорировать высоту, потому что она намного более размыта, и обычно точность говорит только о горизонтальной точности.

Возьмите первую точку, назначьте ее кластеру (область / объем).Возьмите вторую точку, посмотрите, попадет ли она внутрь кластера.Если это так, то вы можете попытаться уточнить свой центроид (усреднить старые и новые точки) или просто отбросить вторую точку.Уточнение центроида очень заманчиво, но убедитесь, что вы делаете это так, чтобы не допустить очень медленного перемещения активов.Когда ваша следующая точка выйдет за пределы центроида, запустите новый центроид и повторите.

Вы можете обнаружить, что указанная вами точность выше, чем фактическая точность, и в этом случае вы можете ввести множитель глупости или постоянную длясделать центроид более размытым, чем он есть на самом деле.

[EDIT]

OP спросил, как это сделать в SQL.Ну, я не гуру SQL.Проблема, с которой я сталкиваюсь, заключается в том, что я не могу ограничить внешнее соединение, чтобы предоставить только те совпадения, которые являются непрерывными по времени, а не все совпадения, которые были в этом месте.Таким образом, в моем решении я вынужден использовать множество дополнительных SQL-циклов.

$curid = 0;
while ($hash = `select id,timestamp,position,accuracy from locations
                    where id > $curid
                    order by idlimit 1`)
{
  print "Was at $hash{'position'} at $hash{'timestamp'} ";

  $curid = $hash{'id'} + 1;
  $seenone = 0;
  while ($hash2 = `select id,timestamp from locations where id=$cur_id and
                   distance($hash{'position'},position) < (accuracy+$hash{'accuracy'})`)
  {
     $curid = $hash2{'id'}+1;
     $seenone = 1;
  }
  print "until $hash2{'timestamp'}\n" if ($seenone);
  print "\n" unless ($seenone);
}

Это проходит по расположению таблицы по id.Первый запрос получает информацию о следующем (первом) местоположении, а второй запрос пропускает все идентификаторы, которые кластеризованы в одно и то же местоположение.Промыть и повторить.

0 голосов
/ 22 июня 2011

Почему бы не буферизовать каждой точки, создав круглую область с заданным радиусом (масштабированная на основе некоторого эмпирического измерения того, насколько "зашумлены" ваши данные), а затем растворить буферизовать полигоны в один полигон и взять центр тяжести этого?

0 голосов
/ 22 июня 2011

Я проделал некоторую работу по отслеживанию воздушных шаров на большой высоте с использованием данных GPS. Если вы не хотите, чтобы ваши данные отображались в какой-либо числовой форме, я бы рекомендовал использовать API Карт Google. Вы можете создать карту, а затем добавить маркеры для каждой из точек в вашем наборе данных GPS. Это обеспечивает хорошее графическое представление, но не будет работать так же хорошо, если вы работаете с меньшими масштабами.

Документация по API:

http://code.google.com/apis/maps/documentation/javascript/reference.html#MarkerOptions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...