Ho appena iniziato a lavorare con database spaziali e voglio scrivere una query SQL (PostGIS) per la generalizzazione automatica di tracce GPS non elaborate (con frequenza di tracciamento fissa). La prima cosa su cui mi sto prendendo in giro è una query che identifica i punti di arresto in forma di query come "punti x entro una distanza di y metri" per sostituire enormi nuvole di punti con punti rappresentativi. Mi sono già reso conto di catturare punti entro una certa distanza e contare quelli scattati. Nell'immagine seguente si può vedere una traccia di esempio grezza (piccoli punti neri) e i centri dei punti spezzati come cerchi colorati (dimensione = numero di punti spezzati).
CREATE table simplified AS
SELECT count(raw.geom)::integer AS count, st_centroid(st_collect(raw.geom)) AS center
FROM raw
GROUP BY st_snaptogrid(raw.geom, 500, 0.5)
ORDER BY count(raw.geom) DESC;
Sarei abbastanza soddisfatto di questa soluzione, ma c'è il problema del tempo: immaginando la traccia come una traccia di un'intera giornata in una città, la persona può tornare in luoghi già visitati in precedenza. Nel mio esempio, il cerchio blu scuro rappresenta la casa della persona che ha visitato due volte, ma la mia domanda ovviamente lo ignora.
In questo caso, la query sofisticata dovrebbe raccogliere solo punti con timestamp (o ID) contigui, in modo da produrre qui due punti rappresentativi. La mia prima idea è stata una modifica della mia query a una versione 3d (ora come terza dimensione), ma non sembra funzionare.
Qualcuno ha qualche consiglio per me? Spero che la mia domanda sia chiara.
Grazie per l'idea di linea. Mi sono reso conto di creare e semplificare una stringa lineare come puoi vedere nello screenshot qui sotto (i punti sono punti originali). Ciò di cui ho ancora bisogno è determinare i luoghi di riposo (> x punti nel raggio di <x metri), idealmente come un punto con un orario di arrivo e un orario di partenza ... altre idee?