

# Babelfish admite tipos de datos geoespaciales
<a name="babelfish-geospatial"></a>

A partir de las versiones 3.5.0 y 4.1.0, Babelfish admite los dos tipos de datos espaciales siguientes:
+ **Tipo de datos geométricos**: este tipo de datos está indicado para almacenar datos planares o euclidianos (tierra plana).
+ **Tipo de datos geográficos**: este tipo de datos está diseñado para almacenar datos elipsoidales o de tierra redonda, como las coordenadas de latitud y longitud de GPS.

Estos tipos de datos permiten el almacenamiento y la manipulación de datos espaciales, pero con limitaciones.

## Descripción de los tipos de datos geoespaciales en Babelfish
<a name="babelfish-geospatial-overview"></a>
+ Los tipos de datos geoespaciales se admiten en varios objetos de bases de datos, como vistas, procedimientos y tablas.
+ Admite el tipo de datos de puntos para almacenar los datos de ubicación como puntos definidos por la latitud, la longitud y un identificador del sistema de referencia espacial (SRID) válido. Un punto puede contener los valores Z (elevación) y M (medida) y puede estar vacío.
+ Admite el tipo de datos de cadena de línea (a partir de la versión 5.4.0) definidos por una secuencia de puntos y los segmentos de línea que los conectan, así como un identificador del sistema de referencia espacial (SRID) válido. Una cadena de línea puede contener puntos con valores Z (elevación) y M (medida) y puede estar vacía.
+ Admite el tipo de datos polígono (a partir de las versiones 5.5.0 y 6.0.0). Un polígono es una superficie bidimensional representada como una secuencia de puntos que definen un contorno exterior y cero o más contornos interiores.
+ Las aplicaciones que se conectan a Babelfish a través de controladores como JDBC, ODBC, DOTNET y PYTHON pueden utilizar esta característica geoespacial.

### Funciones de tipos de datos geométricos admitidos en Babelfish
<a name="babelfish-geospatial-overview-geometry"></a>
+ **STGeomFromText ({{geometry\_tagged\_text}}, SRID)**: crea una instancia de geometría con la representación Well-Known Text (WKT).
+ **STPointFromText ({{point\_tagged\_text}}, SRID)**: crea una instancia de punto con la representación WKT.
+ **Point (X, Y, SRID)**: crea una instancia de punto con valores flotantes de las coordenadas x e y.
+ **<geometry\_instance>.STAsText ( )**: extrae la representación WKT de la instancia de geometría.
+ **<geometry\_instance>.STAsBinary ( )**: extrae la representación WKB de la instancia de geometría.
+ **<geometry\_instance>.STArea ( )**: calcula la superficie total de la instancia de geometría.
+ **<geometry\_instance>.STSrid ( )**: extrae el identificador de referencia espacial (SRID) de la instancia de geometría.
+ **<geometry\_instance>.STDimension ( )**: recupera la dimensión espacial de la instancia de geometría.
+ **<geometry\_instance>.STIsEmpty ( )**: comprueba si la instancia de geometría está vacía.
+ **<geometry\_instance>.STIsClosed ( )**: comprueba si la instancia de geometría está cerrada.
+ **<geometry\_instance>.STIsValid ( )**: comprueba si la instancia de geometría es válida.
+ **<geometry\_instance>.STDistance (other\_geometry)**: calcula la distancia entre dos instancias de geometría.
+ **<geometry\_instance>.STEquals (other\_geometry)**: comprueba si la instancia de geometría representa el mismo conjunto de puntos que otra instancia de geometría.
+ **<geometry\_instance>.STContains (other\_geometry)**: comprueba si la instancia de geometría contiene la instancia other\_geometry.
+ **<geometry\_instance>.STDisjoint (other\_geometry)**: comprueba si dos instancias de geometría no tienen puntos en común.
+ **<geometry\_instance>.STIntersects (other\_geometry)**: comprueba si dos instancias de geometría se intersectan espacialmente.
+ **<geometry\_instance>.STX**: extrae la coordenda X (longitud) para la instancia de geometría.
+ **<geometry\_instance>.STY**: extrae la coordenada Y (latitud) para la instancia de geometría.

A partir de las versiones 4.7.0 y 5.3.0, Babelfish admite las funciones de datos espaciales siguientes:
+ **<geometry\_instance>.M**: extrae la coordenada M de la instancia de geometría.
+ **<geometry\_instance>.Z**: extrae la coordenada Z de la instancia de geometría.
+ **<geometry\_instance>.HasM**: comprueba si la instancia de geometría tiene al menos un valor M.
+ **<geometry\_instance>.HasZ**: comprueba si la instancia de geometría tiene al menos un valor Z.

A partir de la versión 5.4.0, Babelfish admite la función de datos espaciales siguientes:
+ **STLineFromText ({{linestring\_tagged\_text}}, SRID)**: crea una instancia de cadena de línea mediante la representación WKT.

A partir de las versiones 5.5.0 y 6.0.0, Babelfish es compatible con la siguiente función de datos espaciales:
+ **STPolyFromText ({{polygon\_tagged\_text}}, SRID)**: crea una instancia de polígono utilizando la representación WKT.

