Data laser cloud titik besar di PostGIS - Menyimpan dan Memprosesnya

14

Saya bertanya-tanya, bagaimana mungkin untuk menyimpan set besar data cloud titik pindaian laser di PostGIS, dengan aspek waktu untuk memprosesnya dalam pikiran. Saya tahu, ada objek geometri Pointdi PostGIS. Tapi sejauh yang saya tahu itu menyimpan setiap titik dalam tupel baru, yang dapat membuat mencari titik tertentu menjadi proses yang sangat lambat, jika beberapa juta atau lebih dari mereka disimpan.

Saya menemukan sebuah makalah dari HSR Universtiy of Applied Sciences Rapperswill, membahas topik ini. Ini menunjukkan tiga cara untuk menyimpan data seperti: Whole data in one tupel, Each point in one tupelatau Splitting Data into Blocksyang direferensikan oleh info-meja, memegang meluas dari setiap blok. Karena cara ketiga tampaknya paling berguna untuk menemukan titik tersimpan, saya ingin tahu apakah ada yang sudah membuat beberapa pengalaman dengannya?

Makalah ini dapat ditemukan di sini: http://wiki.hsr.ch/Datenbanken/files/pgsql_point_cloud.pdf

Last but not least, saya gagah di sebuah proyek di github, yang sepertinya berhubungan dengan point cloud sopan santun di PostgeSQL. Sayangnya tidak banyak informasi tentang itu di internet. Jadi pertanyaan yang sama di sini: Apakah seseorang telah membuat beberapa pengalaman dengannya? Apakah bisa digunakan untuk tujuan seperti itu?

Proyek dapat ditemukan di sini: https://github.com/pramsey/pointcloud

Saya juga akan senang mendengar tentang saran, ide, atau pengalaman lain, jika ada. Tetapi saya harus mengakui, bahwa solusi non-komersial lebih disukai.

