Enormi dati laser a nuvola di punti in PostGIS - Archiviazione ed elaborazione


14

Mi chiedo come sia possibile archiviare in PostGIS enormi set di dati di nuvole di punti scannerizzati a laser, tenendo conto dell'aspetto temporale per l'elaborazione. Lo so, esiste un oggetto geometria Pointin PostGIS. Ma per quanto ne so, salva ogni punto in una nuova tupel, che può rendere la ricerca di un determinato punto un processo molto lento, se ne vengono memorizzati alcuni milioni o più.

Ho trovato un articolo di Rapperswill della HSR Universtiy of Applied Sciences, che parlava di questo argomento. Suggerisce tre modi per archiviare tali dati: o Whole data in one tupel, a cui fanno riferimento tabelle informative, che contengono le estensioni di ciascun blocco. Dato che la terza via sembra la più utile per localizzare i punti memorizzati, mi chiedo se qualcuno abbia già fatto delle esperienze con esso?Each point in one tupelSplitting Data into Blocks

Il documento è disponibile qui: http://wiki.hsr.ch/Datenbanken/files/pgsql_point_cloud.pdf

Ultimo ma non meno importante, mi sono imbattuto in un progetto su github, che sembra gestire i modi delle nuvole di punti in PostgeSQL. Purtroppo non ci sono molte informazioni al riguardo in rete. Quindi la stessa domanda qui: qualcuno ha già fatto delle esperienze con esso? È utilizzabile per tali scopi?

Il progetto può essere trovato qui: https://github.com/pramsey/pointcloud

Sarei anche felice di conoscere altri suggerimenti, idee o esperienze, se ce ne sono. Ma devo ammettere che si preferiscono soluzioni non commerciali.


1
Potresti dare un'idea approssimativa di cosa intendi per enorme e di quale tipo di informazione dalla nuvola di punti ti serve? Vale a dire solo XYZ e intensità, che potrebbero ad esempio essere archiviati in MultipointZM bloccato o anche altri dati di attributo che probabilmente richiedono Point per ottenere valori univoci per ciascuna misurazione di punti separata?
Torsti,

1
immagazzino lidar in punti multipli 10x10 per classificazione. Usiamo solo valori Z di terra
simplexio

1
@AndreSilva L'obiettivo è quello di generare i profili della superficie stradale dai dati. Per ora abbiamo trasformato i punti in griglie DEM e abbiamo usato PostGIS per memorizzarli come blocchi raster e SAGA per creare finalmente i profili da esso. Funziona a scopo di test, ma significa anche una perdita di precisione attraverso il raster dei dati prima dell'importazione db. Anche l'esportazione delle celle della griglia, tagliate dalle linee di profilo fornite, procede molto lentamente in PostGIS (grazie a ST_Union). Sarebbe bello se potessi consigliare strumenti per attività simili.
Knutella,

1
@til_b: Beh, questo è esattamente quello di cui stavo parlando ... Buona scoperta :)
Knutella,

1
Mi sono posto la stessa domanda e ho messo insieme alcuni pezzi per ottenere un prototipo funzionante. Finora funziona benissimo , senza problemi di scalabilità da diversi milioni a centinaia di milioni di punti con circa 20 attributi ciascuno. Con così tanti punti, trovare punti all'interno di un'area richiede alcune centinaia di millis . Ci vuole circa lo stesso tempo per filtrare per timestamp (tempo preciso di acquisizione per me). Nel complesso i perf sono uguali o migliori rispetto a "Pipeline di gestione dati LiDAR; dalla popolazione di database spaziali alla visualizzazione di applicazioni Web" I dati vengono compressi in DB (circa 1: 2

Risposte:


5

C'è molto nella tua domanda. La risposta breve è sì, è completamente possibile archiviare enormi dati della nuvola di punti in PostGIS e utilizzarli per l'elaborazione. Abbiamo creato un sistema così completo che fa questo.

Questo video è un po 'obsoleto con i suoi numeri, ma avevamo TB di dati mobili / terrestri e aerei in postgis accessibili tramite Python per l'elaborazione nel back-end e con un front-end Web che consente la visualizzazione 3D e il download dei dati. https://vimeo.com/39053196

Dipende da come scegli di archiviare i dati in PostGIS e da come accederai. Una buona soluzione per i dati aerei potrebbe essere quella di grigliare i dati in qualche modo e utilizzare i punti multipli per l'efficienza. Tuttavia, se stai lavorando con dati mobili o terrestri in cui la densità dei punti può essere tra 500-30000 + punti per metro quadrato questo approccio non funziona. Quindi si tratta di esaminare il tuo hardware e il numero di utenti simultanei che ti aspetti. Dettagli al riguardo sono disponibili in alcuni dei nostri articoli http://www.mendeley.com/profiles/conor-mc-elhinney/


Ciao, grazie per tante informazioni dettagliate. Gli ID / test offerti nei tuoi articoli sembrano davvero utili! Mi ci vorrà del tempo per vedere tutto, ma come ho visto in una prima lettura, forniscono già soluzioni alternative. Grazie mille per l'aggiunta! Anche il video e il tuo PC-viewer basato su browser sono piuttosto interessanti e sembrano funzionare molto bene e senza intoppi! Sfortunatamente ho avuto le mani a corto termine su altre cose. Spero di continuare a breve con i dati del PC.
knutella,

Il progetto Glimpse ha una demo davvero interessante qui: ncg.nuim.ie/glimpse/auth/login.php
Kozuch,

7

(La risposta si basa sui miei e altri commenti sopra; non l'ho davvero testato)

Memorizza i punti come MultiPointZM. La dimensione della griglia migliore dipende probabilmente dai modelli di accesso e su questo devi fare alcuni test. Una griglia regolare con un indice spaziale dovrebbe rendere le query abbastanza veloci. Se l'accesso 3d è importante, MultiPointZM potrebbe essere basato su blocchi 3D (1) anziché su una griglia di piano 2D, quindi (se hai PostGIS> = 2.0) potresti utilizzare &&& per query 3D veloci.

È inoltre possibile memorizzare il modello di griglia in una tabella separata, il che potrebbe essere utile, ad esempio, quando si aggiornano i dati e si convalida che i blocchi MultiPointZM rimangano entro i limiti dopo le modifiche, ecc.

La memorizzazione di timestamp o altri dati sarebbe possibile solo per un blocco alla volta, ma alcuni dati binari / di categoria potrebbero essere archiviati disaggregando ciascun blocco per attributo se non ci sono troppe categorie e / o attributi.

Se alla fine dovessi archiviare i dati come PointZM separato, una chiave esterna nella tabella della griglia + indice B-Tree renderebbe il caricamento solo dei punti specifici (probabilmente) molto più veloce rispetto alla semplice richiesta diretta della tabella, anche con una spaziatura indice.

(1) Se l'intervallo dei valori Z è piccolo (dopo tutto è una strada), probabilmente non ha senso.


Penso che il tuo "riassunto" si abbini abbastanza bene come conclusione delle precedenti proposte discusse. Come hai detto, il modo "giusto" di caricare tali dati deve essere compreso tra le esigenze e le soluzioni proposte. Si è scoperto, non impossibile grazie a tante idee. Mi ha dato molta ispirazione per il mio ulteriore lavoro su questo tema. Molte grazie!
knutella,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.