Nubes de puntos estáticas

Los tipos estáticos provienen de pgPointCloud. MobilityDB expone las funciones de acceso de coordenadas con conocimiento del esquema necesarias para proyectar los valores de pgPointCloud en el resto del ecosistema de tipos temporales.

Entrada y salida

El texto de un pcpoint y de un pcpatch es el hexadecimal de su representación binaria conocida (WKB) de pgPointCloud, el texto que leen y escriben las funciones de entrada y salida del tipo de pgPointCloud, y cada motor lo lee y lo escribe con las funciones siguientes.

  • Devuelve la representación hexadecimal binaria conocida (HexWKB) de un pcpoint o de un pcpatch

    asHexWKB({pcpoint,pcpatch}) → text
    

    El resultado es el texto que escribe la función de salida del tipo de pgPointCloud, en el orden de bytes de la máquina.

    SELECT asHexWKB(pcpoint(1, 1.0, 2.0, 3.0));
    -- 010100000064000000C80000002C010000
    SELECT asHexWKB(pcpatch(pcpoint(1, 1.0, 1.0, 1.0), pcpoint(1, 2.0, 2.0, 2.0)));
    -- 01010000000000000002000000640000006400000064000000C8000000C8000000C8000000
    
  • Entrada de un pcpoint o de un pcpatch a partir de su representación hexadecimal binaria conocida (HexWKB)

    pcpointFromHexWKB(text) → pcpoint
    pcpatchFromHexWKB(text) → pcpatch
    

    La entrada se lee como la lee la función de entrada del tipo de pgPointCloud, en cualquier orden de bytes, bajo el esquema de su pcid.

    SELECT getZ(pcpointFromHexWKB('010100000064000000C80000002C010000'));
    -- 3
    SELECT numPoints(pcpatchFromHexWKB('01010000000000000002000000640000006400000064000000C8000000C8000000C8000000'));
    -- 2
    

Constructores

La función pcpoint_in de pgPointCloud solo acepta hex-WKB, por lo que el constructor canónico es PC_MakePoint(pcid, ARRAY[…]::float[]). MobilityDB incluye dos sobrecargas SQL ligeras sobre él para literales de prueba más cortos y consultas ad hoc; la validación subyacente de dimensiones del esquema sigue ocurriendo dentro de PC_MakePoint.

  • Construye un pcpoint 2D o 3D directamente a partir de coordenadas x/y(/z)

    pcpoint(pcid integer,x float,y float) → pcpoint
    pcpoint(pcid integer,x float,y float,z float) → pcpoint
    
    SELECT pcpoint(1, 10.0, 20.0, 30.0);
    -- Equivalent to pcpoint(1, 10.0, 20.0, 30.0)
    
  • Construye un pcpoint a partir de las coordenadas de cada dimensión del esquema

    pcpoint(pcid integer,coordinates float[]) → pcpoint
    

    La disposición del esquema indica cada dimensión, incluidas las inactivas, que es como se dan sus valores a un esquema con más dimensiones de las que alcanzan las sobrecargas anteriores. Ese número es el que toma PC_MakePoint y NO es el número de dimensiones activas que informa pointCloudSchemaNDims

    SELECT pcpoint(1, ARRAY[10.0, 20.0, 30.0]::float[]);
    
  • Construye un pcpatch a partir de las coordenadas de sus puntos, un punto tras otro

    pcpatch(pcid integer,coordinates float[]) → pcpatch
    

    Para cada punto se da cada dimensión de la disposición del esquema, incluidas las inactivas. Ese número es el que toma PC_MakePatch y NO es el número de dimensiones activas que informa pointCloudSchemaNDims; un número que sea múltiplo del que no corresponde construye un parche de puntos erróneos en lugar de informar un error. Un parche construido así declara él mismo el esquema, al no haber ningún punto del que leerlo

    SELECT pcpatch(1, ARRAY[1.0, 1.0, 1.0, 2.0, 2.0, 2.0]::float[]);
    
  • Construye un pcpatch a partir de una lista variádica de pcpoints que comparten el mismo pcid

    pcpatch(VARIADIC points pcpoint[]) → pcpatch
    
    SELECT pcpatch(pcpoint(1, 1.0, 1.0, 1.0), pcpoint(1, 2.0, 2.0, 2.0));
    -- Equivalent to pcpatch(pcpoint(1, 1.0, 1.0, 1.0), pcpoint(1, 2.0, 2.0, 2.0))
    

Accesores

  • Devuelve el identificador de esquema de un pcpoint o pcpatch

    pcid({pcpoint,pcpatch}) → integer
    
    SELECT pcid(pcpoint(1, 10.0, 20.0, 30.0));
    -- 1
    
  • Devuelve una coordenada de un pcpoint, NULL si la dimensión está ausente del esquema

    getX(pcpoint) → float
    getY(pcpoint) → float
    getZ(pcpoint) → float
    
    WITH pt AS (SELECT pcpoint(1, 10.0, 20.0, 30.0) p)
      SELECT getX(p), getY(p), getZ(p) FROM pt;
    -- 10 | 20 | 30
    
  • Devuelve cualquier dimensión con nombre de un pcpoint, NULL si el nombre es desconocido para el esquema

    getDim(pcpoint,text) → float
    
    SELECT getDim(pcpoint(1, 10.0, 20.0, 30.0), 'X');
    -- 10
    
  • Devuelve el identificador de referencia espacial (heredado del esquema)

    SRID({pcpoint,pcpatch}) → integer
    
    SELECT SRID(pcpoint(1, 10.0, 20.0, 30.0));
    -- 0
    SELECT SRID(pcpatch(pcpoint(1, 10.0, 20.0, 30.0), pcpoint(1, 11.0, 21.0, 31.0)));
    -- 0
    
  • Devuelve el número de puntos de un pcpatch

    numPoints(pcpatch) → integer
    
    SELECT numPoints(pcpatch(pcpoint(1, 1.0, 1.0, 1.0), pcpoint(1, 2.0, 2.0, 2.0)));
    -- 2
    
  • Devuelve el n-ésimo punto de un pcpatch

    pointN(pcpatch,integer) → pcpoint
    

    Los puntos se numeran desde uno, un entero negativo cuenta desde el final del parche, y un entero que no designa ningún punto devuelve NULL.

    SELECT pointN(pcpatch(pcpoint(1, 1.0, 1.0, 1.0), pcpoint(1, 2.0, 2.0, 2.0)), 2)
      = pcpoint(1, 2.0, 2.0, 2.0);
    -- true
    SELECT pointN(pcpatch(pcpoint(1, 1.0, 1.0, 1.0), pcpoint(1, 2.0, 2.0, 2.0)), 3)
      IS NULL;
    -- true
    
  • Devuelve el multipunto de las posiciones que ocupan los puntos de un parche

    geometry(pcpatch) → geometry
    

    El esquema que nombra el pcid decide el SRID y si el resultado lleva una dimensión Z

    SELECT ST_AsText(geometry(pcpatch(pcpoint(1, 1, 1, 1), pcpoint(1, 2, 2, 2))));
    -- MULTIPOINT Z ((1 1 1),(2 2 2))