Consulta de datos espaciales en Amazon Redshift
Los datos espaciales describen la posición y la forma de una geometría en un espacio definido (un sistema de referencia espacial). Amazon Redshift admite los datos espaciales con el tipo de datos GEOMETRY
y GEOGRAPHY
, que contienen datos espaciales y, de forma opcional, el identificador de sistema de referencia espacial (SRID) de los datos.
Los datos espaciales contienen datos geométricos que se pueden usar para representar características geométricas. Este tipo de datos puede corresponder a informes meteorológicos, direcciones de mapas, tweets con posiciones geográficas, ubicaciones de almacenes y rutas de líneas aéreas. Los datos espaciales desempeñan un papel importante en el análisis, los informes y las previsiones de negocio.
Puede consultar los datos espaciales con las funciones SQL de Amazon Redshift. Los datos espaciales contienen valores geométricos de un objeto.
Las operaciones de tipo de datos GEOMETRY
funcionan en el plano cartesiano. Aunque el identificador del sistema de referencia espacial (SRID) se almacena dentro del objeto, este SRID es simplemente un identificador del sistema de coordenadas y no desempeña ningún papel en los algoritmos utilizados para procesar los objetos GEOMETRY
. Por el contrario, las operaciones en el tipo de datos GEOGRAPHY
tratan las coordenadas dentro de los objetos como coordenadas esféricas de un esferoide. Este esferoide se define por el SRID, que hace referencia a un sistema de referencia espacial geográfica. De forma predeterminada, los tipos de datos GEOGRAPHY
se crean con referencia espacial (SRID) 4326, y hacen referencia al Sistema Geodésico Mundial (WGS) 84. Para obtener más información acerca de SRID, consulte Sistema de referencia espacial
Puede utilizar la función ST_Transform para transformar las coordenadas de varios sistemas de referencia espacial. Una vez realizada la transformación de las coordenadas, también puede utilizar una conversión sencilla entre ambas, siempre que la entrada GEOMETRY
esté codificada con el SRID geográfico. Esta conversión simplemente copia las coordenadas sin realizar ninguna transformación adicional. Por ejemplo:
SELECT ST_AsEWKT(ST_GeomFromEWKT('SRID=4326;POINT(10 20)')::geography);
st_asewkt
------------------------
SRID=4326;POINT(10 20)
Para entender mejor la diferencia entre los tipos de datos GEOMETRY
y GEOGRAPHY
, considere calcular la distancia entre el aeropuerto de Berlín (BER) y el aeropuerto de San Francisco (SFO) utilizando el Sistema Geodésico Mundial (WGS) 84. Si utiliza el tipo de datos GEOGRAPHY
, el resultado se expresa en metros. Cuando se utiliza el tipo de datos GEOMETRY
con SRID 4326, el resultado se expresa en grados y no se pueden convertir en metros porque la distancia de un grado depende de dónde se encuentren las geometrías del globo.
Los cálculos sobre los tipos de datos GEOGRAPHY
se utilizan principalmente para cálculos realistas de tierra redonda, como el área precisa de un país sin distorsión. Pero calcularlo significa un costo mucho mayor. Por lo tanto, ST_Transform puede transformar las coordenadas en un sistema apropiado local de coordenadas proyectadas y realizar el cálculo en el tipo de datos GEOMETRY
de forma más rápida.
Al usar datos espaciales puede ejecutar consultas para hacer lo siguiente:
Encontrar la distancia entre dos puntos.
Comprobar si un área (polígono) contiene otra área.
Comprobar si una linestring se cruza con otra linestring o polígono.
Puede utilizar el tipo de datos GEOMETRY
para almacenar los valores de datos espaciales. Un valor GEOMETRY
en Amazon Redshift puede definir tipos de datos primitivos de geometría bidimensional (2D), tridimensional (3DZ), bidimensional con una medida (3DM) y cuatridimensional (4D):
Una geometría bidimensional (2D) se especifica mediante dos coordenadas cartesianas (x, y) en un plano.
Una geometría tridimensional (3DZ) se especifica mediante tres coordenadas cartesianas (x, y, z) en el espacio.
Una geometría bidimensional con una medida (3DM) se especifica mediante tres coordenadas (x, y, m), donde las dos primeras son coordenadas cartesianas en un plano y la tercera es una medida.
Una geometría cuatridimensional (4D) se especifica mediante cuatro coordenadas (x, y, z, m), donde las tres primeras son coordenadas cartesianas en un espacio y la tercera es una medida.
Para obtener más información acerca de los tipos de datos primitivos de geometría, consulte Well Known Text
Puede utilizar el tipo de datos GEOGRAPHY
para almacenar los valores de datos espaciales. Un valor GEOGRAPHY
en Amazon Redshift puede definir tipos de datos primitivos de geometría bidimensional (2D), tridimensional (3DZ), bidimensional con una medida (3DM) y cuatridimensional (4D):
Una geometría bidimensional (2D) se especifica mediante coordenadas de longitud y latitud en un esferoide.
Una geometría tridimensional (3DZ) se especifica mediante coordenadas de longitud, latitud y altitud en un esferoide.
Una geometría bidimensional con una medida (3DM) se especifica mediante tres coordenadas (longitud, latitud, medida), donde las dos primeras son coordenadas angulares en una esfera y la tercera es una medida.
Una geometría de cuatro dimensiones (4D) se especifica mediante cuatro coordenadas (longitud, latitud, altitud, medida), donde las tres primeras son longitud, latitud y altitud, y la cuarta es una medida.
Para obtener más información acerca de los sistemas de coordenadas geográficas, consulte Geographic coordinate system
Los tipos de datos GEOMETRY
y GEOGRAPHY
tienen los siguientes subtipos:
POINT
LINESTRING
POLYGON
MULTIPOINT
MULTILINESTRING
MULTIPOLYGON
GEOMETRYCOLLECTION
Hay funciones SQL de Amazon Redshift que son compatibles con las siguientes representaciones de datos geométricos:
GeoJSON
Well-known Text (WKT)
Extended well-known text (EWKT)
Representación well-known binary (WKB)
Extended well-known binary (EWKB)
Puede convertir entre los tipos de datos GEOMETRY
y GEOGRAPHY
.
El siguiente SQL convierte una cadena de líneas desde un GEOMETRY
a un GEOGRAPHY
.
SELECT ST_AsEWKT(ST_GeomFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)')::geography);
st_asewkt
----------------------------------------------
SRID=4326;LINESTRING(110 40,2 3,-10 80,-7 9)
El siguiente SQL convierte una cadena de líneas desde un GEOGRAPHY
a un GEOMETRY
.
SELECT ST_AsEWKT(ST_GeogFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)')::geometry);
st_asewkt
----------------------------------------------
SRID=4326;LINESTRING(110 40,2 3,-10 80,-7 9)
Amazon Redshift proporciona muchas funciones SQL para consultar los datos espaciales. A excepción de la función ST_IsValid
, las funciones espaciales que aceptan un objeto GEOMETRY
como argumento esperan que este objeto GEOMETRY
sea una geometría válida. Si el objeto GEOMETRY
o GEOGRAPHY
no es válido, entonces el comportamiento de la función espacial no está definido. Para obtener más información acerca de la validez, consulte Validez geométrica.
Para obtener más detalles acerca de las funciones SQL para datos espaciales, consulte Funciones espaciales.
Para obtener más información acerca de cómo cargar los datos espaciales, consulte Carga de una columna de tipo de datos GEOMETRY o GEOGRAPHY.