日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

點(diǎn)云模型

本文介紹了點(diǎn)云模型的用途、基本構(gòu)成和快速入門等內(nèi)容。

模型用途

簡(jiǎn)介

點(diǎn)云模型通常是由 3D 激光掃描儀掃描相關(guān)實(shí)體并以點(diǎn)的形式輸出的記錄,每一個(gè)點(diǎn)包含有三維坐標(biāo),有些可能含有顏色信息(RGB)或反射強(qiáng)度信息(Intensity),點(diǎn)云數(shù)據(jù)含有空間坐標(biāo)信息,且具有數(shù)量眾多、屬性維度復(fù)雜的特點(diǎn)。

Ganos PointCloud是對(duì)象關(guān)系型數(shù)據(jù)庫PostgreSQL兼容版本(PolarDB PostgreSQL版)的一個(gè)時(shí)空引擎擴(kuò)展,使上述數(shù)據(jù)庫能夠有效快速存儲(chǔ)管理點(diǎn)云數(shù)據(jù),并提供點(diǎn)云數(shù)據(jù)壓縮、解壓縮、屬性統(tǒng)計(jì)等功能,同時(shí)聯(lián)合Ganos其它模塊提供點(diǎn)云空間分析的能力。

功能概述

Ganos PointCloud主要提供PcPoint與PcPatch兩種數(shù)據(jù)類型,PcPoint是點(diǎn)云的基本對(duì)象,它可以支持點(diǎn)云數(shù)據(jù)導(dǎo)入與導(dǎo)出、點(diǎn)云數(shù)據(jù)元數(shù)據(jù)查詢、點(diǎn)云數(shù)據(jù)空間查詢等能力;PcPatch是點(diǎn)云的集合對(duì)象,它可以支持點(diǎn)云數(shù)據(jù)打包、點(diǎn)云數(shù)據(jù)包壓縮與解壓縮、點(diǎn)云數(shù)據(jù)包元數(shù)據(jù)查詢、點(diǎn)云數(shù)據(jù)包過濾等能力。

主要業(yè)務(wù)場(chǎng)景

Ganos PointCloud的常見使用場(chǎng)景有以下幾個(gè):

  • 三維建模和可視化

    Ganos PointCloud可以用于存儲(chǔ)和處理三維掃描數(shù)據(jù),通過點(diǎn)云數(shù)據(jù)進(jìn)行三維建模和可視化。這對(duì)于建筑設(shè)計(jì)、城市規(guī)劃、文物保護(hù)等領(lǐng)域非常有用。

  • 機(jī)器人和自動(dòng)駕駛

    Ganos PointCloud可以用于處理機(jī)器人和自動(dòng)駕駛系統(tǒng)中的三維感知數(shù)據(jù)。通過點(diǎn)云數(shù)據(jù),可以實(shí)現(xiàn)環(huán)境感知、障礙物檢測(cè)、路徑規(guī)劃等功能。

  • 工業(yè)測(cè)量和質(zhì)量控制

    在工業(yè)領(lǐng)域,Ganos PointCloud可以用于處理三維測(cè)量數(shù)據(jù),例如通過激光掃描儀獲取的產(chǎn)品表面形狀數(shù)據(jù)。這些數(shù)據(jù)可以用于質(zhì)量控制、產(chǎn)品設(shè)計(jì)和制造過程優(yōu)化等。

基本構(gòu)成

點(diǎn)云格式表

原始點(diǎn)云數(shù)據(jù)可能有若干維度值,不同值也可能有不同的精度。Ganos Pointcloud使用與PDAL一致的Schema Document(以下簡(jiǎn)稱概要文檔)來描述每個(gè)點(diǎn)包含的維度,每個(gè)維度的數(shù)據(jù)類型等元數(shù)據(jù)。

概要文檔與對(duì)應(yīng)的PCID一同存儲(chǔ)于數(shù)據(jù)庫的pointcloud_formats表內(nèi)。

