跳转到内容

并非每个地理空间操作都需要专门的步骤。任何单行列表达式都可以作为 Table Extract 步骤的表达式单元格在数据库中运行,没有行离开数据仓库——因此它随表规模扩展,而不是随工作流引擎扩展。Alteryx 转换对 Alteryx 的 Create Points 和 Distance 工具就采用这一路径。

Lakehouse v1 和 v2 对几何函数的写法不同——ST_MAKEGEOMPOINT 对 ST_POINT,ST_ASWKT 对 ST_ASTEXT。geom_* 系列会解析为您所运行的工作区对应的正确函数,因此一次编写的表达式在两者上都能工作。

表达式 Lakehouse v1 Lakehouse v2
func.geom_from_wkt(x) ST_GEOMETRYFROMWKT ST_GEOMETRYFROMTEXT
func.geom_point(lon, lat) ST_MAKEGEOMPOINT ST_POINT
func.geom_as_wkt(g) ST_ASWKT ST_ASTEXT
func.geom_contains(a, b) ST_CONTAINS ST_CONTAINS
func.geom_within(a, b) ST_WITHIN ST_CONTAINS,参数互换
func.geom_x(g) ST_X ST_X
func.geom_y(g) ST_Y ST_Y

根据经度列和纬度列构建 WKT 点:

func.geom_as_wkt(
func.geom_point(
get_column(table, 'Longitude'),
get_column(table, 'Latitude'),
)
)

geom_as_wkt 将结果写为 WKT,这是所有 PlaidCloud 空间步骤读写所用的形式。

距离是这里唯一没有可移植写法的操作——两种 Lakehouse 在函数及其返回单位上都不一致,因此表达式因版本而异。

ST_DISTANCE_SPHERE 接受四个坐标,返回米:

case(
(
and_(
get_column(table, 'Origin').like('POINT%'),
get_column(table, 'Destination').like('POINT%'),
),
func.st_distance_sphere(
func.geom_x(func.geom_from_wkt(get_column(table, 'Origin'))),
func.geom_y(func.geom_from_wkt(get_column(table, 'Origin'))),
func.geom_x(func.geom_from_wkt(get_column(table, 'Destination'))),
func.geom_y(func.geom_from_wkt(get_column(table, 'Destination'))),
) * 0.0006213711922373339,
),
else_=null,
)
单位 由米换算的系数
英里 0.0006213711922373339
千米 0.001
米 1
英尺 3.280839895013123

geom_distance 对两个几何进行平面计算并返回度,因此系数是从度而非米换算:

func.geom_distance(
func.geom_from_wkt(get_column(table, 'Origin')),
func.geom_from_wkt(get_column(table, 'Destination')),
) * 69.1709
单位 由度换算的系数
英里 69.1709
千米 111.32
米 111320.0
英尺 364566.929

由于是平面计算,这是一种近似,离赤道越远误差越大——在商圈分析典型的局部距离上没有问题,但跨越整个大陆时就不够理想。

v2 形式中的 LIKE 'POINT%' 保护很重要:ST_DISTANCE_SPHERE 接受四个坐标,因此任一侧的非点几何都会悄悄地度量出错误的结果。CASE 会对这些行返回 null。

您想要 使用
每一行到另一个表中其最近行的距离 Spatial Find Nearest 步骤
在空间联接中将距离用作筛选器 空间匹配
面积、长度、质心或边界框 Spatial Info 步骤
任何会改变几何形状的操作 地理空间步骤