跳转至

Geo distance inner join(地理距离内连接(Geo distance inner join))

Supported in: Batch

Inner joins left and right datasets together based on the distance between input geometries. Internally converts geometries into the given projected coordinate reference system prior to the join and back to WGS84.

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
  • 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: 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
  • Prefix for columns from right: rhs_

Inputs:

ri.foundry.main.dataset.left

geometryColLhs lhs-1
{"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,10.0],[10.0,10.0],[10.0,0.0],[0.0,0.0]]]} 42.0
{"coordinates": [55.0, 5.0], "type":"Point"} 43.0
{"coordinates": [[25.0, 0.0], [0.0, 25.0]], "type":"LineString"} 44.0

ri.foundry.main.dataset.right

geometryCol col1 arrayCol
{"coordinates": [[[20.0, 10.0], [27.0, 10.0], [27.0, 17.0], [20.0, 17.0], [20.0, 10.0]]], "type": "Polygon"} 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 ]

Output:

geometryColLhs lhs-1 rhs_geometryCol rhs_arrayCol
{"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,10.0],[10.0,10.0],[10.0,0.0],[0.0,0.0]]]} 42.0 {"coordinates": [[[20.0, 10.0], [27.0, 10.0], [27.0, 17.0], [20.0, 17.0], [20.0, 10.0]]], "type": "Polygon"} [ 0.0, 1.0 ]
{"coordinates": [[25.0, 0.0], [0.0, 25.0]], "type":"LineString"} 44.0 {"coordinates": [[[20.0, 10.0], [27.0, 10.0], [27.0, 17.0], [20.0, 17.0], [20.0, 10.0]]], "type": "Polygon"} [ 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: [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
  • 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 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
  • 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
  • Prefix for columns from right: rhs_

Inputs:

ri.foundry.main.dataset.left

geometryColLhs lhs-1
{"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,10.0],[10.0,10.0],[10.0,0.0],[0.0,0.0]]]} 42.0
{"coordinates": [55.0, 5.0], "type":"Point"} 43.0

ri.foundry.main.dataset.right

geometryCol col1 arrayCol
{"coordinates": [[[20.0, 10.0], [27.0, 10.0], [27.0, 17.0], [20.0, 17.0], [20.0, 10.0]]], "type": "Polygon"} 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 ]

Output:

geometryColLhs lhs-1
{"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,10.0],[10.0,10.0],[10.0,0.0],[0.0,0.0]]]} 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
  • Prefix for columns from right: rhs_

Inputs:

ri.foundry.main.dataset.left

geometryColLhs lhs-1
{"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,10.0],[10.0,10.0],[10.0,0.0],[0.0,0.0]]]} 42.0
{"coordinates": [55.0, 5.0], "type":"Point"} 43.0

ri.foundry.main.dataset.right

geometryCol col1 arrayCol
{"coordinates": [[[20.0, 10.0], [27.0, 10.0], [27.0, 17.0], [20.0, 17.0], [20.0, 10.0]]], "type": "Polygon"} 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 ]

Output:

rhs_geometryCol rhs_arrayCol
{"coordinates": [[[20.0, 10.0], [27.0, 10.0], [27.0, 17.0], [20.0, 17.0], [20.0, 10.0]]], "type": "Polygon"} [ 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
  • Prefix for columns from right: rhs_

Inputs:

ri.foundry.main.dataset.left

geometryColLhs lhs-1
{"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,10.0],[10.0,10.0],[10.0,0.0],[0.0,0.0]]]} 42.0
{"coordinates": [55.0, 5.0], "type":"Point"} 43.0
null 43.0

ri.foundry.main.dataset.right

geometryCol col1 arrayCol
{"coordinates": [[[20.0, 10.0], [27.0, 10.0], [27.0, 17.0], [20.0, 17.0], [20.0, 10.0]]], "type": "Polygon"} 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 ]
null rhsVal3 [ 0.0, 1.0 ]

Output:

geometryColLhs lhs-1 rhs_geometryCol rhs_col1 rhs_arrayCol
{"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,10.0],[10.0,10.0],[10.0,0.0],[0.0,0.0]]]} 42.0 {"coordinates": [[[20.0, 10.0], [27.0, 10.0], [27.0, 17.0], [20.0, 17.0], [20.0, 10.0]]], "type": "Polygon"} rhsVal1 [ 0.0, 1.0 ]


中文翻译

地理距离内连接(Geo distance inner join)

支持:批处理(Batch)

基于输入几何图形之间的距离,对左右数据集进行内连接(Inner join)。在连接前,内部会将几何图形转换为指定的投影坐标系(projected coordinate reference system),并在连接后转换回 WGS84。

转换类别:地理空间(Geospatial)、连接(Join)

声明参数(Declared arguments)

  • 左侧列选择条件: 左侧输入模式中的所有列都将被测试是否匹配此条件。如果匹配,该列将被选入输出。
    ColumnPredicate
  • 右侧列选择条件: 右侧输入模式中的所有列都将被测试是否匹配此条件。如果匹配,该列将被选入输出。
    ColumnPredicate
  • 距离(Distance): 连接几何图形的距离范围,单位与坐标系相同。
    Literal\
  • 连接键(Join key): 左右输入中用于连接的 geojson 列。
    Tuple\, Column\\>
  • 左侧数据集(Left dataset): 用于连接的左侧数据集。
    Table
  • 投影坐标系(Projected coordinate system): 输入几何图形将在连接前转换为该坐标系,距离将以给定坐标系的单位进行测量。格式为"authority:id",例如 UTM 18N 区可表示为 EPSG:32618。
    Literal\
  • 右侧数据集(Right dataset): 用于连接的右侧数据集。
    Table
  • 可选 右侧列前缀(Prefix for columns from right): 为右侧所有列添加的前缀。
    Literal\

示例

示例 1:基础情况

参数值:

  • 左侧列选择条件:
    columnNameIsIn(
     columnNames: [geometryColLhs, lhs-1],
    )
  • 右侧列选择条件:
    columnNameIsIn(
     columnNames: [geometryCol, arrayCol],
    )
  • 距离: 10.0
  • 连接键: (geometryColLhs, geometryCol)
  • 左侧数据集: ri.foundry.main.dataset.left
  • 投影坐标系: EPSG:4326
  • 右侧数据集: ri.foundry.main.dataset.right
  • 右侧列前缀: rhs_

输入:

ri.foundry.main.dataset.left

geometryColLhs lhs-1
{"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,10.0],[10.0,10.0],[10.0,0.0],[0.0,0.0]]]} 42.0
{"coordinates": [55.0, 5.0], "type":"Point"} 43.0
{"coordinates": [[25.0, 0.0], [0.0, 25.0]], "type":"LineString"} 44.0

ri.foundry.main.dataset.right

geometryCol col1 arrayCol
{"coordinates": [[[20.0, 10.0], [27.0, 10.0], [27.0, 17.0], [20.0, 17.0], [20.0, 10.0]]], "type": "Polygon"} 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 ]

输出:

geometryColLhs lhs-1 rhs_geometryCol rhs_arrayCol
{"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,10.0],[10.0,10.0],[10.0,0.0],[0.0,0.0]]]} 42.0 {"coordinates": [[[20.0, 10.0], [27.0, 10.0], [27.0, 17.0], [20.0, 17.0], [20.0, 10.0]]], "type": "Polygon"} [ 0.0, 1.0 ]
{"coordinates": [[25.0, 0.0], [0.0, 25.0]], "type":"LineString"} 44.0 {"coordinates": [[[20.0, 10.0], [27.0, 10.0], [27.0, 17.0], [20.0, 17.0], [20.0, 10.0]]], "type": "Polygon"} [ 0.0, 1.0 ]

示例 2:基础情况

参数值:

  • 左侧列选择条件:
    columnNameIsIn(
     columnNames: [geometryColLhs, lhs-1],
    )
  • 右侧列选择条件:
    columnNameIsIn(
     columnNames: [geometryColRhs, rhs-1],
    )
  • 距离: 1641
  • 连接键: (geometryColLhs, geometryColRhs)
  • 左侧数据集: ri.foundry.main.dataset.left
  • 投影坐标系: epsg:2868
  • 右侧数据集: ri.foundry.main.dataset.right
  • 右侧列前缀: null

输入:

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

输出:

geometryColLhs lhs-1 geometryColRhs rhs-1
{"coordinates": [-112.14843750000001,33.440609443703586], "type":"Point"} 42.0 {"coordinates": [-112.14560508728029,33.44082430962016], "type":"Point"} rhsVal1

示例 3:基础情况

参数值:

  • 左侧列选择条件:
    columnNameIsIn(
     columnNames: [geometryColLhs, lhs-1],
    )
  • 右侧列选择条件:
    columnNameIsIn(
     columnNames: [geometryColRhs, rhs-1],
    )
  • 距离: 1641
  • 连接键: (geometryColLhs, geometryColRhs)
  • 左侧数据集: ri.foundry.main.dataset.left
  • 投影坐标系: epsg:2868
  • 右侧数据集: ri.foundry.main.dataset.right
  • 右侧列前缀: null

输入:

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

输出:

geometryColLhs lhs-1 geometryColRhs rhs-1
{"coordinates": [-112.14843750000001,33.440609443703586], "type":"Point"} 42.0 {"coordinates": [-112.14560508728029,33.44082430962016], "type":"Point"} rhsVal1

示例 4:基础情况

参数值:

  • 左侧列选择条件:
    columnNameIsIn(
     columnNames: [geometryColLhs, lhs-1],
    )
  • 右侧列选择条件:
    columnNameIsIn(
     columnNames: [],
    )
  • 距离: 10.0
  • 连接键: (geometryColLhs, geometryCol)
  • 左侧数据集: ri.foundry.main.dataset.left
  • 投影坐标系: EPSG:4326
  • 右侧数据集: ri.foundry.main.dataset.right
  • 右侧列前缀: rhs_

输入:

ri.foundry.main.dataset.left

geometryColLhs lhs-1
{"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,10.0],[10.0,10.0],[10.0,0.0],[0.0,0.0]]]} 42.0
{"coordinates": [55.0, 5.0], "type":"Point"} 43.0

ri.foundry.main.dataset.right

geometryCol col1 arrayCol
{"coordinates": [[[20.0, 10.0], [27.0, 10.0], [27.0, 17.0], [20.0, 17.0], [20.0, 10.0]]], "type": "Polygon"} 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 ]

输出:

geometryColLhs lhs-1
{"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,10.0],[10.0,10.0],[10.0,0.0],[0.0,0.0]]]} 42.0

示例 5:基础情况

参数值:

  • 左侧列选择条件:
    columnNameIsIn(
     columnNames: [],
    )
  • 右侧列选择条件:
    columnNameIsIn(
     columnNames: [geometryCol, arrayCol],
    )
  • 距离: 10.0
  • 连接键: (geometryColLhs, geometryCol)
  • 左侧数据集: ri.foundry.main.dataset.left
  • 投影坐标系: EPSG:4326
  • 右侧数据集: ri.foundry.main.dataset.right
  • 右侧列前缀: rhs_

输入:

ri.foundry.main.dataset.left

geometryColLhs lhs-1
{"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,10.0],[10.0,10.0],[10.0,0.0],[0.0,0.0]]]} 42.0
{"coordinates": [55.0, 5.0], "type":"Point"} 43.0

ri.foundry.main.dataset.right

geometryCol col1 arrayCol
{"coordinates": [[[20.0, 10.0], [27.0, 10.0], [27.0, 17.0], [20.0, 17.0], [20.0, 10.0]]], "type": "Polygon"} 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 ]

输出:

rhs_geometryCol rhs_arrayCol
{"coordinates": [[[20.0, 10.0], [27.0, 10.0], [27.0, 17.0], [20.0, 17.0], [20.0, 10.0]]], "type": "Polygon"} [ 0.0, 1.0 ]

示例 6:空值情况

参数值:

  • 左侧列选择条件:
    columnNameIsIn(
     columnNames: [geometryColLhs, lhs-1],
    )
  • 右侧列选择条件:
    columnNameIsIn(
     columnNames: [geometryCol, col1, arrayCol],
    )
  • 距离: 10.0
  • 连接键: (geometryColLhs, geometryCol)
  • 左侧数据集: ri.foundry.main.dataset.left
  • 投影坐标系: EPSG:4326
  • 右侧数据集: ri.foundry.main.dataset.right
  • 右侧列前缀: rhs_

输入:

ri.foundry.main.dataset.left

geometryColLhs lhs-1
{"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,10.0],[10.0,10.0],[10.0,0.0],[0.0,0.0]]]} 42.0
{"coordinates": [55.0, 5.0], "type":"Point"} 43.0
null 43.0

ri.foundry.main.dataset.right

geometryCol col1 arrayCol
{"coordinates": [[[20.0, 10.0], [27.0, 10.0], [27.0, 17.0], [20.0, 17.0], [20.0, 10.0]]], "type": "Polygon"} 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 ]
null rhsVal3 [ 0.0, 1.0 ]

输出:

geometryColLhs lhs-1 rhs_geometryCol rhs_col1 rhs_arrayCol
{"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,10.0],[10.0,10.0],[10.0,0.0],[0.0,0.0]]]} 42.0 {"coordinates": [[[20.0, 10.0], [27.0, 10.0], [27.0, 17.0], [20.0, 17.0], [20.0, 10.0]]], "type": "Polygon"} rhsVal1 [ 0.0, 1.0 ]