### Funciones de tipo de datos geográficos admitidos en Babelfish
<a name="babelfish-geospatial-overview-geography"></a>
+ **STGeomFromText ({{geometry\_tagged\_text}}, SRID)**: crea una instancia de geometría con la representación WKT.
+ **STPointFromText ({{point\_tagged\_text}}, SRID)**: crea una instancia de punto con la representación WKT.
+ **Point (Lat, Long, SRID)**: crea una instancia de punto utilizando valores flotantes de latitud y longitud.
+ **<geography\_instance>.STAsText ( )**: extrae la representación WKT de la instancia de geografía.
+ **<geography\_instance>.STAsBinary ( )**: extrae la representación WKB de la instancia de geografía.
+ **<geography\_instance>.STArea ( )**: calcula el área de la superficie total de la instancia de geografía.
+ **<geography\_instance>.STSrid ( )**: extrae el identificador de referencia espacial (SRID) de la instancia de geografía.
+ **<geography\_instance>.STDimension ( )**: recupera la dimensión espacial de la instancia de geografía.
+ **<geography\_instance>.STIsEmpty ( )**: comprueba si la instancia de geografía está vacía.
+ **<geography\_instance>.STIsClosed ( )**: comprueba si la instancia de geografía está cerrada.
+ **<geography\_instance>.STIsValid ( )**: comprueba si la instancia de geografía es válida.
+ **<geography\_instance>.STDistance (other\_geography)**: calcula la distancia entre dos instancias de geografía.
+ **<geography\_instance>.STEquals (other\_geography)**: comprueba si la instancia de geografía representa el mismo conjunto de puntos que otra instancia de geografía.
+ **<geography\_instance>.STContains (other\_geography)**: comprueba si la instancia de geografía contiene la instancia other\_geography.
+ **<geography\_instance>.STDisjoint (other\_geography)**: comprueba si dos instancias de geografía no tienen puntos en común.
+ **<geometry\_instance>.STIntersects (other\_geography)**: comprueba si dos instancias de geografía se intersectan espacialmente.
+ **<geography\_instance>.Lat**: extrae el valor de latitud para la instancia de geografía.
+ **<geography\_instance>.Long**: extrae el valor de longitud para la instancia de geografía.

A partir de las versiones 4.7.0 y 5.3.0, Babelfish admite las funciones de datos espaciales siguientes:
+ **<geography\_instance>.M**: extrae la coordenada M de la instancia de geografía.
+ **<geography\_instance>.Z**: extrae la coordenada Z de la instancia de geografía.
+ **<geography\_instance>.HasM**: comprueba si la instancia de geografía tiene al menos un valor M.
+ **<geography\_instance>.HasZ**: comprueba si la instancia de geografía tiene al menos un valor Z.

A partir de la versión 5.4.0, Babelfish admite la función de datos espaciales siguientes:
+ **STLineFromText ({{linestring\_tagged\_text}}, SRID)**: crea una instancia de cadena de línea mediante la representación WKT.

A partir de las versiones 5.5.0 y 6.0.0, Babelfish es compatible con la siguiente función de datos espaciales:
+ **STPolyFromText ({{polygon\_tagged\_text}}, SRID)**: crea una instancia de polígono utilizando la representación WKT.

## Limitaciones de Babelfish para tipos de datos geoespaciales
<a name="babelfish-geospatial-limitations"></a>
+ Actualmente no se admiten los tipos de geometría y geografía distintos de las instancias de punto, línea y polígono:
  + CircularString
  + CompoundCurve
  + CurvePolygon
  + MultiPoint
  + MultiLineString
  + MultiPolygon
  + GeometryCollection
+ Actualmente, la indexación espacial no se admite para los tipos de datos geoespaciales.
+ Para estos tipos de datos solo se admiten actualmente las funciones enumeradas. Para obtener más información, consulte [Funciones de tipos de datos geométricos admitidos en Babelfish](#babelfish-geospatial-overview-geometry) y [Funciones de tipo de datos geográficos admitidos en Babelfish](#babelfish-geospatial-overview-geography).
+ El resultado de la función StDistance para datos geográficos podría tener pequeñas variaciones de precisión en comparación con T-SQL. Esto se debe a la implementación subyacente de PostGIS. Para obtener más información, consulte [ST\_Distance](https://postgis.net/docs/ST_Distance.html)
+ El resultado de la función STIsValid para datos de geometría y de geografía podría tener algunas desviaciones en comparación con T-SQL. Por este motivo, las funciones STDistance, STContains, STInstersects, STDisjoint, STDimension, STArea y STEquals también pueden desviarse de T-SQL en algunos casos (devuelve un resultado en lugar de arrojar un error). Esto se debe a la implementación subyacente de PostGIS. Para obtener más información, consulte [ST\_IsValid](https://postgis.net/docs/ST_IsValid.html).
+ Para lograr un rendimiento óptimo, utilice los tipos de datos geoespaciales integrados, sin crear capas adicionales de abstracción en Babelfish.
+ En Babelfish, los nombres de las funciones geoespaciales se utilizan como palabras clave y solo realizarán operaciones espaciales si se utilizan de la forma prevista.