Todos os produtos
Search
Central de documentação

PolarDB:Modelo de nuvem de pontos

Última atualização: Aug 27, 2026

Este tópico descreve os casos de uso, a arquitetura e o guia de início rápido do modelo de nuvem de pontos.

Visão geral do modelo

Introdução

Uma nuvem de pontos é um conjunto de registros gerados por scanners a laser 3D ao digitalizar entidades do mundo real. Cada ponto contém coordenadas 3D e alguns incluem também informações de cor (RGB) ou intensidade. Os dados de nuvem de pontos carregam coordenadas espaciais e caracterizam-se pelo grande volume e pela complexidade das dimensões de atributos.

GanosBase PointCloud é uma extensão de mecanismo espaço-temporal para PostgreSQL compatível com PolarDB for PostgreSQL. Ela permite armazenar e gerenciar dados de nuvem de pontos com eficiência, oferecendo compressão, descompressão e estatísticas de atributos. Além disso, integra-se a outros módulos do GanosBase para fornecer recursos de análise espacial para dados de nuvem de pontos.

Recursos

O GanosBase PointCloud fornece dois tipos de dados: PcPoint e PcPatch. O PcPoint é o objeto básico de nuvem de pontos e oferece suporte à importação e exportação de dados, consulta de metadados e consulta espacial. O PcPatch é uma coleção de objetos de nuvem de pontos que oferece suporte ao empacotamento de dados, compressão, descompressão, consulta de metadados e filtragem.

Casos de uso

O GanosBase PointCloud é comum nos seguintes cenários:

  • Modelagem e visualização 3D

    O GanosBase PointCloud armazena e processa dados de digitalização 3D para modelagem e visualização, sendo útil para projetos arquitetônicos, planejamento urbano e preservação de patrimônio cultural.

  • Robótica e direção autônoma

    O GanosBase PointCloud processa dados de percepção 3D em sistemas de robótica e direção autônoma para dar suporte à detecção de ambiente, identificação de obstáculos e planejamento de rotas.

  • Medição industrial e controle de qualidade

    No setor industrial, o GanosBase PointCloud processa dados de medição 3D, como perfis de superfície de produtos obtidos por scanners a laser. Esses dados servem para controle de qualidade, design de produtos e otimização de processos de fabricação.

Arquitetura

Schema de nuvem de pontos

Os dados brutos de nuvem de pontos podem ter várias dimensões, cada uma com precisão diferente. O GanosBase Pointcloud usa o mesmo formato de Schema Document do PDAL (doravante denominado schema document) para descrever as dimensões de cada ponto e o tipo de dados de cada dimensão.

O schema document é armazenado na tabela pointcloud_formats junto com um PCID exclusivo.

Objetos de nuvem de pontos

Armazene dados de nuvem de pontos em tabelas de nuvem de pontos usando o tipo PcPoint ou PcPatch.

  • PcPoint é o objeto básico de nuvem de pontos. Ele possui pelo menos as dimensões de coordenadas X e Y e pode incluir dimensões adicionais.

    A representação JSON de um objeto PcPoint é:

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

    Em que:

    • PCID: chave estrangeira para a tabela pointcloud_formats.

    • pt: dados de nuvem de pontos que seguem o formato descrito no schema document referenciado pelo PCID.

  • PcPatch é uma coleção de objetos PcPoint próximos. Isso reduz o número de linhas no banco de dados.

    A representação JSON de um objeto PcPatch é:

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

Escolha o tipo com base no seu caso de uso:

  • Use PcPoint se você sempre processar pontos individuais.

  • Prefira PcPatch para consultas e operações eficientes em dados de nuvem de pontos em grande escala.

Referência espacial

Um sistema de referência espacial (SRS) define como os objetos PointCloud são mapeados para locais específicos na superfície da Terra.

O GanosBase usa um número inteiro chamado SRID para referenciar uma definição de SRS. Os objetos PointCloud associam-se a um SRS por meio de seu valor SRID.

Para obter mais informações, consulte Spatial reference.

Visualização de colunas de dados

O GanosBase PointCloud também fornece uma visualização de coluna de nuvem de pontos semelhante à visualização de coluna de geometria no modelo de geometria.

Coluna

Tipo

Descrição

schema

varchar(256)

O schema que contém a tabela.

table

