Geometry in SQL (paso)
Descripción
Sección titulada «Descripción»No todas las operaciones geoespaciales necesitan un paso dedicado. Cualquier cosa que sea una expresión de columna de una sola fila se ejecuta como una celda de expresión de Table Extract (paso), en la base de datos, sin que ninguna fila salga del almacén de datos, por lo que escala con la tabla y no con el motor de flujos de trabajo. Esta es la ruta que elige la conversión de Alteryx para las herramientas Create Points y Distance de Alteryx.
Funciones de geometría portables
Sección titulada «Funciones de geometría portables»Lakehouse v1 y v2 escriben sus funciones de geometría de forma distinta: ST_MAKEGEOMPOINT
frente a ST_POINT, ST_ASWKT frente a ST_ASTEXT. La familia geom_* se resuelve
en la función correcta para el espacio de trabajo en el que se ejecuta, de modo que una expresión escrita
una sola vez funciona en ambos.
| Expresión | 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, con los argumentos intercambiados |
func.geom_x(g) |
ST_X |
ST_X |
func.geom_y(g) |
ST_Y |
ST_Y |
Create Points
Sección titulada «Create Points»Construya un punto WKT a partir de una columna de longitud y una columna de latitud:
func.geom_as_wkt( func.geom_point( get_column(table, 'Longitude'), get_column(table, 'Latitude'), ))geom_as_wkt escribe el resultado como WKT, el formato que leen y escriben todos los pasos
espaciales de PlaidCloud.
Distancia entre dos puntos
Sección titulada «Distancia entre dos puntos»La distancia es la única operación de esta página que no tiene una forma portable: los dos lakehouses discrepan tanto en la función como en su unidad de retorno, por lo que la expresión difiere según la versión.
Lakehouse v2
Sección titulada «Lakehouse v2»ST_DISTANCE_SPHERE toma cuatro coordenadas y devuelve metros:
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,)| Unidad | Factor a partir de metros |
|---|---|
| Millas | 0.0006213711922373339 |
| Kilómetros | 0.001 |
| Metros | 1 |
| Pies | 3.280839895013123 |
Lakehouse v1
Sección titulada «Lakehouse v1»geom_distance es planar sobre dos geometrías y devuelve grados, por lo que el
factor convierte a partir de grados y no de metros:
func.geom_distance( func.geom_from_wkt(get_column(table, 'Origin')), func.geom_from_wkt(get_column(table, 'Destination')),) * 69.1709| Unidad | Factor a partir de grados |
|---|---|
| Millas | 69.1709 |
| Kilómetros | 111.32 |
| Metros | 111320.0 |
| Pies | 364566.929 |
Al ser planar, es una aproximación que se degrada al alejarse del ecuador: es adecuada para las distancias locales típicas del análisis de áreas de influencia, y menos para atravesar un continente.
La protección LIKE 'POINT%' de la forma v2 es importante: ST_DISTANCE_SPHERE toma cuatro
coordenadas, de modo que una geometría que no sea un punto en cualquiera de los lados mediría en silencio
algo incorrecto. En cambio, CASE devuelve nulo para esas filas.
Cuándo usar un paso en su lugar
Sección titulada «Cuándo usar un paso en su lugar»| Lo que desea | Use |
|---|---|
| La distancia de cada fila a sus filas más cercanas en otra tabla | Spatial Find Nearest (paso) |
| La distancia como filtro en una combinación espacial | Coincidencia espacial |
| Área, longitud, centroide o cuadro delimitador | Spatial Info (paso) |
| Cualquier cosa que cambie la forma de una geometría | Pasos geoespaciales |