Каждая запись определяет центр тяжести (местоположение и нечеткое пространство вокруг него - размер размытого пространства, определяемый точностью), где актив может фактически находиться.Надеюсь, вы можете игнорировать высоту, потому что она намного более размыта, и обычно точность говорит только о горизонтальной точности.
Возьмите первую точку, назначьте ее кластеру (область / объем).Возьмите вторую точку, посмотрите, попадет ли она внутрь кластера.Если это так, то вы можете попытаться уточнить свой центроид (усреднить старые и новые точки) или просто отбросить вторую точку.Уточнение центроида очень заманчиво, но убедитесь, что вы делаете это так, чтобы не допустить очень медленного перемещения активов.Когда ваша следующая точка выйдет за пределы центроида, запустите новый центроид и повторите.
Вы можете обнаружить, что указанная вами точность выше, чем фактическая точность, и в этом случае вы можете ввести множитель глупости или постоянную длясделать центроид более размытым, чем он есть на самом деле.
[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.Первый запрос получает информацию о следующем (первом) местоположении, а второй запрос пропускает все идентификаторы, которые кластеризованы в одно и то же местоположение.Промыть и повторить.