Geometry in SQL 步骤
并非每个地理空间操作都需要专门的步骤。任何单行列表达式都可以作为 Table Extract 步骤的表达式单元格在数据库中运行,没有行离开数据仓库——因此它随表规模扩展,而不是随工作流引擎扩展。Alteryx 转换对 Alteryx 的 Create Points 和 Distance 工具就采用这一路径。
可移植的几何函数
Section titled “可移植的几何函数”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 空间步骤读写所用的形式。
两点之间的距离
Section titled “两点之间的距离”距离是这里唯一没有可移植写法的操作——两种 Lakehouse 在函数及其返回单位上都不一致,因此表达式因版本而异。
Lakehouse v2
Section titled “Lakehouse v2”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 |
Lakehouse v1
Section titled “Lakehouse v1”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。
何时改用步骤
Section titled “何时改用步骤”| 您想要 | 使用 |
|---|---|
| 每一行到另一个表中其最近行的距离 | Spatial Find Nearest 步骤 |
| 在空间联接中将距离用作筛选器 | 空间匹配 |
| 面积、长度、质心或边界框 | Spatial Info 步骤 |
| 任何会改变几何形状的操作 | 地理空间步骤 |
- 地理空间步骤
- 几何函数(Lakehouse v1)
- 地理函数(Lakehouse v1)——H3 和 geohash 索引
- 空间函数(Lakehouse v2)