Geometry in SQL
Description
Section intitulée « Description »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.
Fonctions de géométrie portables
Section intitulée « Fonctions de géométrie portables »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 |
Create Points
Section intitulée « Create Points »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.
Distance entre deux points
Section intitulée « Distance entre deux points »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.
Lakehouse v2
Section intitulée « Lakehouse v2 »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 |
Lakehouse v1
Section intitulée « Lakehouse v1 »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.
Quand utiliser plutôt une étape
Section intitulée « Quand utiliser plutôt une étape »| 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 |