Topik ini menjelaskan kasus penggunaan, arsitektur, dan panduan memulai cepat untuk model point cloud.
Ikhtisar model
Pendahuluan
Point cloud adalah kumpulan catatan yang dihasilkan oleh pemindai laser 3D saat memindai objek dunia nyata. Setiap titik berisi koordinat 3D, dan beberapa bahkan mencakup informasi warna (RGB) atau intensitas. Data point cloud memiliki koordinat spasial serta karakteristik volume besar dan dimensi atribut yang kompleks.
GanosBase PointCloud adalah ekstensi mesin spatio-temporal untuk database yang kompatibel dengan PostgreSQL (PolarDB for PostgreSQL). Ekstensi ini memungkinkan penyimpanan dan manajemen data point cloud secara efisien melalui kompresi, dekompresi, dan statistik atribut, serta berintegrasi dengan modul-modul GanosBase lainnya untuk menyediakan kemampuan analisis spasial terhadap data point cloud.
Fitur
GanosBase PointCloud menyediakan dua tipe data: PcPoint dan PcPatch. PcPoint adalah objek point cloud dasar yang mendukung impor dan ekspor data, kueri metadata, serta kueri spasial. PcPatch adalah kumpulan objek point cloud yang mendukung pengemasan data, kompresi dan dekompresi, kueri metadata, serta penyaringan.
Kasus penggunaan
GanosBase PointCloud umumnya digunakan dalam skenario berikut:
-
Pemodelan dan visualisasi 3D
GanosBase PointCloud dapat menyimpan dan memproses data pemindaian 3D untuk pemodelan dan visualisasi, yang berguna dalam desain arsitektur, perencanaan kota, dan pelestarian benda cagar budaya.
-
Robotika dan kendaraan otonom
GanosBase PointCloud dapat memproses data persepsi 3D dalam sistem robotika dan kendaraan otonom untuk mendukung deteksi lingkungan, deteksi hambatan, dan perencanaan jalur.
-
Pengukuran industri dan kontrol kualitas
Di sektor industri, GanosBase PointCloud dapat memproses data pengukuran 3D seperti profil permukaan produk dari pemindai laser. Data ini dapat digunakan untuk kontrol kualitas, desain produk, dan optimalisasi proses manufaktur.
Arsitektur
Skema point cloud
Data point cloud mentah dapat memiliki banyak dimensi, masing-masing dengan presisi berbeda. GanosBase PointCloud menggunakan format Schema Document yang sama dengan PDAL (selanjutnya disebut dokumen skema) untuk menggambarkan dimensi setiap titik dan tipe data masing-masing dimensi.
Dokumen skema disimpan dalam tabel pointcloud_formats bersama PCID unik.
Objek point cloud
Anda dapat menyimpan data point cloud dalam tabel point cloud menggunakan tipe PcPoint atau PcPatch.
-
PcPoint adalah objek point cloud dasar. Objek ini memiliki setidaknya dimensi koordinat X dan Y, dan mungkin mencakup dimensi tambahan.
Representasi JSON objek PcPoint adalah:
{ "pcid": 1, "pt": [0.01, 0.02, 0.03, 4] }Di mana:
-
PCID: kunci asing ke tabel pointcloud_formats.
-
pt: data point cloud yang mengikuti format yang dijelaskan dalam dokumen skema yang dirujuk oleh PCID.
-
-
PcPatch adalah kumpulan objek PcPoint yang berdekatan. Hal ini mengurangi jumlah baris dalam database.
Representasi JSON objek PcPatch adalah:
{ "pcid": 1, "pts": [ [0.02, 0.03, 0.05, 6], [0.02, 0.03, 0.05, 8] ] }
Pilih tipe berdasarkan kasus penggunaan Anda:
-
Gunakan PcPoint jika Anda selalu memproses titik individual.
-
Gunakan PcPatch untuk kueri dan operasi yang efisien pada data point cloud berskala besar.
Referensi spasial
Sistem referensi spasial (SRS) menentukan bagaimana objek PointCloud dipetakan ke lokasi tertentu di permukaan Bumi.
GanosBase menggunakan bilangan bulat bernama SRID untuk merujuk definisi SRS. Objek PointCloud dikaitkan dengan SRS melalui nilai SRID-nya.
Untuk informasi lebih lanjut, lihat Spatial reference.
Tampilan kolom data
Di GanosBase, PointCloud juga menyediakan tampilan kolom point cloud yang mirip dengan tampilan kolom geometri pada model geometri.
|
Kolom |
Tipe |
Deskripsi |
|
schema |
varchar(256) |
Skema yang berisi tabel. |
|
table |
varchar(63) |
Nama tabel. |
|
column |
varchar(63) |
Nama kolom point cloud dalam tabel. |
|
pcid |
integer |
ID dokumen skema untuk kolom point cloud. Ini merupakan kunci asing ke tabel pointcloud_formats. |
|
srid |
integer |
SRID kolom point cloud. Ini merupakan kunci asing ke tabel spatial_ref_sys. |
|
type |
varchar(30) |
PcPoint atau PcPatch. |
Kueri semua kolom point cloud dalam database saat ini:
SELECT * FROM pointcloud_columns;
Kompresi data
Set data point cloud biasanya sangat besar. Di GanosBase PointCloud, Anda dapat menentukan metode kompresi dalam dokumen skema:
<pc:metadata>
<Metadata name="compression">compression_method</Metadata>
</pc:metadata>
Metode kompresi berikut didukung:
-
None: nilai default. Array byte PcPoint dan PcPatch disimpan menggunakan tipe dan format yang didefinisikan dalam dokumen skema tanpa kompresi.
-
Dimensional: hanya berlaku untuk PcPatch. Mengubah penyimpanan berbasis baris menjadi penyimpanan berbasis kolom per dimensi dan menerapkan skema kompresi yang sesuai.
-
Run-length encoding: cocok untuk dimensi dengan variabilitas rendah.
-
Common bits removal: cocok untuk dimensi yang nilainya bervariasi dalam rentang sempit.
-
Deflate (zlib): metode default ketika metode lain tidak berlaku.
-
LAZ/LASZip: format kompresi standar untuk data LiDAR.
Kompresi dimensional
Untuk PcPatch dengan empat dimensi dan enam titik:
{
"pcid": 1,
"pts": [
[-126.99, 45.01, 1, 0],
[-126.98, 45.02, 2, 0],
[-126.97, 45.03, 3, 0],
[-126.96, 45.04, 4, 0],
[-126.95, 45.05, 5, 0],
[-126.94, 45.06, 6, 0]
]
}
Setelah kompresi dimensional diaktifkan, PcPatch secara teoretis setara dengan:
{
"pcid": 1,
"dims": [
[-126.99, -126.98, -126.97, -126.96, -126.95, -126.94],
[45.01, 45.02, 45.03, 45.04, 45.05, 45.06],
[1, 2, 3, 4, 5, 6],
[0, 0, 0, 0, 0, 0]
]
}
Untuk objek PcPatch berukuran kecil dengan data yang relatif seragam, kompresi dimensional mencapai rasio 3:1 hingga 5:1.
Memulai cepat
Pendahuluan
Panduan memulai cepat membantu Anda memahami penggunaan GanosBase PointCloud secara cepat, termasuk pembuatan ekstensi, definisi skema, pembuatan tabel, penyisipan data, dan perhitungan atribut.
Referensi sintaks
-
Buat ekstensi.
CREATE extension ganos_pointcloud cascade; CREATE extension ganos_pointcloud_geometry cascade;CatatanKami menyarankan Anda menginstal ekstensi dalam skema public untuk menghindari masalah izin.
CREATE extension ganos_pointcloud WITH schema public; CREATE extension ganos_pointcloud_geometry WITH schema public; -
Definisikan skema point cloud.
Tabel pointcloud_formats dibuat secara default. Masukkan skema XML ke dalam tabel tersebut. Skema ini mendefinisikan dimensi atribut data point cloud, termasuk ukuran data, tipe, nama, dan deskripsi setiap dimensi.
INSERT INTO pointcloud_formats (pcid, srid, schema) VALUES (1, 4326, '<?xml version="1.0" encoding="UTF-8"?> <pc:PointCloudSchema xmlns:pc="http://pointcloud.org/schemas/PC/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <pc:dimension> <pc:position>1</pc:position> <pc:size>4</pc:size> <pc:description>Koordinat X sebagai bilangan bulat panjang. Anda harus menggunakan informasi skala dan offset header untuk menentukan nilai double.</pc:description> <pc:name>X</pc:name> <pc:interpretation>int32_t</pc:interpretation> <pc:scale>0.01</pc:scale> </pc:dimension> <pc:dimension> <pc:position>2</pc:position> <pc:size>4</pc:size> <pc:description>Koordinat Y sebagai bilangan bulat panjang. Anda harus menggunakan informasi skala dan offset header untuk menentukan nilai double.</pc:description> <pc:name>Y</pc:name> <pc:interpretation>int32_t</pc:interpretation> <pc:scale>0.01</pc:scale> </pc:dimension> <pc:dimension> <pc:position>3</pc:position> <pc:size>4</pc:size> <pc:description>Koordinat Z sebagai bilangan bulat panjang. Anda harus menggunakan informasi skala dan offset header untuk menentukan nilai double.</pc:description> <pc:name>Z</pc:name> <pc:interpretation>int32_t</pc:interpretation> <pc:scale>0.01</pc:scale> </pc:dimension> <pc:dimension> <pc:position>4</pc:position> <pc:size>2</pc:size> <pc:description>Nilai intensitas adalah representasi bilangan bulat dari besarnya pantulan pulsa. Nilai ini bersifat opsional dan spesifik sistem. Namun, nilai ini sebaiknya selalu disertakan jika tersedia.</pc:description> <pc:name>Intensity</pc:name> <pc:interpretation>uint16_t</pc:interpretation> <pc:scale>1</pc:scale> </pc:dimension> <pc:metadata> <Metadata name="compression">dimensional</Metadata> </pc:metadata> </pc:PointCloudSchema>'); -
Tipe data point cloud.
-- Tipe titik: pcpoint CREATE type pcpoint(...); Dimensi setiap titik didefinisikan oleh skema. Setiap titik disimpan sebagai satu baris. Contoh: ST_MakePoint(1, ARRAY[2,3,4,0.5]) mengembalikan objek PcPoint. -- Tipe patch: pcpatch CREATE type pcpatch(...); Patch adalah kumpulan titik yang mendukung kompresi. Metode kompresi ditentukan oleh pengaturan “compression” dalam skema. Patch dapat mengompresi beberapa titik menjadi satu baris, mengurangi storage space sekaligus mendukung kueri spasial. -
Buat tabel point cloud.
-- Tabel titik CREATE TABLE points ( id SERIAL PRIMARY KEY, pt PCPOINT(1) -- (1) merujuk ke skema dengan PCID = 1 dalam pointcloud_formats ); -- Tabel patch CREATE TABLE patches ( id SERIAL PRIMARY KEY, pa PCPATCH(1) ); -
Masukkan data PcPoint.
INSERT INTO points (pt) SELECT ST_MakePoint(1, ARRAY[x,y,z,intensity]) FROM ( SELECT -127+a/100.0 AS x, 45+a/100.0 AS y, 1.0*a AS z, a/10 AS intensity FROM generate_series(1,100) AS a ) AS values; SELECT ST_MakePoint(1, ARRAY[-127, 45, 124.0, 4.0]); ------------------------- 010100000064CEFFFF94110000703000000400 SELECT ST_AsText('010100000064CEFFFF94110000703000000400'::pcpoint); ------------------------- {"pcid":1,"pt":[-127,45,124,4]} -
Masukkan data PcPatch.
INSERT INTO patches (pa) SELECT ST_Patch(pt) FROM points GROUP BY id/10; SELECT ST_AsText(ST_MakePatch(1, ARRAY[-126.99,45.01,1,0, -126.98,45.02,2,0, -126.97,45.03,3,0])); ------------------------- {"pcid":1,"pts":[ [-126.99,45.01,1,0],[-126.98,45.02,2,0],[-126.97,45.03,3,0] ]} -
Hitung rata-rata atribut PcPatch.
SELECT ST_AsText(ST_PatchAvg(pa)) FROM patches WHERE id = 7; ------------------------- {"pcid":1,"pt":[-126.46,45.54,54.5,5]} -
Hapus ekstensi (opsional).
DROP extension ganos_pointcloud_geometry; DROP extension ganos_pointcloud cascade;
Referensi SQL
Untuk referensi SQL lengkap, lihat Point cloud SQL reference.