29.11 SDO_PC_PKG.PC_DIFFERENCE

Format

SDO_PC_PKG.PC_DIFFERENCE(
     pc_table1            IN  VARCHAR2,
     pc_column1           IN  VARCHAR2, 
     id_column1           IN  VARCHAR2, 
     id1                  IN  VARCHAR2, 
     pc_table2            IN  VARCHAR2, 
     pc_column2           IN  VARCHAR2,
     id_column2           IN  VARCHAR2,
     id2                  IN  VARCHAR2,
     result_table_name    IN  VARCHAR2,
     tol                  IN  NUMBER,
     query_geom           IN  MDSYS.SDO_GEOMETRY DEFAULT NULL
     ) DETERMINISTIC PARALLEL_ENABLE;

Description

Compares two point clouds, that may or may not have neighbors in the other point cloud, and returns the output difference as a new point cloud.

Parameters

pc_table1

Name of the table that has the SDO_POINT_CLOUD column and ID column defined for the first point cloud.

pc_column1

Column name of the SDO_POINT_CLOUD object in the table provided for pc_table1 parameter.

id_column1

Column name for the ID column in the table provided for pc_table1 parameter.

id1

ID value.

pc_table2

Name of the table that has the SDO_POINT_CLOUD column and ID column defined for the second point cloud.

pc_column2

Column name of the SDO_POINT_CLOUD object in the table provided for pc_table2 parameter.

id_column2

Column name for the ID column in the table provided for pc_table2 parameter.

id2

ID value.

result_table_name

Name of the table for storing the output difference as a new point cloud data.

tol

A length unit of measure that determines the neighborhood of a point.

query_geom

Query geometry.

Usage Notes

The procedure SDO_PC_PKG.PC_DIFFERENCE can be used to compare two point clouds by identifying points in either without close neighbors in the other.

For example, consider two point clouds, A and B. A point in point cloud A without a geometric neighbor in point cloud B may signify:

  • A real change, such as a car that was not there, previously.
  • A change due to an obstructed spot not reached by the laser.
  • Combination of the preceding two scenarios - a newly arrived car may register in the second point cloud, while it obscures a section of the building wall or a light pole. A portion of the wall may appear to have disappeared.
  • Growing canopy cover can make some points disappear, to essentially reappear a meter higher. Difference detection may consider them as one feature disappearing and another appearing.

Therefore, in the context of multiple point clouds, detecting differences between two point clouds can be very useful to determine:

  • Weekly progress at a development or infrastructure project.
  • Damage from natural or man-made disasters.
  • Change in canopy cover or other slow-moving processes.
  • Discovery of human activity, such as real estate changes or tree felling.

In the procedure SDO_PC_PKG.PC_DIFFERENCE, the two point clouds, A and B, are identified by the following input parameters:

  • Point Cloud A: pc_table1, pc_column1, id_column1, id1
  • Point Cloud B: pc_table2, pc_column2, id_column2, id2

It is important that the two point clouds have the same SRID. A coordinate transformation between SRIDs is supported.

The output difference is a new point cloud which is a simple table with columns VAL_Di.

Examples

The following example generates the difference between two point clouds and the output point cloud data is stored in the table PC1M2_B.

SQL> call
  2    sdo_pc_pkg.pc_difference(
  3      pc_table1         => 'PCS',
  4      pc_column1        => 'PC',
  5      id_column1        => 'ID',
  6      id1               => '1',
  7      pc_table2         => 'PCS',
  8      pc_column2        => 'PC',
  9      id_column2        => 'ID',
 10      id2               => '2',
 11      result_table_name => 'PC1M2_B',
 12      tol               => 1,
 13      query_geom        => SDO_GEOMETRY(
 14                             2003,
 15                             27700,
 16                             NULL,
 17                             SDO_ELEM_INFO_ARRAY(
 18                               1, 1003, 3),
 19                             SDO_ORDINATE_ARRAY(
 20                               0, 0,
 21                               1000, 1000))
);
Call completed.

You can then query the ordinates as shown:


SQL> select * from pc1m2_b order by val_d1, val_d2, val_d3;

    VAL_D1     VAL_D2     VAL_D3
---------- ---------- ----------
         1          1          5

1 row selected.