# HeavyRF Table Functions

The HeavyRF package provides the following system table functions:

* [`tf_rf_prop_max_signal` (directional antennas)](#tf_rf_prop_max_signal-directional-antennas)
* [`tf_rf_prop_max_signal` (isotropic antennas)](#tf_rf_prop_max_signal-isotropic-antennas)
* [`tf_rf_prop`](#tf_rf_prop)

## tf\_rf\_prop\_max\_signal (Directional Antennas and Terrain Attenuation)

Taking a set of point elevations and a set of signal source locations as input, `tf_rf_prop_max_signal` executes line-of-sight 2.5D RF signal propagation from the provided sources over a binned 2.5D elevation grid derived from the provided terarin locations, calculating the max signal in dBm at each grid cell, using the formula for free-space power loss. The terrain should contain columns for ground elevation, terrain elevation (which should be greater than or equal to the ground elevation height), and terrain attenuation in dbm per meter, specifying the degree to which signal will be attenuated if it passes between the terrain and ground elevations (i.e. through a tree or building). The RF source ID contributing the strongest signal is also outputted.

When `geographic_coords` is set to `true`, `x` and `y` input coordinates are assumed to be lon/lat degrees. A best-fit conversion to a meters coordinate system is executed using the change in meters per lon/lat degree at the centroid of the input terrain, using the haversine distance formula. For convenience and optimal performance, `tf_rf_prop_max_signal` enables filter push-down by default, such that filters on the outputs `rf_source_id`, `x`, `y`, and `elevation_amsl_meters` are pushed down to the respective inputs in the `rf_sources` and `terrain_elevations` `Cursor` subqueries.

```
SELECT * FROM TABLE(
   tf_rf_prop_max_signal(
      rf_sources => CURSOR(
         SELECT 
            rf_source_id,
            rf_source_x,
            rf_source_y, 
            rf_source_z,
            rf_source_signal_strength_watts,
            rf_source_signal_frequency_mhz,
            rf_source_antenna_azimuth_degrees,
            rf_source_antenna_downtilt_degrees,
            rf_source_antenna_type
         FROM
            rf_sources_table
      ),
      terrain_elevations => CURSOR(
         SELECT
             x,
             y,
             ground_elevation_amsl_meters,
             terrain_elevation_amsl_meters,
             terrain_attenuation_dbm_per_meter 
          FROM
             terrain_table
      ),
      antenna_patterns => CURSOR(
         SELECT
             antenna_type,
             antenna_gain,
             antenna_horizontal_degrees,
             antenna_horizontal_attenuation,
             antenna_vertical_degrees,
             antenna_vertical_attenuation
          FROM
             antennas_table
      ),
      rf_source_z_is_relative_to_terrain => <rf_source_is_relative_to_terrain>, 
      geographic_coords => <geographic_coords>,
      bin_dim_meters => <bin_dim_meters>, 
      assumed_receiver_height_agl => <assumed_receiver_height_agl>,
      max_ray_travel_meters => <max_ray_travel_meters>, 
      initial_rays_per_source => <initial_rays_per_source>,
      rays_per_bin_autosplit_threshold => <rays_per_bin_autosplit_threshold>,
      min_receiver_signal_strength_dbm => <min_receiver_signal_strength_dbm>,
      default_source_height_agl_meters => <default_source_height_agl_meters>,
      ray_step_bin_multiple => <ray_step_bin_multiple>,
      loop_grain_size => <loop_grain_size>, 
   )
)
```

**Input Arguments**

<table><thead><tr><th width="218">Parameter</th><th width="143">Cursor</th><th>Description</th><th>Data Types</th></tr></thead><tbody><tr><td><code>rf_source_id</code></td><td><code>rf_sources</code></td><td>ID of the RF source. Used in the output for each grid cell to denote the RF source contributing the strongest signal.</td><td><code>Column&#x3C;INT | BIGINT | TEXT ENCODING DICT></code></td></tr><tr><td><code>rf_source_x</code></td><td><code>rf_sources</code></td><td>x-coordinate of the RF source, assumed to be in longitude degrees. Whether FLOAT or DOUBLE, <code>rf_source_x</code> must be the same type as all other columns in the <code>rf_sources</code> CURSOR, excluding <code>rf_source_z</code>.</td><td><code>Column &#x3C;FLOAT | DOUBLE></code></td></tr><tr><td><code>rf_source_y</code></td><td><code>rf_sources</code></td><td>y-coordinate of the RF source, assumed to be in longitude degrees. Whether FLOAT or DOUBLE, <code>rf_source_y</code> must be the same type as all other columns in the <code>rf_sources</code> CURSOR, excluding <code>rf_source_z</code>.</td><td><code>Column &#x3C;FLOAT | DOUBLE></code> (must be same type as <code>rf_source_x</code>)</td></tr><tr><td><code>rf_source_z_meters</code></td><td><code>rf_sources</code></td><td>z-coordinate of the RF source, in meters. If <code>rf_source_is_relative_to_terrain</code> is set to <code>true</code>, meters are relative to the terrain height; for example, an input of <code>20</code> is 20 meters above ground level. Otherwise, it is absolute height above sea level; <code>20</code> is 20 meters above mean sea level (AMSL).</td><td><code>Column &#x3C;FLOAT | DOUBLE></code></td></tr><tr><td><code>rf_source_power_watts</code></td><td><code>rf_sources</code></td><td>Power in Watts (W) of the transmitting antenna. <code>rf_source_power_watts</code> must be the same type s all other columns in the <code>rf_sources</code> CURSOR, excluding <code>rf_source_z</code>.</td><td><code>Column &#x3C;FLOAT | DOUBLE></code> (must be same type as <code>rf_source_x</code>)</td></tr><tr><td><code>rf_source_freq_mhz</code></td><td><code>rf_sources</code></td><td>Frequency in megahertz (MHz) of the transmitting antenna. <code>rf_source_freq_mhz</code> must be the same type s all other columns in the <code>rf_sources</code> CURSOR, excluding <code>rf_source_z</code>.</td><td><code>Column &#x3C;FLOAT | DOUBLE></code> (must be same type as <code>rf_source_x</code>)</td></tr><tr><td><code>rf_source_antenna_azimuth_degrees</code></td><td><code>rf_sources</code></td><td>Azimuth in degrees of the transmitting antenna. <code>rf_source_antenna_azimuth_degrees</code> must be the same type s all other columns in the <code>rf_sources</code> CURSOR, excluding <code>rf_source_z</code>.</td><td><code>Column &#x3C;FLOAT | DOUBLE></code> (must be same type as <code>rf_source_x</code>)</td></tr><tr><td><code>rf_source_antenna_downtilt_degrees</code></td><td><code>rf_sources</code></td><td>Downtilt in degrees of the transmitting antenna. <code>rf_source_antenna_gain</code> must be the same type s all other columns in the <code>rf_sources</code> CURSOR, excluding <code>rf_source_z</code>.</td><td><code>Column &#x3C;FLOAT | DOUBLE></code> (must be same type as <code>rf_source_x</code>)</td></tr><tr><td><code>rf_source_antenna_type</code></td><td><code>rf_sources</code></td><td>The type of antenna deployed. Used to lookup the antenna parameters in the antenna patterns table for the matching type entry. Must be a text type. Antenna types that are null or have no match in the <code>antenna_patterns</code> table will be considered omnidirectional.</td><td><code>Column &#x3C;TEXT ENCODING DICT></code></td></tr><tr><td><code>terrain_x</code></td><td><code>terrain_elevations</code></td><td>x-coordinate of the terrain. If <code>geographIc_coords</code> is <code>true</code>, this is assumed to be in longitude degrees, otherwise in meters. Whether FLOAT or DOUBLE, <code>terrain_x</code> and <code>terrain_y</code> must be the same type.</td><td><code>Column &#x3C;FLOAT | DOUBLE></code></td></tr><tr><td><code>terrain_y</code></td><td><code>terrain_elevations</code></td><td>y-coordinate of the terrain. If <code>geographIc_coords</code> is <code>true</code>, this is assumed to be in latitude degrees, otherwise in meters. Whether FLOAT or DOUBLE, <code>terrain_x</code> and <code>terrain_y</code> must be the same type.</td><td><code>Column &#x3C;FLOAT | DOUBLE></code> (must be same type as <code>terrain_x</code>)</td></tr><tr><td><code>ground_elevation_amsl_meters</code></td><td><code>terrain_elevations</code></td><td>Elevation of the ground, in meters above sea level. Ground is considered to fully occlude signal</td><td><code>Column &#x3C;FLOAT | DOUBLE</code> (should be same type as <code>terrain_elevation_amsl_meters</code> and <code>terrain_attenuation_dbm_per_meter</code>)</td></tr><tr><td><code>terrain_elevation_amsl_meters</code></td><td><code>terrain_elevations</code></td><td>Maximum elevation of the terrain (could be a building, vegetation, or the ground itself), in meters above sea level. Should be greater than or equal to <code>ground_elevation_amsl_meters</code></td><td><code>Column &#x3C;FLOAT | DOUBLE</code> (should be same type as <code>ground_elevation_amsl_meters</code> and <code>terrain_attenuation_dbm_per_meter</code>)</td></tr><tr><td><code>terrain_attenuation_dbm_per_meter</code></td><td><code>terrain_elevations</code></td><td>Attenuation in dBm for any ray that passes above <code>ground_elevation_amsl_meters</code> and below <code>terrain_elevation_amsl_meters</code>. If type of terrain is present in the source table, the attenuation value can be looked up from another terrain attenuation table via a join.</td><td><code>Column &#x3C;FLOAT | DOUBLE</code> (should be same type as <code>ground_elevation_amsl_meters</code> and <code>terrain_elevation_amsl_meters</code>)</td></tr><tr><td><code>antenna_type</code></td><td><code>antenna_patterns</code></td><td>Antenna type as text arguement. Used to join with <code>rf_sources</code> table. If <code>antenna_type</code> is <code>'default'</code>, the patterns for this type will be used for all <code>rf_sources</code> entry with type <code>'default'</code>, <code>null</code>, or that otherwise do not have a corresponding <code>antenna_type</code> entry in the <code>antenna_patterns</code> table.</td><td><code>Column &#x3C;TEXT ENCODING DICT></code></td></tr><tr><td><code>antenna_gain</code></td><td><code>antenna_patterns</code></td><td>The gain in dBm for this antenna type.</td><td><code>Column &#x3C;FLOAT | DOUBLE></code> (all numeric arguments in <code>antenna_patterns</code> CURSOR must be the same type)</td></tr><tr><td><code>antenna_horizontal_degrees</code></td><td><code>antenna_patterns</code></td><td>An array specifying a set of degrees from 0 to 360, with 0 degrees representing due North, 90 degrees due East, 180 degrees due South, and 270 degrees due West. The corresponding indexed entry in the <code>antenna_horizontal_attenuations</code> specifies the attenuation for the degree entry. An entry will be created for each integer degree, with missing entries linearly interpolated from the closest neighbors below and above that degree. Entries can but do not have to be in order.</td><td><code>Column &#x3C;FLOAT | DOUBLE></code> (all numeric arguments in <code>antenna_patterns</code> CURSOR must be the same type)</td></tr><tr><td><code>antenna_horizontal_attenuation</code></td><td><code>antenna_patterns</code></td><td>An array specifying the amount of attenuation, in dBm, for the corresponding entry with the same index in the <code>antenna_horizontal_degrees</code> array.</td><td><code>Column &#x3C;FLOAT | DOUBLE></code> (all numeric arguments in <code>antenna_patterns</code> CURSOR must be the same type)</td></tr><tr><td><code>antenna_vertical_degrees</code></td><td><code>antenna_patterns</code></td><td>An array specifying a set of degrees from 0 to 360, with 0 degrees representing forward along the horizon along the direction of the antenna azimuth, 90 degrees directly overhead, 180 degrees in the direction opposite the antenna azimuth, and 270 degrees directly toward the ground. Entries below 0 can also be used and will be wrapped appropriately (i.e. -90 degrees = 270 degrees = directly toward the ground). The corresponding indexed entry in the <code>antenna_vertical_attenuations</code> specifies the attenuation for the degree entry. An entry will be created for each integer degree, with missing entries linearly interpolated from the closest neighbors below and above that degree. Entries can but do not have to be in order.</td><td><code>Column &#x3C;FLOAT | DOUBLE></code> (all numeric arguments in <code>antenna_patterns</code> CURSOR must be the same type)</td></tr><tr><td><code>antenna_vertical_attenuation</code></td><td><code>antenna_patterns</code></td><td>An array specifying the amount of attenuation, in dBm, for the corresponding entry with the same index in the <code>antenna_vertical_degrees</code> array.</td><td><code>Column &#x3C;FLOAT | DOUBLE></code> (all numeric arguments in <code>antenna_patterns</code> CURSOR must be the same type)</td></tr><tr><td><code>rf_source_z_is_relative_to_terrain</code></td><td>N/A</td><td><code>true</code> specifies that <code>rf_source_z_meters</code> values are the height in meters above ground level. <code>false</code> indicates the values are height in meters above sea level.</td><td><code>BOOLEAN</code></td></tr><tr><td><code>geographic_coords</code></td><td>N/A</td><td><code>true</code> specifies that the input <code>x</code> and <code>y</code> arguments for RF sources and terrain elevations are in lon/lat degrees. <code>false</code> specifies that the data is already in a local meter coordinate system.</td><td><code>BOOLEAN</code></td></tr><tr><td><code>bin_dim_meters</code></td><td>N/A</td><td>Width and height of each binned terrain cell, which is the unit of granularity over which the RF propagation algorithm is executed.</td><td><code>DOUBLE</code></td></tr><tr><td><code>assumed_receiver_height_agl</code></td><td>N/A</td><td>Height in meters above <code>ground_elevation_amsl_meters</code> from the <code>terrains_elevation</code> cursor to measure the signal strength at, i.e. the modeled height of the receiving handset above ground.</td><td>DOUBLE</td></tr><tr><td><code>max_ray_travel_meters</code></td><td>N/A</td><td>Maximum meters for which to model RF propagation from any given source. Lower values can increase performance, but potentially miss the strongest repeater for a terrain cell that is further away than the value set.</td><td><code>DOUBLE</code></td></tr><tr><td><code>initial_rays_per_source</code></td><td>N/A</td><td>Number of initial 2.5D rays to propagate from each source. Since rays are automatically split as needed as they radiate out from the rf source, this can be safely set to a low number such as 64 to maximize performance.</td><td><code>BIGINT</code></td></tr><tr><td><code>rays_per_bin_autosplit_threshold</code></td><td>N/A</td><td>Minimum ratio of radial rays per bin, below which the ray is split into two to ensure ray coverage of terrain bins as distance increases from the rf_source. 1.5 is a safe default value to use.</td><td><code>DOUBLE</code></td></tr><tr><td><code>min_receiver_signal_strength_dbm</code></td><td>N/A</td><td>The minimum signal strength threshold in dBm to continue propagating a signal ray from a source. Rays stop being propagated when either the distance from the source exceeds the limit set by <code>max_ray_travel_meters</code>, or the signal strength (as measured by free-space power loss, assuming no obstructions in the path) drops below the value set by <code>min_receiver_signal_strength_dbm</code>.</td><td><code>DOUBLE</code></td></tr><tr><td><code>assumed_source_height_above_ground</code></td><td>N/A</td><td>The default height in meters above ground level for a source if there is no input data in the <code>terrain_elevations</code> for the terrain bin in which a given <code>rf_source</code> lies.</td><td><code>DOUBLE</code></td></tr><tr><td><code>ray_step_bin_multiple</code></td><td>N/A</td><td>The step, in number of bins (can be fractional), used to increment the ray propagation as the ray radiates out from the RF source. Lower values of this (below 1.0) can increase accuracy of the simulation, but decrease performance. Values above 1.0 are not recommended because they can cause gaps in the output.</td><td><code>DOUBLE</code></td></tr><tr><td><code>loop_grain_size</code></td><td>N/A</td><td>The size in number of rays at which to parallelize over; threads will process rays in groups of at least this size. A reasonable value might be 10, although changing this number may improve performance, depending on hardware configuration.</td><td><code>BIGINT</code></td></tr></tbody></table>

**Output Columns**

| Name                      | Description                                                                                                                                   | Data Type                                                                              |
| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| `x`                       | x-centroid of the output terrain bin. In lon/lat degrees in longitude degrees if `geographic_coords` is set to `true`, otherwise in `meters`. | `Column<FLOAT \| DOUBLE>` (same type as `rf_source_x` and `rf_source_y input columns`) |
| `y`                       | y-centroid of the output terrain bin. In lon/lat degrees in longitude degrees if `geographic_coords` is set to `true`, otherwise in `meters`. | `Column<FLOAT \| DOUBLE>` (same type as `rf_source_x` and `rf_source_y input columns`) |
| `elevation_amsl_meters`   | Maximum elevation of all input terrain data falling in the output XY terrain bin, in meters above sea level.                                  | `Column<FLOAT \| DOUBLE>` (same type as `rf_source_z_meters` input column)             |
| `rf_source_id`            | ID of the repeater with the strongest signal for the grid cell.                                                                               | `Column<INT \| BIGINT \| TEXT ENCODING DICT>`(same type as RF sources ID input)        |
| `max_signal_strength_dbm` | The maximum signal strength in dBm for a given XY-terrain bin.                                                                                | `Column<FLOAT` \| `DOUBLE>` (same type as `rf_source_x` and `rf_source_y` input)       |

**Example**

```
SELECT
  rf_source_id,
  ST_X(
    ST_TRANSFORM(
      ST_SETSRID(
        ST_POINT(x, y),
        32610
      ),
      4326
    )
  ) as lon,
  ST_Y(
    ST_TRANSFORM(
      ST_SETSRID(
        ST_POINT(x, y),
        32610
      ),
      4326
    )
  ) as lat,
  CAST(
    CASE
      WHEN max_rf_signal_strength_dbm IS NULL THEN -130.0
      ELSE max_rf_signal_strength_dbm
    END AS FLOAT
  ) AS rf_signal_strength_dbm
FROM
  TABLE(
    tf_rf_prop_max_signal(
      rf_sources => CURSOR (
        SELECT
          id,
          x,
          y,
          z,
          power_watts,
          freq_mhz,
          antenna_azimuth,
          antenna_downtilt,
          antenna_type
        FROM
          seattle_rf_sources
      ),
      terrain_elevations => CURSOR (
        SELECT
          CAST(x_utm AS FLOAT) AS x,
          CAST(y_utm AS FLOAT) AS y,
          CAST(z + 0.0001 AS float) AS elevation
        FROM
          seattle_expanded_lidar_tiled
      ),
      antenna_patterns => CURSOR (
        SELECT
          antenna_type,
          antenna_gain,
          antenna_horizontal_degrees,
          antenna_horizontal_attenuations,
          antenna_vertical_degrees,
          antenna_vertical_attenuations
        FROM
          seattle_antenna_types
      ),
      rf_source_z_is_relative_to_terrain => FALSE,
      geographic_coords => FALSE,
      bin_dim_meters => 2.0,
      assumed_receiver_height_agl => 2.0,
      max_ray_travel_meters => 2500,
      initial_rays_per_source => 64,
      rays_per_bin_autosplit_threshold => 1.5,
      min_receiver_signal_strength_dbm => -130.0,
      default_source_height_agl_meters => 20.0,
      ray_step_bin_multiple => 1.0,
      loop_grain_size => 8
    )
  )
```

<figure><img src="https://875484548-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgWRc88gdQeZ7mRBB46Rx%2Fuploads%2Fgit-blob-8d4f45cbd6432848edd04de40cfbf2b99d15a669%2Fimage_rf_seattle.png?alt=media" alt=""><figcaption><p>Output of RF Propagation for Seattle using HeavyRF Omniverse integration</p></figcaption></figure>

## tf\_rf\_prop\_max\_signal (Isotropic Antennas)

```
SELECT * FROM TABLE(
   tf_rf_prop(
      rf_sources => CURSOR(
         SELECT 
            rf_source_id, x, y, z_meters
      ),
      rf_source_z_is_relative_to_terrain, 
      rf_source_signal_strength_dbm, 
      rf_source_signal_frequency_mhz   
      terrain => CURSOR(
         SELECT 
            x, y, elevation_amsl_meters
      ),
      geographic_coords,
      bin_dim_meters, 
      max_ray_travel_meters, 
      num_rays_per_source, 
      min_receiver_signal_strength_dbm,
      default_source_height_agl_meters,
      ray_step_bin_multiple,
      loop_grain_size
   )
)
```

Taking a set of point elevations and a set of signal source locations as input, `tf_rf_prop_max_signal` executes line-of-sight 2.5D RF signal propagation from the provided sources over a binned 2.5D elevation grid derived from the provided point locations, calculating the max signal in dBm at each grid cell, using the formula for free-space power loss. The RF source ID contributing the strongest signal is also outputted.

For the short version, where `geographic_coords` defaults to true, or for the long version where `geographic_coords` is explicitly set to `true`, `x` and `y` input coordinates are assumed to be lon/lat degrees. A best-fit conversion to a meters coordinate system is executed using the change in meters per lon/lat degree at the centroid of the input terrain, using the haversine distance formula. For convenience and optimal performance, `tf_rf_prop_max_signal` enables filter push-down by default, such that filters on the outputs `rf_source_id`, `x`, `y`, and `elevation_amsl_meters` are pushed down to the respective inputs in the `rf_sources` and `terrain_elevations cursor` subqueries.

{% tabs %}
{% tab title="Short Version" %}
**Input Arguments**

<table><thead><tr><th width="202.26875913834886">Parameter</th><th width="220.58160907626427">Details</th><th>Data Type</th><th data-hidden>Description</th></tr></thead><tbody><tr><td>RF sources</td><td>Consists of <code>rf_source_id</code>, <code>x</code> (RF sources), <code>y</code> (RF sources), and <code>z_meters</code>.</td><td><code>CURSOR</code></td><td></td></tr><tr><td><code>rf_source_id</code></td><td>ID of the RF source. Used in the output for each grid cell to denote the RF source contributing the strongest signal.</td><td><code>Column&#x3C;INT</code> | <code>BIGINT</code> | <code>TEXT ENCODING DICT></code></td><td></td></tr><tr><td><code>x</code> (RF sources)</td><td>x-coordinate of the RF source, assumed to be in longitude degrees. Whether FLOAT or DOUBLE, <code>x</code> and <code>y</code> must be the same type.</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code></td><td></td></tr><tr><td><code>y</code> (RF sources)</td><td>y-coordinate of the RF source, assumed to be in latitude degrees. Whether FLOAT or DOUBLE, <code>x</code> and <code>y</code> must be the same type.</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code></td><td></td></tr><tr><td><code>z_meters</code></td><td>z-coordinate of the RF source, in meters. If <code>rf_source_is_relative_to_terrain</code> is set to <code>true</code>, meters are relative to the terrain height; for example, an input of <code>20</code> is 20 meters above ground level. Otherwise, it is absolute height above sea level; <code>20</code> is 20 meters above mean sea level (AMSL).</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code></td><td></td></tr><tr><td><code>rf_source_z_is_relative_to_terrain</code></td><td><code>true</code> specifies that <code>z_meters</code> values are the height in meters above ground level. <code>false</code> indicates the values are height in meters above sea level.</td><td><code>BOOLEAN</code></td><td></td></tr><tr><td><code>rf_source_signal_strength_dbm</code></td><td>Signal strength in dBm for all RF sources.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td><code>rf_source_signal_frequency_mhz</code></td><td>Frequency in MHZ of the RF sources.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td>Terrain elevations</td><td>Consists of <code>x</code> (terrain elevations), <code>y</code> (terrain elevations), and <code>elevation_amsl_meters</code>.</td><td><code>CURSOR</code></td><td></td></tr><tr><td><code>x</code> (terrain elevations)</td><td>x-coordinate of the terrain/building height, assumed to be in longitude degrees. Whether FLOAT or DOUBLE, <code>x</code> and <code>y</code> must be the same type.</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code></td><td></td></tr><tr><td><code>y</code> (terrain elevations)</td><td>y-coordinate of the terrain/building height, assumed to be in latitude degrees. Whether FLOAT or DOUBLE, <code>x</code> and <code>y</code> must be the same type.</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code></td><td></td></tr><tr><td><code>elevation_amsl_meters</code></td><td>Elevation of the point, in meters above sea level.</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code></td><td></td></tr><tr><td><code>geographic_coords</code></td><td>true specifies that the input <code>x</code> and <code>y</code> arguments for RF sources and terrain elevations are in lon/lat degrees. <code>false</code> specifies that the data is already in a local meter coordinate system.</td><td><code>BOOLEAN</code></td><td></td></tr><tr><td><code>bin_dim_meters</code></td><td>Width and height of each binned terrain cell, which is the unit of granularity over which the RF propagation algorithm is executed.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td><code>max_ray_travel_meters</code></td><td>Maximum meters for which to model RF propagation from any given source. Lower values can increase performance, but potentially misses the strongest repeater for a terrain cell that is further away than the value set.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td><code>num_rays_per_source</code></td><td>Number of 2.5D rays to propagate from each source. Higher numbers potentially provide more accurate results but can decrease performance.</td><td><code>BIGINT</code></td><td></td></tr><tr><td><code>min_receiver_signal_strength_dbm</code></td><td>The minimum signal strength threshold in dBm to continue propagating a signal ray from a source. Rays stop being propagated when either the distance from the source exceeds the limit set by <code>max_ray_travel_meters</code>, or the signal strength (as measured by free-space power loss, assuming no obstructions in the path) drops below the value set by <code>min_receiver_signal_strength_dbm</code>.</td><td><code>DOUBLE</code></td><td></td></tr></tbody></table>

**Outputs**

A table of grid cells of width and height `bin_dim_meters` along with the maximum signal strength from any one repeater at that cell, and the ID of the repeater with the strongest signal.

| Parameter                 | Details                                                                                           |                                                                         |
| ------------------------- | ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| `x`                       | x-centroid of the output bin, in lon/lat degrees.                                                 | `Column<FLOAT` \| `DOUBLE>` (same type as RF sources input)             |
| `y`                       | y-centroid of the output bin, in lon/lat degrees.                                                 | `Column<FLOAT` \| `DOUBLE>`(same type as RF sources input)              |
| `elevation_amsl_meters`   | Maximum elevation of all input terrain data falling in the output bin, in meters above sea level. | `Column<FLOAT` \| `DOUBLE>` (same type as terrain elevations input)     |
| `rf_source_id`            | ID of the repeater with the strongest signal for the grid cell.                                   | `Column<FLOAT` \| `DOUBLE>`(same type as RF sources ID input)           |
| `max_signal_strength_dbm` | The maximum signal strength in dBm for a given terrain bin.                                       | `Column<FLOAT` \| `DOUBLE>` (same type as RF sources coordinates input) |
| {% endtab %}              |                                                                                                   |                                                                         |

{% tab title="Long Version" %}
**Input Arguments**

<table><thead><tr><th width="238.2608541331851">Parameter</th><th>Details</th><th></th><th data-hidden>Description</th></tr></thead><tbody><tr><td>RF sources</td><td>Consists of <code>rf_source_id</code>, <code>x</code> (RF sources), <code>y</code> (RF sources), and <code>z_meters</code>.</td><td><code>CURSOR</code></td><td></td></tr><tr><td><code>rf_source_id</code></td><td>ID of the RF source. Used in the output for each grid cell to denote the RF source contributing the strongest signal.</td><td><code>INT</code> | <code>BIGINT</code> | <code>TEXT ENCODING DICT</code></td><td></td></tr><tr><td><code>x</code> (RF sources)</td><td>x-coordinate of the RF source. If <code>geographic_coords</code> is set to <code>true</code>, assumed to be longitude degrees; otherwise, an arbitrary meters-coordinate system. Whether FLOAT or DOUBLE, <code>x</code> and <code>y</code> must be the same type.</td><td><code>FLOAT</code> | <code>DOUBLE</code></td><td></td></tr><tr><td><code>y</code> (RF sources)</td><td>y-coordinate of the RF source. If <code>geographic_coords</code> is set to <code>true</code>, assumed to be latitude degrees; otherwise, an arbitrary meters-coordinate system. Whether FLOAT or DOUBLE, <code>x</code> and <code>y</code> must be the same type.</td><td><code>FLOAT</code> | <code>DOUBLE</code></td><td></td></tr><tr><td><code>z_meters</code></td><td>z-coordinate of the RF source, in meters. If <code>rf_source_is_relative_to_terrain</code> is set to <code>true</code>, meters are relative to the terrain height; for example, an input of <code>20</code> is 20 meters above ground level. Otherwise, it is absolute height above sea level; <code>20</code> is 20 meters above mean sea level (AMSL).</td><td><code>FLOAT</code> | <code>DOUBLE</code></td><td></td></tr><tr><td><code>rf_source_z_is_relative_to_terrain</code></td><td><code>true</code> specifies that <code>z_meters</code> values are the height in meters above ground level. <code>false</code> indicates the values are height in meters above sea level.</td><td><code>BOOLEAN</code></td><td></td></tr><tr><td><code>rf_source_signal_strength_dbm</code></td><td>Signal strength in dBm for all RF sources.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td><code>rf_source_signal_frequency_mhz</code></td><td>Frequency in MHZ of the RF sources.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td>Terrain elevations</td><td>Consists of <code>x</code> (terrain elevations), <code>y</code> (terrain elevations), and <code>elevation_amsl_meters</code>.</td><td><code>CURSOR</code></td><td></td></tr><tr><td><code>x</code> (terrain elevations)</td><td>x-coordinate of the terrain/building height. If <code>geographic_coords</code> is set to <code>true</code>, assumed to be longitude degrees; otherwise, an arbitrary meters-coordinate system. Whether FLOAT or DOUBLE, <code>x</code> and <code>y</code> must be the same type.</td><td><code>FLOAT</code> | <code>DOUBLE</code></td><td></td></tr><tr><td><code>y</code> (terrain elevations)</td><td>y-coordinate of the terrain/building height. If <code>geographic_coords</code> is set to <code>true</code>, assumed to be latitude degrees; otherwise, an arbitrary meters-coordinate system. Whether FLOAT or DOUBLE, <code>x</code> and <code>y</code> must be the same type.</td><td><code>FLOAT</code> | <code>DOUBLE</code></td><td></td></tr><tr><td><code>elevation_amsl_meters</code></td><td>Elevation of the point, in meters above sea level.</td><td><code>FLOAT</code> | <code>DOUBLE</code></td><td></td></tr><tr><td><code>geographic_coords</code></td><td>true specifies that the input <code>x</code> and <code>y</code> arguments for RF sources and terrain elevations are in lon/lat degrees. <code>false</code> specifies that the data is already in a local meter coordinate system.</td><td><code>BOOLEAN</code></td><td></td></tr><tr><td><code>bin_dim_meters</code></td><td>Width and height of each binned terrain cell, which is the unit of granularity over which the RF propagation algorithm is executed.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td><code>max_ray_travel_meters</code></td><td>Maximum meters for which to model RF propagation from any given source. Lower values can increase performance, but potentially misses the strongest repeater for a terrain cell that is further away than the value set.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td><code>num_rays_per_source</code></td><td>Number of 2.5D rays to propagate from each source. Higher numbers potentially provide more accurate results but can decrease performance.</td><td><code>BIGINT</code></td><td></td></tr><tr><td><code>min_receiver_signal_strength_dbm</code></td><td>The minimum signal strength threshold in dBm to continue propagating a signal ray from a source. Rays stop being propagated when either the distance from the source exceeds the limit set by <code>max_ray_travel_meters</code>, or the signal strength (as measured by free-space power loss, assuming no obstructions in the path) drops below the value set by <code>min_receiver_signal_strength_dbm</code>.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td><code>default_source_height_agl_meters</code></td><td>The default height in meters above ground level for a source if there is no input data in the <code>terrain_elevations</code> for the terrain bin in which a given <code>rf_source</code> lies.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td><code>ray_step_bin_multiple</code></td><td>The step used in number of bins (can be fractional) for the RF propagation simulation. Lower values of this (below 1.0) can increase accuracy of the simulation, but decrease performance. Values above 1.0 are not recommended because they can cause gaps in the output.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td><code>loop_grain_size</code></td><td>The size in number of rays at which to parallelize over; threads will process rays in groups of at least this size. The default value is 40; performance may improve by changing this number, depending on hardware setup.</td><td><code>BIGINT</code></td><td></td></tr></tbody></table>

**Output Columns**

A table of grid cells of width and height `bin_dim_meters` along with the maximum signal strength from any one repeater at that cell, and the ID of the repeater with the strongest signal.

<table><thead><tr><th width="245.23657074384408">Parameter</th><th width="40">Type</th><th>Details</th><th></th></tr></thead><tbody><tr><td><code>x</code></td><td></td><td>x-centroid of the output bin, in lon/lat degrees.</td><td><code>FLOAT</code> | <code>DOUBLE</code> (same type as RF sources input)</td></tr><tr><td><code>y</code></td><td></td><td>y-centroid of the output bin, in lon/lat degrees.</td><td><code>FLOAT</code> | <code>DOUBLE</code>(same type as RF sources input)</td></tr><tr><td><code>elevation_amsl_meters</code></td><td></td><td>Maximum elevation of all input terrain data falling in the output bin, in meters above sea level.</td><td><code>FLOAT</code> | <code>DOUBLE</code> (same type as terrain elevations input)</td></tr><tr><td><code>rf_source_id</code></td><td></td><td>ID of the repeater with the strongest signal for the grid cell.</td><td><code>FLOAT</code> | <code>DOUBLE</code>(same type as RF sources ID input)</td></tr><tr><td><code>max_signal_strength_dbm</code></td><td></td><td>The maximum signal strength in dBm for a given terrain bin.</td><td><code>FLOAT</code> | <code>DOUBLE</code> (same type as RF sources coordinates input)</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

## tf\_rf\_prop

Used for generating top-k signals where 'k' represents the maximum number of antennas to consider at each geographic location. The full relevant parameter name is strongest\_k\_sources\_per\_terrain\_bin. For example, if k is set to 3, the function will return up to three overlapping antenna signals based on their strength. In that case, if only 2 signals are present, they will be returned. and if 5 signals are actually present, only the strongest 3 will be recorded.

This version of the RF function can be used in optimizing antenna placements use cases or to minimize interference. For example, you might simulate repeater antenna placements on every lampost across an area, but then only plan to keep the top-performing ones. By allowing overlaps in the initial simulation, you avoid introducing coverage gaps when dropping out antennas, while also avoiding the requirement of multiple simulations.

```
SELECT * FROM TABLE(
   tf_rf_prop(
      data => CURSOR(
         SELECT 
            rf_source_id, x, y, repeater_height_meters
      ),
      rf_source_z_is_relative_to_terrain, 
      rf_source_signal_strength_dbm, 
      rf_source_signal_frequency_mhz   
      data => CURSOR(
         SELECT 
            x, y, elevation_amsl_meters
      ),
      bin_dim_meters, 
      strongest_k_sources_per_terrain_bin
      max_ray_travel_meters, 
      num_rays_per_source, 
      min_receiver_signal_strength_dbm
      default_source_height_agl_meters
      ray_step_bin_multiple
      loop_grain_size
   )
)
```

{% tabs %}
{% tab title="Short Version" %}
**Input Arguments**

<table><thead><tr><th width="195.62699736619305">Parameter</th><th width="228">Details</th><th>Data Type</th><th data-hidden>Description</th></tr></thead><tbody><tr><td><code>rf_sources</code></td><td>Consists of <code>rf_source_id</code>, <code>x</code> (RF sources), <code>y</code> (RF sources), and <code>z_meters</code>.</td><td><code>CURSOR</code></td><td></td></tr><tr><td><code>rf_source_id</code></td><td>ID of the RF source. Used in the output for each grid cell to denote the RF source contributing the strongest signal.</td><td><code>Column&#x3C;INT</code> | <code>BIGINT</code> | <code>TEXT ENCODING DICT</code></td><td></td></tr><tr><td><code>x</code> (RF sources)</td><td>x-coordinate of the RF source, assumed to be in longitude degrees. Whether FLOAT or DOUBLE, <code>x</code> and <code>y</code> must be the same type.</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code></td><td></td></tr><tr><td><code>y</code> (RF sources)</td><td>y-coordinate of the RF source, assumed to be in latitude degrees. Whether FLOAT or DOUBLE, <code>x</code> and <code>y</code> must be the same type.</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code></td><td></td></tr><tr><td><code>repeater_height_meters</code></td><td>.</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code></td><td></td></tr><tr><td><code>rf_source_z_is_relative_to_terrain</code></td><td><code>true</code> specifies that <code>z_meters</code> values are the height in meters above ground level. <code>false</code> indicates the values are height in meters above sea level.</td><td><code>BOOLEAN</code></td><td></td></tr><tr><td><code>rf_source_signal_strength_dbm</code></td><td>Signal strength in dBm for all RF sources.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td><code>rf_source_signal_frequency_mhz</code></td><td>Frequency in MHZ of the RF sources.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td>Terrain elevations</td><td>Consists of <code>x</code> (terrain elevations), <code>y</code> (terrain elevations), and <code>elevation_amsl_meters</code>.</td><td><code>CURSOR</code></td><td></td></tr><tr><td><code>x</code> (terrain elevations)</td><td>x-coordinate of the terrain/building height, assumed to be in longitude degrees. Whether FLOAT or DOUBLE, <code>x</code> and <code>y</code> must be the same type.</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code></td><td></td></tr><tr><td><code>y</code> (terrain elevations)</td><td>y-coordinate of the terrain/building height, assumed to be in latitude degrees. Whether FLOAT or DOUBLE, <code>x</code> and <code>y</code> must be the same type.</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code></td><td></td></tr><tr><td><code>elevation_amsl_meters</code></td><td>Elevation of the point, in meters above sea level.</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code></td><td></td></tr><tr><td><code>bin_dim_meters</code></td><td>Width and height of each binned terrain cell, which is the unit of granularity over which the RF propagation algorithm is executed.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td><code>num_top_sources_per_terrain_bin</code></td><td>Number of best sources ranked by signal strength for a terrain bin to be outputted in the results.</td><td>BIGINT</td><td></td></tr><tr><td><code>max_ray_travel_meters</code></td><td>Maximum meters for which to model RF propagation from any given source. Lower values can increase performance, buy potentially misses the strongest repeater for a terrain cell that is further away than the value set.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td><code>num_rays_per_source</code></td><td>Number of 2.5D rays to propagate from each source. Higher numbers potentially provide more accurate results but can decrease performance.</td><td><code>BIGINT</code></td><td></td></tr><tr><td><code>min_receiver_signal_strength_dbm</code></td><td>The minimum signal strength threshold in dBm to continue propagating a signal ray from a source. Rays stop being propagated when either the distance from the source exceeds the limit set by <code>max_ray_travel_meters</code>, or the signal strength (as measured by free-space power loss, assuming no obstructions in the path) drops below the value set by <code>min_receiver_signal_strength_dbm</code>.</td><td><code>DOUBLE</code></td><td></td></tr></tbody></table>

**Outputs**

A table of grid cells of width and height `bin_dim_meters` along with the maximum signal strength from any one repeater at that cell, and the ID of the repeater with the strongest signal.

<table><thead><tr><th width="248.33333333333331">Parameter</th><th>Details</th><th></th></tr></thead><tbody><tr><td><code>terrain_bin_id</code></td><td></td><td></td></tr><tr><td><code>x</code></td><td>x-centroid of the output bin, in lon/lat degrees.</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code> (same type as RF sources input)</td></tr><tr><td><code>y</code></td><td>y-centroid of the output bin, in lon/lat degrees.</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code>(same type as RF sources input)</td></tr><tr><td><code>elevation_amsl_meters</code></td><td>Maximum elevation of all input terrain data falling in the output bin, in meters above sea level.</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code> (same type as terrain elevations input)</td></tr><tr><td><code>rf_source_id</code></td><td>ID of the repeater with the strongest signal for the grid cell.</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code>(same type as RF sources ID input)</td></tr><tr><td><code>rf_signal_strength_dbm</code></td><td>The signal strength in dBm for a given terrain bin.</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code> (same type as RF sources coordinates input)</td></tr><tr><td><code>rf_signal_z_angle_degrees</code></td><td>The angle in degrees of the output bin with respect to the top-k signal source <code>rf_source_id</code>.</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code> (same type as RF sources coordinates input)</td></tr><tr><td><code>rf_source_distance_meters</code></td><td>The distance of the top-k signal source <code>rf_source_id</code> from the output bin, in meters.</td><td><code>Column&#x3C;FLOAT</code> | <code>DOUBLE></code> (same type as RF sources coordinates input)</td></tr></tbody></table>
{% endtab %}

{% tab title="Long  Version" %}
**Input Arguments**

<table><thead><tr><th width="251.21182120079064">Parameter</th><th>Details</th><th>Data Type</th><th data-hidden>Description</th></tr></thead><tbody><tr><td>RF sources</td><td>Consists of <code>rf_source_id</code>, <code>x</code> (RF sources), <code>y</code> (RF sources), and <code>z_meters</code>.</td><td><code>CURSOR</code></td><td></td></tr><tr><td><code>rf_source_id</code></td><td>ID of the RF source. Used in the output for each grid cell to denote the RF source contributing the strongest signal.</td><td><code>INT</code> | <code>BIGINT</code> | <code>TEXT ENCODING DICT</code></td><td></td></tr><tr><td><code>x</code> (RF sources)</td><td>x-coordinate of the RF source. If <code>geographic_coords</code> is set to <code>true</code>, assumed to be longitude degrees; otherwise, an arbitrary meters-coordinate system. Whether FLOAT or DOUBLE, <code>x</code> and <code>y</code> must be the same type.</td><td><code>FLOAT</code> | <code>DOUBLE</code></td><td></td></tr><tr><td><code>y</code> (RF sources)</td><td>y-coordinate of the RF source. If <code>geographic_coords</code> is set to <code>true</code>, assumed to be latitude degrees; otherwise, an arbitrary meters-coordinate system. Whether FLOAT or DOUBLE, <code>x</code> and <code>y</code> must be the same type.</td><td><code>FLOAT</code> | <code>DOUBLE</code></td><td></td></tr><tr><td><code>repeater_height_meters</code></td><td></td><td><code>FLOAT</code> | <code>DOUBLE</code></td><td></td></tr><tr><td><code>rf_source_z_is_relative_to_terrain</code></td><td><code>true</code> specifies that <code>z_meters</code> values are the height in meters above ground level. <code>false</code> indicates the values are height in meters above sea level.</td><td><code>BOOLEAN</code></td><td></td></tr><tr><td><code>rf_source_signal_strength_dbm</code></td><td>Signal strength in dBm for all RF sources.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td><code>rf_source_signal_frequency_mhz</code></td><td>Frequency in MHZ of the RF sources.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td>Terrain elevations</td><td>Consists of <code>x</code> (terrain elevations), <code>y</code> (terrain elevations), and <code>elevation_amsl_meters</code>.</td><td><code>CURSOR</code></td><td></td></tr><tr><td><code>x</code> (terrain elevations)</td><td>x-coordinate of the terrain/building height. If <code>geographic_coords</code> is set to <code>true</code>, assumed to be longitude degrees; otherwise, an arbitrary meters-coordinate system. Whether FLOAT or DOUBLE, <code>x</code> and <code>y</code> must be the same type.</td><td><code>FLOAT</code> | <code>DOUBLE</code></td><td></td></tr><tr><td><code>y</code> (terrain elevations)</td><td>y-coordinate of the terrain/building height. If <code>geographic_coords</code> is set to <code>true</code>, assumed to be latitude degrees; otherwise, an arbitrary meters-coordinate system. Whether FLOAT or DOUBLE, <code>x</code> and <code>y</code> must be the same type.</td><td><code>FLOAT</code> | <code>DOUBLE</code></td><td></td></tr><tr><td><code>elevation_amsl_meters</code></td><td>Elevation of the point, in meters above sea level.</td><td><code>FLOAT</code> | <code>DOUBLE</code></td><td></td></tr><tr><td><code>bin_dim_meters</code></td><td>Width and height of each binned terrain cell, which is the unit of granularity over which the RF propagation algorithm is executed.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td><code>strongest_k_sources_per_terrain_bin</code></td><td></td><td></td><td></td></tr><tr><td><code>max_ray_travel_meters</code></td><td>Maximum meters for which to model RF propagation from any given source. Lower values can increase performance, but potentially misses the strongest repeater for a terrain cell that is further away than the value set.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td><code>num_rays_per_source</code></td><td>Number of 2.5D rays to propagate from each source. Higher numbers potentially provide more accurate results but can decrease performance.</td><td><code>BIGINT</code></td><td></td></tr><tr><td><code>min_receiver_signal_strength_dbm</code></td><td>The minimum signal strength threshold in dBm to continue propagating a signal ray from a source. Rays stop being propagated when either the distance from the source exceeds the limit set by <code>max_ray_travel_meters</code>, or the signal strength (as measured by free-space power loss, assuming no obstructions in the path) drops below the value set by <code>min_receiver_signal_strength_dbm</code>.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td><code>default_source_height_agl_meters</code></td><td>The default height in meters above ground level for a source if there is no input data in the <code>terrain_elevations</code> for the terrain bin in which a given <code>rf_source</code> lies.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td><code>ray_step_bin_multiple</code></td><td>The step used in number of bins (can be fractional) for the RF propagation simulation. Lower values of this (below 1.0) can increase accuracy of the simulation, but decrease performance. Values above 1.0 are not recommended because they can cause gaps in the output.</td><td><code>DOUBLE</code></td><td></td></tr><tr><td><code>loop_grain_size</code></td><td>The size in number of rays at which to parallelize over; threads will process rays in groups of at least this size. The default value is 40; performance may improve by changing this number, depending on hardware setup.</td><td><code>BIGINT</code></td><td></td></tr></tbody></table>

**Outputs**

A table of grid cells of width and height `bin_dim_meters` along with the maximum signal strength from any one repeater at that cell, and the ID of the repeater with the strongest signal.

| Parameter                   | Details                                                                                           | Data Type                                                       |
| --------------------------- | ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| `terrain_bin_id`            |                                                                                                   |                                                                 |
| `x`                         | x-centroid of the output bin, in lon/lat degrees.                                                 | `FLOAT` \| `DOUBLE` (same type as RF sources input)             |
| `y`                         | y-centroid of the output bin, in lon/lat degrees.                                                 | `FLOAT` \| `DOUBLE`(same type as RF sources input)              |
| `elevation_amsl_meters`     | Maximum elevation of all input terrain data falling in the output bin, in meters above sea level. | `FLOAT` \| `DOUBLE` (same type as terrain elevations input)     |
| `rf_source_id`              | ID of the repeater with the strongest signal for the grid cell.                                   | `FLOAT` \| `DOUBLE`(same type as RF sources ID input)           |
| `rf_signal_strength_dbm`    | The signal strength in dBm for a given terrain bin.                                               | `FLOAT` \| `DOUBLE` (same type as RF sources coordinates input) |
| `rf_signal_z_angle_degrees` |                                                                                                   |                                                                 |
| `rf_source_distance_meters` |                                                                                                   |                                                                 |
| {% endtab %}                |                                                                                                   |                                                                 |
| {% endtabs %}               |                                                                                                   |                                                                 |
