# tf\_load\_point\_cloud

Loads one or more `las` or `laz` point cloud/LiDAR files from a local file or directory source, optionally tranforming the output SRID to `out_srs` (if not specified, output points are automatically transformed to EPSG:4326 lon/lat pairs).

If `use_cache` is set to `true`, an internal point cloud-specific cache will be used to hold the results per input file, and if queried again will significantly speed up the query time, allowing for interactive querying of a point cloud source. If the results of `tf_load_point_cloud` will only be consumed once (for example, as part of a `CREATE TABLE` statement), it is highly recommended that `use_cache` is set to `false` or left unspecified (as it is defaulted to `false`) to avoid the performance and memory overhead incurred by used of the cache.

The bounds of the data retrieved can be optionally specified with the `x_min`, `x_max`, `y_min`, `y_max` arguments. These arguments can be useful when the user desires to retrieve a small geographic area from a large point-cloud file set, as files containing data outside the bounds of the specified bounding box will be quickly skipped by `tf_load_point_cloud`, only requiring a quick read of the spatial metadata for the file.

```
SELECT * FROM TABLE(
    tf_load_point_cloud(
        path => <path>,
        [out_srs => <out_srs>,
        use_cache => <use_cache>,
        x_min => <x_min>,
        x_max => <x_max>,
        y_min => <y_min>,
        y_max => <y_max>]
    )
)    
```

**Input Arguments**

| Parameter              | Description                                                                                                                                                                                                                                                                                                         | Data Types         |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ |
| `path`                 | The path of the file or directory containing the las/laz file or files. Can contain globs. Path must be in `allowed-import-paths`.                                                                                                                                                                                  | TEXT ENCODING NONE |
| `out_srs` (optional)   | EPSG code of the output SRID. If not specified, output points are automatically converted to lon/lat (EPSG 4326).                                                                                                                                                                                                   | TEXT ENCODING NONE |
| `use_cache` (optional) | If true, use internal point cloud cache. Useful for inline querying of the output of `tf_load_point_cloud`. Should turn off for one-shot queries or when creating a table from the output, as adding data to the cache incurs performance and memory usage overhead. If not specified, is defaulted to `false`/off. | BOOLEAN            |
| `x_min` (optional)     | Min x-coordinate value (in degrees) for the output data.                                                                                                                                                                                                                                                            | DOUBLE             |
| `x_max` (optional)     | Max x-coordinate value (in degrees) for the output data.                                                                                                                                                                                                                                                            | DOUBLE             |
| `y_min`(optional)      | Min y-coordinate value (in degrees) for the output data.                                                                                                                                                                                                                                                            | DOUBLE             |
| `y_max` (optional)     | Max y-coordinate value (in degrees) for the output data.                                                                                                                                                                                                                                                            | DOUBLE             |

**Output Columns**

| Name                       | Description                                                                                                                                                                                                                                                                                                                                                                              | Data Types        |
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- |
| `x`                        | Point x-coordinate                                                                                                                                                                                                                                                                                                                                                                       | Column\<DOUBLE>   |
| `y`                        | Point y-coordinate                                                                                                                                                                                                                                                                                                                                                                       | Column\<DOUBLE>   |
| `z`                        | Point z-coordinate                                                                                                                                                                                                                                                                                                                                                                       | Column\<DOUBLE>   |
| `intensity`                | Point intensity                                                                                                                                                                                                                                                                                                                                                                          | Column\<INT>      |
| `return_num`               | The ordered number of the return for a given LiDAR pulse. The first returns (lowest return numbers) are generally associated with the highest-elevation points for a LiDAR pulse, i.e. the forest canopy will generally have a lower `return_num` than the ground beneath it.                                                                                                            | Column\<TINYINT>  |
| `num_returns`              | The total number of returns for a LiDAR pulse. Multiple returns occur when there are multiple objects between the LiDAR source and the lowest ground or water elevation for a location.                                                                                                                                                                                                  | Column\<TINYINT>  |
| `scan_direction_flag`      | From the [ASPRS LiDAR Data Exchange Format Standard](http://www.asprs.org/a/society/committees/standards/asprs_las_format_v10.pdf): "The scan direction flag denotes the direction at which the scanner mirror was traveling at the time of the output pulse. A bit value of 1 is a positive scan direction, and a bit value of 0 is a negative scan direction."                         | Column\<TINYINT>  |
| `edge_of_flight_line_flag` | From the [ASPRS LiDAR Data Exchange Format Standard](http://www.asprs.org/a/society/committees/standards/asprs_las_format_v10.pdf): "The edge of flight line data bit has a value of 1 only when the point is at the end of a scan. It is the last point on a given scan line before it changes direction."                                                                              | Column\<TINYINT>  |
| `classification`           | From the [ASPRS LiDAR Data Exchange Format Standard](http://www.asprs.org/a/society/committees/standards/asprs_las_format_v10.pdf): "The classification field is a number to signify a given classification during filter processing. The ASPRS standard has a public list of classifications which shall be used when mixing vendor specific user software."                            | Column\<SMALLINT> |
| `scan_angle_rank`          | From the [ASPRS LiDAR Data Exchange Format Standard](http://www.asprs.org/a/society/committees/standards/asprs_las_format_v10.pdf): "The angle at which the laser point was output from the laser system, including the roll of the aircraft... The scan angle is an angle based on 0 degrees being NADIR, and –90 degrees to the left side of the aircraft in the direction of flight." | Column\<TINYINT>  |

**Example A**

```
CREATE TABLE wake_co_lidar_test AS
SELECT
  *
FROM
  TABLE(
    tf_load_point_cloud(
      path => '/path/to/20150118_LA_37_20066601.laz'
    )
  );
```

**Example B**

```
SELECT
  x, y, z, classification
FROM
  TABLE(
    tf_load_point_cloud(
      path => '/path/to/las_files/*.las',
      out_srs => 'EPSG:4326',
      use_cache => true,
      y_min => 37.0,
      y_max => 38.0,
      x_min => -123.0,
      x_max => -122.0
    )
  )
```

<figure><img src="https://875484548-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgWRc88gdQeZ7mRBB46Rx%2Fuploads%2Fgit-blob-998e40b69d6a9a3574b232016993bae1919af06d%2Ftallahassee_lidar.png?alt=media" alt=""><figcaption><p>LiDAR data from downtown Tallahassee, FL, colored by Z-value</p></figcaption></figure>