varchar(63)

O nome da tabela.

column

varchar(63)

O nome de uma coluna de nuvem de pontos na tabela.

pcid

integer

O ID do schema document para a coluna de nuvem de pontos. Esta é uma chave estrangeira para a tabela pointcloud_formats.

srid

integer

O SRID da coluna de nuvem de pontos. Esta é uma chave estrangeira para a tabela spatial_ref_sys.

type

varchar(30)

PcPoint ou PcPatch.

Consulte todas as colunas de nuvem de pontos no banco de dados atual:

SELECT * FROM pointcloud_columns;

Compressão de dados

Os conjuntos de dados de nuvem de pontos geralmente são muito grandes. No GanosBase PointCloud, especifique um método de compressão no schema document:

<pc:metadata>
  <Metadata name="compression">compression_method</Metadata>
</pc:metadata>

Há suporte para os seguintes métodos de compressão:

  • None: valor padrão. Os arrays de bytes de PcPoint e PcPatch são armazenados usando os tipos e formatos definidos no schema document sem compressão.

  • Dimensional: aplicável apenas a PcPatch. Converte o armazenamento baseado em linhas para armazenamento baseado em colunas por dimensão e aplica esquemas de compressão apropriados.

  • Run-length encoding: adequado para dimensões com baixa variabilidade.

  • Common bits removal: indicado para dimensões em que os valores variam dentro de uma faixa estreita.

  • Deflate (zlib): método padrão quando outros métodos não são aplicáveis.

  • LAZ/LASZip: formato de compressão padrão para dados LiDAR.

Compressão dimensional

Para um PcPatch com quatro dimensões e seis pontos:

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

Após ativar a compressão dimensional, o PcPatch torna-se teoricamente equivalente a:

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

Para objetos PcPatch pequenos com dados relativamente uniformes, a compressão dimensional atinge uma taxa de 3:1 a 5:1.

Início rápido

Introdução

O guia de início rápido ajuda você a entender rapidamente o uso do GanosBase PointCloud, incluindo criação de extensão, definição de schema, criação de tabela, inserção de dados e cálculo de atributos.

Referência de sintaxe

  • Crie as extensões.

    CREATE extension ganos_pointcloud cascade;
    CREATE extension ganos_pointcloud_geometry cascade;
    Nota

    Recomendamos instale as extensões no schema public para evitar problemas de permissão.

    CREATE extension ganos_pointcloud WITH schema public;
    CREATE extension ganos_pointcloud_geometry WITH schema public;
  • Defina um schema de nuvem de pontos.

    A tabela pointcloud_formats é criada por padrão. Insira um schema XML na tabela. O schema define as dimensões de atributos dos dados de nuvem de pontos, incluindo tamanho dos dados, tipo, nome e descrição de cada dimensão.

    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>');
  • Tipos de dados de nuvem de pontos.

    -- Point type: pcpoint
    CREATE type pcpoint(...);
    The dimensions of each point are defined by the schema.
    Each point is stored as one row.
    Example: ST_MakePoint(1, ARRAY[2,3,4,0.5]) returns a PcPoint object.
    -- Patch type: pcpatch
    CREATE type pcpatch(...);
    A patch is a collection of points that supports compression. The compression method is determined by the “compression” setting in the schema.
    Patches can compress multiple points into a single row, reducing storage space while supporting spatial queries.
  • Crie tabelas de nuvem de pontos.

    -- A table of points
    CREATE TABLE points (
        id SERIAL PRIMARY KEY,
        pt PCPOINT(1)     -- (1) references the schema with PCID = 1 in pointcloud_formats
    );
    -- A table of patches
    CREATE TABLE patches (
        id SERIAL PRIMARY KEY,
        pa PCPATCH(1)
    );
  • Insira dados 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]}
  • Insira dados 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]
    ]}
  • Calcule a média dos atributos de PcPatch.

    SELECT ST_AsText(ST_PatchAvg(pa)) FROM patches WHERE id = 7;
    -------------------------
    {"pcid":1,"pt":[-126.46,45.54,54.5,5]}
  • Remova as extensões (opcional).

    DROP extension ganos_pointcloud_geometry;
    DROP extension ganos_pointcloud cascade;

Referência SQL

Para obter a referência completa de SQL, consulte Point cloud SQL reference.