# GeoPoint-to-GeoPoint 3d distance inner join > Supported in: Batch Inner joins left and right datasets together based on the distance between point geometries. The geometries must represent points, and may optionally include a z-coordinate. Internally converts geometries into the given projected coordinate reference system prior to the join and back to WGS84. Non-point geometries are ignored, and the entire right dataset must be able to fit into driver and executor memory. A 3 gb executor should be able to handle up to 4 million points in the neighbors dataset. **Transform categories**: Geospatial, Join ## Declared arguments * **Condition for columns to select on the left:** All columns in the left input schema will be tested to see if they match this condition. If they match, the column will be selected in the output.
*ColumnPredicate* * **Condition for columns to select on the right:** All columns in the right input schema will be tested to see if they match this condition. If they match, the column will be selected in the output.
*ColumnPredicate* * **Distance:** The distance within which to join geometries, in the same units as the coordinate reference system.
*Literal\* * **Join key:** The geojson columns from the left and right inputs on which to join.
*Tuple\, Column\>* * **Left dataset:** Left dataset to use in join.
*Table* * **Projected coordinate system:** Input geometries will be converted to this coordinate system prior to the join, and distance will be measured in the units of the given coordinate system. Formatted as "authority:id", so for example UTM zone 18N could be identified by EPSG:32618.
*Literal\* * **Right dataset:** Right dataset to use in join.
*Table* * **Use z-coordinate:** Whether to include z-coordinates and calculate the 3 dimensional distance. If false, z-coordinates are ignored and 2 dimensional distances are calculated.
*Literal\* * *optional* **Prefix for columns from right:** Prefix to add to all columns on the right hand side.
*Literal\* ## Examples ### Example 1: Base case **Argument values:** * **Condition for columns to select on the left:**
columnNameIsIn(
 columnNames: \[geometryColLhs, lhs-1],
) * **Condition for columns to select on the right:**
columnNameIsIn(
 columnNames: \[geometryCol, arrayCol],
) * **Distance:** 2.5 * **Join key:** (`geometryColLhs`, `geometryCol`) * **Left dataset:** ri.foundry.main.dataset.left * **Projected coordinate system:** EPSG:4326 * **Right dataset:** ri.foundry.main.dataset.right * **Use z-coordinate:** false * **Prefix for columns from right:** rhs\_ **Inputs:** ri.foundry.main.dataset.left | geometryColLhs | lhs-1 | | ----- | ----- | | {"coordinates": \[0.0, 0.0, 0.0], "type":"Point"} | 42.0 | | {"coordinates": \[0.0, 0.0, 5.0], "type":"Point"} | 43.0 | | {"coordinates": \[0.0, 0.0], "type":"Point"} | 44.0 | ri.foundry.main.dataset.right | geometryCol | col1 | arrayCol | | ----- | ----- | ----- | | {"coordinates": \[0.0, 0.0, 2.0], "type":"Point"} | rhsVal1 | \[ 0.0, 1.0 ] | | {"coordinates": \[0.0, 1.0], "type":"Point"} | rhsVal2 | \[ 0.0, 1.0 ] | **Output:** | geometryColLhs | lhs-1 | rhs\_geometryCol | rhs\_arrayCol | | ----- | ----- | ----- | ----- | | {"coordinates": \[0.0, 0.0, 0.0], "type":"Point"} | 42.0 | {"coordinates": \[0.0, 0.0, 2.0], "type":"Point"} | \[ 0.0, 1.0 ] | | {"coordinates": \[0.0, 0.0, 0.0], "type":"Point"} | 42.0 | {"coordinates": \[0.0, 1.0], "type":"Point"} | \[ 0.0, 1.0 ] | | {"coordinates": \[0.0, 0.0, 5.0], "type":"Point"} | 43.0 | {"coordinates": \[0.0, 0.0, 2.0], "type":"Point"} | \[ 0.0, 1.0 ] | | {"coordinates": \[0.0, 0.0, 5.0], "type":"Point"} | 43.0 | {"coordinates": \[0.0, 1.0], "type":"Point"} | \[ 0.0, 1.0 ] | | {"coordinates": \[0.0, 0.0], "type":"Point"} | 44.0 | {"coordinates": \[0.0, 0.0, 2.0], "type":"Point"} | \[ 0.0, 1.0 ] | | {"coordinates": \[0.0, 0.0], "type":"Point"} | 44.0 | {"coordinates": \[0.0, 1.0], "type":"Point"} | \[ 0.0, 1.0 ] | *** ### Example 2: Base case **Argument values:** * **Condition for columns to select on the left:**
columnNameIsIn(
 columnNames: \[geometryColLhs, lhs-1],
) * **Condition for columns to select on the right:**
columnNameIsIn(
 columnNames: \[geometryCol, arrayCol],
) * **Distance:** 2.5 * **Join key:** (`geometryColLhs`, `geometryCol`) * **Left dataset:** ri.foundry.main.dataset.left * **Projected coordinate system:** EPSG:4326 * **Right dataset:** ri.foundry.main.dataset.right * **Use z-coordinate:** true * **Prefix for columns from right:** rhs\_ **Inputs:** ri.foundry.main.dataset.left | geometryColLhs | lhs-1 | | ----- | ----- | | {"coordinates": \[0.0, 0.0, 0.0], "type":"Point"} | 42.0 | | {"coordinates": \[0.0, 0.0, 5.0], "type":"Point"} | 43.0 | | {"coordinates": \[0.0, 5.0], "type":"Point"} | 44.0 | ri.foundry.main.dataset.right | geometryCol | col1 | arrayCol | | ----- | ----- | ----- | | {"coordinates": \[0.0, 0.0, 2.0], "type":"Point"} | rhsVal1 | \[ 0.0, 1.0 ] | | {"coordinates": \[1.0, 1.0, 6.0], "type":"Point"} | rhsVal2 | \[ 0.0, 1.0 ] | | {"coordinates": \[0.0, 0.0, 3.0], "type":"Point"} | rhsVal3 | \[ 0.0, 1.0 ] | | {"coordinates": \[0.0, 0.0], "type":"Point"} | rhsVal4 | \[ 0.0, 1.0 ] | **Output:** | geometryColLhs | lhs-1 | rhs\_geometryCol | rhs\_arrayCol | | ----- | ----- | ----- | ----- | | {"coordinates": \[0.0, 0.0, 0.0], "type":"Point"} | 42.0 | {"coordinates": \[0.0, 0.0, 2.0], "type":"Point"} | \[ 0.0, 1.0 ] | | {"coordinates": \[0.0, 0.0, 5.0], "type":"Point"} | 43.0 | {"coordinates": \[0.0, 0.0, 3.0], "type":"Point"} | \[ 0.0, 1.0 ] | | {"coordinates": \[0.0, 0.0, 5.0], "type":"Point"} | 43.0 | {"coordinates": \[1.0, 1.0, 6.0], "type":"Point"} | \[ 0.0, 1.0 ] | *** ### Example 3: Base case **Argument values:** * **Condition for columns to select on the left:**
columnNameIsIn(
 columnNames: \[geometryColLhs, lhs-1],
) * **Condition for columns to select on the right:**
columnNameIsIn(
 columnNames: \[geometryColRhs, rhs-1],
) * **Distance:** 1641 * **Join key:** (`geometryColLhs`, `geometryColRhs`) * **Left dataset:** ri.foundry.main.dataset.left * **Projected coordinate system:** epsg:2868 * **Right dataset:** ri.foundry.main.dataset.right * **Use z-coordinate:** false * **Prefix for columns from right:** *null* **Inputs:** ri.foundry.main.dataset.left | geometryColLhs | lhs-1 | | ----- | ----- | | {"coordinates": \[-112.14843750000001,33.440609443703586], "type":"Point"} | 42.0 | | *null* | 43.0 | ri.foundry.main.dataset.right | geometryColRhs | rhs-1 | | ----- | ----- | | {"coordinates": \[-112.14560508728029,33.44082430962016], "type":"Point"} | rhsVal1 | | {"coordinates": \[-112.11796760559083,33.440895931474124], "type":"Point"} | rhsVal2 | **Output:** | geometryColLhs | lhs-1 | geometryColRhs | rhs-1 | | ----- | ----- | ----- | ----- | | {"coordinates": \[-112.14843750000001,33.440609443703586], "type":"Point"} | 42.0 | {"coordinates": \[-112.14560508728029,33.44082430962016], "type":"Point"} | rhsVal1 | *** ### Example 4: Base case **Argument values:** * **Condition for columns to select on the left:**
columnNameIsIn(
 columnNames: \[geometryColLhs, lhs-1],
) * **Condition for columns to select on the right:**
columnNameIsIn(
 columnNames: \[],
) * **Distance:** 10.0 * **Join key:** (`geometryColLhs`, `geometryCol`) * **Left dataset:** ri.foundry.main.dataset.left * **Projected coordinate system:** EPSG:4326 * **Right dataset:** ri.foundry.main.dataset.right * **Use z-coordinate:** false * **Prefix for columns from right:** rhs\_ **Inputs:** ri.foundry.main.dataset.left | geometryColLhs | lhs-1 | | ----- | ----- | | {"coordinates": \[15.0, 5.0], "type":"Point"} | 42.0 | | {"coordinates": \[55.0, 5.0], "type":"Point"} | 43.0 | ri.foundry.main.dataset.right | geometryCol | col1 | arrayCol | | ----- | ----- | ----- | | {"coordinates": \[15.0, 5.0], "type":"Point"} | rhsVal1 | \[ 0.0, 1.0 ] | **Output:** | geometryColLhs | lhs-1 | | ----- | ----- | | {"coordinates": \[15.0, 5.0], "type":"Point"} | 42.0 | *** ### Example 5: Base case **Argument values:** * **Condition for columns to select on the left:**
columnNameIsIn(
 columnNames: \[],
) * **Condition for columns to select on the right:**
columnNameIsIn(
 columnNames: \[geometryCol, arrayCol],
) * **Distance:** 10.0 * **Join key:** (`geometryColLhs`, `geometryCol`) * **Left dataset:** ri.foundry.main.dataset.left * **Projected coordinate system:** EPSG:4326 * **Right dataset:** ri.foundry.main.dataset.right * **Use z-coordinate:** false * **Prefix for columns from right:** rhs\_ **Inputs:** ri.foundry.main.dataset.left | geometryColLhs | lhs-1 | | ----- | ----- | | {"coordinates": \[15.0, 5.0], "type":"Point"} | 42.0 | | {"coordinates": \[55.0, 5.0], "type":"Point"} | 43.0 | ri.foundry.main.dataset.right | geometryCol | col1 | arrayCol | | ----- | ----- | ----- | | {"coordinates": \[55.0, 5.0], "type":"Point"} | rhsVal1 | \[ 0.0, 1.0 ] | **Output:** | rhs\_geometryCol | rhs\_arrayCol | | ----- | ----- | | {"coordinates": \[55.0, 5.0], "type":"Point"} | \[ 0.0, 1.0 ] | *** ### Example 6: Null case **Argument values:** * **Condition for columns to select on the left:**
columnNameIsIn(
 columnNames: \[geometryColLhs, lhs-1],
) * **Condition for columns to select on the right:**
columnNameIsIn(
 columnNames: \[geometryCol, col1, arrayCol],
) * **Distance:** 10.0 * **Join key:** (`geometryColLhs`, `geometryCol`) * **Left dataset:** ri.foundry.main.dataset.left * **Projected coordinate system:** EPSG:4326 * **Right dataset:** ri.foundry.main.dataset.right * **Use z-coordinate:** false * **Prefix for columns from right:** rhs\_ **Inputs:** ri.foundry.main.dataset.left | geometryColLhs | lhs-1 | | ----- | ----- | | {"coordinates": \[15.0, 5.0], "type":"Point"} | 42.0 | | {"coordinates": \[55.0, 5.0], "type":"Point"} | 43.0 | | {"coordinates": \[\[\[20.0, 10.0], \[27.0, 10.0], \[27.0, 17.0], \[20.0, 17.0], \[20.0, 10.0]]], "type": "Polygon"} | 44.0 | | *null* | 45.0 | ri.foundry.main.dataset.right | geometryCol | col1 | arrayCol | | ----- | ----- | ----- | | {"coordinates": \[15.0, 5.0], "type":"Point"} | rhsVal1 | \[ 0.0, 1.0 ] | | {"coordinates": \[\[\[21.0, 21.0], \[27.0, 21.0], \[27.0, 27.0], \[21.0, 27.0], \[21.0, 21.0]]], "type": "Polygon"} | rhsVal2 | \[ 0.0, 1.0 ] | | {"coordinates": \[\[\[20.0, 10.0], \[27.0, 10.0], \[27.0, 17.0], \[20.0, 17.0], \[20.0, 10.0]]], "type": "Polygon"} | rhsVal3 | \[ 0.0, 1.0 ] | | *null* | rhsVal4 | \[ 0.0, 1.0 ] | **Output:** | geometryColLhs | lhs-1 | rhs\_geometryCol | rhs\_col1 | rhs\_arrayCol | | ----- | ----- | ----- | ----- | ----- | | {"coordinates": \[15.0, 5.0], "type":"Point"} | 42.0 | {"coordinates": \[15.0, 5.0], "type":"Point"} | rhsVal1 | \[ 0.0, 1.0 ] | ***