Aller au contenu

Toutes les opérations géospatiales ne nécessitent pas une étape dédiée. Tout ce qui est une expression de colonne sur une seule ligne s’exécute comme une cellule d’expression d’une étape Table Extract, dans la base de données, sans qu’aucune ligne ne quitte l’entrepôt — et passe donc à l’échelle avec la table plutôt qu’avec le moteur de workflow. C’est la voie que choisit la conversion Alteryx pour les outils Alteryx Create Points et Distance.

Lakehouse v1 et v2 nomment différemment leurs fonctions de géométrie — ST_MAKEGEOMPOINT contre ST_POINT, ST_ASWKT contre ST_ASTEXT. La famille geom_* se résout vers la bonne fonction pour l’espace de travail sur lequel vous travaillez ; une expression écrite une seule fois fonctionne donc sur les deux.

Expression 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, arguments inversés
func.geom_x(g) ST_X ST_X
func.geom_y(g) ST_Y ST_Y

Construisez un point WKT à partir d’une colonne de longitude et d’une colonne de latitude :

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

geom_as_wkt écrit le résultat en WKT, la forme que toutes les étapes spatiales de PlaidCloud lisent et écrivent.

La distance est la seule opération ici qui n’a aucune écriture portable — les deux lakehouses divergent à la fois sur la fonction et sur l’unité renvoyée ; l’expression diffère donc selon la version.

ST_DISTANCE_SPHERE prend quatre coordonnées et renvoie des mètres :

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,
)
Unité Facteur à partir des mètres
Miles 0.0006213711922373339
Kilomètres 0.001
Mètres 1
Pieds 3.280839895013123

geom_distance est planaire sur deux géométries et renvoie des degrés ; le facteur convertit donc à partir des degrés et non des mètres :

func.geom_distance(
func.geom_from_wkt(get_column(table, 'Origin')),
func.geom_from_wkt(get_column(table, 'Destination')),
) * 69.1709
Unité Facteur à partir des degrés
Miles 69.1709
Kilomètres 111.32
Mètres 111320.0
Pieds 364566.929

Étant planaire, il s’agit d’une approximation qui se dégrade en s’éloignant de l’équateur — acceptable sur les distances locales typiques de l’analyse de zones de chalandise, moins sur un continent.

La garde LIKE 'POINT%' de la forme v2 est importante : ST_DISTANCE_SPHERE prend quatre coordonnées ; une géométrie qui n’est pas un point d’un côté ou de l’autre mesurerait donc silencieusement la mauvaise chose. Le CASE renvoie null pour ces lignes à la place.

Vous voulez Utilisez
La distance de chaque ligne à ses lignes les plus proches dans une autre table Spatial Find Nearest
La distance comme filtre dans une jointure spatiale Spatial Match
Surface, longueur, centroïde ou rectangle englobant Spatial Info
Tout ce qui modifie la forme d’une géométrie Étapes géospatiales