knutella
sumber
1
Bisakah Anda memberikan gambaran kasar tentang apa yang Anda maksud dengan besar, dan informasi seperti apa dari titik cloud yang Anda butuhkan? Yaitu hanya XYZ dan intensitas, yang dapat misalnya disimpan dalam MultipointZM yang diblokir atau juga data atribut lainnya yang mungkin memerlukan Point untuk mendapatkan nilai unik untuk setiap pengukuran titik yang terpisah?
Torsti
1
saya menyimpan LIDAR dalam 10x10 meter multipoints dengan klasifikasi. Kami hanya menggunakan nilai
simplexio
1
@AndreSilva Tujuannya adalah untuk menghasilkan profil permukaan jalan dari data. Untuk saat ini kami mengubah poin menjadi DEM-grids dan menggunakan PostGIS untuk menyimpannya sebagai rasterblocks dan SAGA untuk akhirnya membuat profil darinya. Ini berjalan untuk tujuan pengujian, tetapi juga berarti hilangnya akurasi melalui rastering data sebelum impor db. Juga ekspor sel-sel jaringan, yang dipotong oleh garis profil yang diberikan berjalan sangat lambat di PostGIS (terima kasih kepada ST_Union). Akan menyenangkan jika Anda bisa merekomendasikan alat untuk tugas serupa.
knutella
1
@til_b: Ya, inilah tepatnya yang saya bicarakan ... Good find :)
knutella
1
Saya bertanya pada diri sendiri pertanyaan yang sama, dan mengumpulkan beberapa potongan untuk mendapatkan prototipe yang berfungsi. Sejauh ini berfungsi dengan baik, tanpa masalah skalabilitas dari beberapa juta hingga ratusan juta poin dengan masing-masing sekitar 20 atribut. Dengan banyak poin ini, menemukan poin di dalam suatu area membutuhkan beberapa ratus mili . Dibutuhkan waktu yang hampir bersamaan untuk memfilter berdasarkan cap waktu (waktu akuisisi yang tepat untuk saya). Secara keseluruhan perf yang sama atau lebih baik daripada di "LiDAR Data Management Pipeline; dari Spatial Database Population ke Web-Application Visualization" Data dikompresi ke dalam DB (sekitar 1: 2

Jawaban:

5

Ada banyak pertanyaan Anda. Jawaban singkatnya adalah ya, sangat mungkin untuk menyimpan data cloud titik besar di PostGIS dan menggunakannya untuk diproses. Kami telah membangun sistem lengkap yang melakukan ini.

Video ini sedikit ketinggalan zaman dengan angka-angkanya tetapi kami memiliki TB data seluler / terestrial dan udara dalam postgis yang dapat diakses melalui python untuk diproses di ujung belakang dan dengan ujung depan web memungkinkan tampilan 3D dan pengunduhan data. https://vimeo.com/39053196

Ini benar-benar tergantung pada bagaimana Anda memilih untuk menyimpan data di PostGIS dan bagaimana Anda akan mengaksesnya. Solusi yang bagus untuk data aerial mungkin adalah dengan mem-grid data dengan cara tertentu dan menggunakan multipoint untuk efisiensi. Namun, jika Anda bekerja dengan data seluler atau terestrial di mana kepadatan titik bisa antara 500-30000 + poin per meter persegi, pendekatan ini tidak berfungsi. Kemudian turun untuk melihat perangkat keras Anda dan jumlah pengguna bersamaan yang Anda harapkan. Rincian tentang ini dapat ditemukan di beberapa makalah kami http://www.mendeley.com/profiles/conor-mc-elhinney/

Conor
sumber
Hai, terima kasih atas banyak informasi terperinci. Id / tes yang ditawarkan di makalah Anda tampaknya sangat berguna! Saya perlu beberapa waktu untuk menyelesaikannya, tetapi seperti yang saya lihat pada bacaan pertama, mereka sudah menyediakan solusi secara keseluruhan. Terima kasih banyak untuk penambahannya! Juga video dan pc-viewer berbasis browser Anda cukup menarik dan tampaknya bekerja dengan sangat baik dan lancar! Sayangnya saya mengalami kekurangan dalam hal-hal lain. Saya berharap untuk melanjutkan dengan pc-data segera.
knutella
Proyek Glimpse memiliki demo yang sangat keren di sini: ncg.nuim.ie/glimpse/auth/login.php
Kozuch
7

(Jawabannya didasarkan pada komentar saya dan orang lain di atas; belum benar-benar mengujinya)

Simpan poin sebagai MultiPointZM. Ukuran kisi terbaik mungkin akan tergantung pada pola akses dan Anda perlu melakukan beberapa pengujian pada ini. Grid biasa dengan indeks spasial harus membuat kueri cukup cepat. Jika akses 3D penting maka MultiPointZM bisa menjadi berbasis blok 3D (1) alih-alih kisi bidang 2D, maka (jika Anda memiliki PostGIS> = 2.0) Anda akan dapat menggunakan &&& untuk kueri 3D cepat.

Anda juga bisa menyimpan pola kisi dalam tabel terpisah, yang mungkin berguna misalnya saat memperbarui data dan memvalidasi bahwa blok MultiPointZM tetap dalam batasnya setelah diedit dll.

Menyimpan cap waktu atau data lain hanya akan mungkin untuk satu blok pada satu waktu, tetapi beberapa data biner / kategori dapat disimpan dengan memisahkan setiap blok berdasarkan atribut jika tidak ada terlalu banyak kategori dan / atau atribut.

Jika Anda akhirnya harus menyimpan data sebagai PointZM yang terpisah, maka kunci asing pada tabel kisi + indeks B-Tree akan membuat memuat hanya titik-titik tertentu (mungkin) jauh lebih cepat daripada hanya queyrying tabel secara langsung, bahkan dengan spasial indeks.

(1) Jika rentang nilai-Z kecil (ini jalan, bagaimana pun juga), ini mungkin tidak masuk akal.

Torsti
sumber
Saya pikir 'ringkasan' Anda cukup berhasil sebagai kesimpulan dari proposal yang dibahas sebelumnya. Seperti yang Anda katakan, cara 'benar' untuk memuat data seperti itu harus dijelaskan dalam kebutuhan dan solusi yang diajukan. Ternyata, bukan tidak mungkin berkat begitu banyak ide. Itu memberi saya banyak inspirasi untuk pekerjaan lebih lanjut saya tentang masalah ini. Terima kasih banyak!
knutella