點(diǎn)云對(duì)象

用戶可以用PcPoint類型或PcPatch類型在點(diǎn)云表中存儲(chǔ)點(diǎn)云數(shù)據(jù)。

  • PcPoint是基本的點(diǎn)云對(duì)象,最少具有X/Y坐標(biāo)兩個(gè)維度,還可能有更多維度。

    一個(gè)PcPoint對(duì)象的JSON表達(dá)如下:

    {
      "pcid": 1,
      "pt": [0.01, 0.02, 0.03, 4]
    }

    其中:

    • PCID:指向pointcloud_formats 表的外鍵。

    • pt:點(diǎn)云的具體信息,遵照PCID指向的概要文檔中所描述的格式。

  • PcPatch是一系列互相靠近的PcPoint的集合。這樣可以減少數(shù)據(jù)庫內(nèi)記錄的行數(shù)。

    一個(gè)PcPatch對(duì)象的JSON 表達(dá)如下:

    {
      "pcid": 1,
      "pts": [
        [0.02, 0.03, 0.05, 6],
        [0.02, 0.03, 0.05, 8]
      ]
    }

類型的選擇與實(shí)際業(yè)務(wù)用途相關(guān):

  • 如果需要處理的粒度總是單個(gè)點(diǎn)的信息,可以選擇PcPoint。

  • 如果要對(duì)大量的點(diǎn)云數(shù)據(jù)做高效的查詢和操作,則可以選擇PcPatch。

空間參考

空間參考系(Spatial Reference System,以下簡(jiǎn)稱為SRS )定義了如何將PointCloud對(duì)象關(guān)聯(lián)到地球表面上某個(gè)具體位置。

Ganos使用一個(gè)整數(shù)來表示SRS的定義引用,稱為SRID。PointCloud對(duì)象通過其自身的SRID值與SRS關(guān)聯(lián)。

更多內(nèi)容請(qǐng)參見空間參考

數(shù)據(jù)列視圖

在Ganos PointCloud中,也存在類似于幾何模型中幾何列視圖的點(diǎn)云列視圖。

列名

類型

說明

schema

varchar(256)

該表所在的schema。

table

varchar(63)

該表的表名。

column

varchar(63)

該表中某個(gè)點(diǎn)云列的列名。

pcid

integer

點(diǎn)云列對(duì)應(yīng)的概要文檔的ID,是引用到pointcloud_formats表的外鍵。

srid

integer

點(diǎn)云列SRID,是引用到spatial_ref_sys表的外鍵。

type

varchar(30)

PcPoint或PcPatch 。

可以通過如下語句查詢當(dāng)前數(shù)據(jù)庫中全部幾何數(shù)據(jù)列:

SELECT * FROM pointcloud_columns;

數(shù)據(jù)壓縮

點(diǎn)云數(shù)據(jù)往往具有相當(dāng)大的數(shù)據(jù)量。在Ganos PointCloud中,支持在概要文檔的定義中添加如下聲明,指定數(shù)據(jù)壓縮方式:

<pc:metadata>
  <Metadata name="compression">壓縮方式</Metadata>
</pc:metadata>

目前,壓縮方式支持以下種類:

  • None:默認(rèn)值。按概要文檔中定義的類型和格式存儲(chǔ)PcPoint和PcPatch字節(jié)數(shù)組,不進(jìn)行壓縮處理。

  • Dimensional:僅對(duì)于PcPatch有意義。將PcPacth中按行存儲(chǔ)變?yōu)榘淳S度列存儲(chǔ),并啟用適當(dāng)?shù)膲嚎s方案。

  • 游程編碼壓縮:適用于低邊異性的維度。

  • 公共位去除:適用于數(shù)值僅在很窄范圍內(nèi)變化的維度。

  • 使用zlib進(jìn)行deflate壓縮:不適用其他壓縮時(shí)的默認(rèn)方案。

  • LAZ/LASZip:LiDAR數(shù)據(jù)標(biāo)準(zhǔn)壓縮方式。

Dimensional壓縮

對(duì)于一個(gè)擁四個(gè)維度、六個(gè)點(diǎn)的PcPatch數(shù)據(jù):

{
  "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]
  ]
}

啟用Dimensional壓縮后,該P(yáng)cPacth理論上等效于:

{
  "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]
  ]
}

對(duì)于較為均勻的小體積PcPatch對(duì)象來說,Dimensiona壓縮的效率在3:1到 5:1之間。

快速入門

簡(jiǎn)介

快速入門文檔幫助用戶快速理解Ganos PointCloud引擎的基本用法,包括擴(kuò)展創(chuàng)建、定義點(diǎn)云schema、建表、插入數(shù)據(jù)、屬性計(jì)算等內(nèi)容。

語法說明

  • 創(chuàng)建擴(kuò)展。

    CREATE extension ganos_pointcloud cascade;
    CREATE extension ganos_pointcloud_geometry cascade;
    說明

    建議將擴(kuò)展安裝在public模式下,避免權(quán)限問題。

    CREATE extension ganos_pointcloud WITH schema public;
    CREATE extension ganos_pointcloud_geometry WITH schema public;
  • 定義點(diǎn)云schema。

    表pointcloud_formats默認(rèn)已經(jīng)創(chuàng)建好,往表中插入xml格式的schema,schema定義了點(diǎn)云的屬性維度,以及每個(gè)維度的數(shù)據(jù)大小、類型、名稱以及解釋說明。

    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>X coordinate as a long integer. You must use the
                        scale and offset information of the header to
                        determine the double value.</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>Y coordinate as a long integer. You must use the
                        scale and offset information of the header to
                        determine the double value.</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>Z coordinate as a long integer. You must use the
                        scale and offset information of the header to
                        determine the double value.</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>The intensity value is the integer representation
                        of the pulse return magnitude. This value is optional
                        and system specific. However, it should always be
                        included if available.</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>');
  • 點(diǎn)云數(shù)據(jù)類型。

    --點(diǎn)類型 pcpoint
    CREATE type pcpoint(...);
    點(diǎn)的維度信息由schema定義.
    點(diǎn)類型數(shù)據(jù)只能一個(gè)點(diǎn)一行記錄存儲(chǔ)。
    例如:ST_MakePoint(1, ARRAY[2,3,4,0.5])返回的就是一個(gè)pcpoint對(duì)象
    --點(diǎn)集類型 pcpatch
    CREATE type pcpatch(...);
    點(diǎn)集由一系列的點(diǎn)組合而成,支持壓縮,壓縮方式由schema中的“compression”決定.
    點(diǎn)集類型優(yōu)勢(shì)是可將一系列點(diǎn)集成壓縮后存儲(chǔ)為一行記錄,減少存儲(chǔ)空間,同時(shí)支持空間檢索。
  • 創(chuàng)建點(diǎn)云表。

    -- A table of points
    CREATE TABLE points (
        id SERIAL PRIMARY KEY,
        pt PCPOINT(1)     --(1)代表選擇pointcloud_formats中pcid值為1的schema
    );
    -- A table of patches
    CREATE TABLE patches (
        id SERIAL PRIMARY KEY,
        pa PCPATCH(1)
    );
  • 插入pcpoint數(shù)據(jù)。

    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]}
  • 插入pcpatch數(shù)據(jù)。

    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]
    ]}
  • pcpatch屬性平均值計(jì)算。

    SELECT ST_AsText(ST_PatchAvg(pa)) FROM patches WHERE id = 7;
    -------------------------
    {"pcid":1,"pt":[-126.46,45.54,54.5,5]}
  • 刪除擴(kuò)展(可選)。

    DROP extension ganos_pointcloud_geometry;
    DROP extension ganos_pointcloud cascade;

SQL參考

詳細(xì)SQL手冊(cè)請(qǐng)參見PointCloud SQL參考