

# O Babelfish comporta tipos de dados geoespaciais
<a name="babelfish-geospatial"></a>

A partir das versões 3.5.0 e 4.1.0, o Babelfish inclui suporte para estes dois tipos de dados espaciais:
+ **Tipo de dados de geometria**: esse tipo de dados é destinado ao armazenamento de dados planares ou euclidianos (Terra plana).
+ **Tipo de dados geográficos**: esse tipo de dados é destinado ao armazenamento de dados elipsoidais (Terra redonda), como coordenadas de latitude e longitude do GPS.

Esses tipos de dados permitem o armazenamento e a manipulação de dados espaciais, mas com limitações.

## Noções básicas sobre os tipos de dados geoespaciais no Babelfish
<a name="babelfish-geospatial-overview"></a>
+ Os tipos de dados geoespaciais são aceitos em vários objetos de banco de dados, como visualizações, procedimentos e tabelas.
+ Comporta o tipo de dados de pontos para armazenar dados de localização como pontos definidos por latitude, longitude e um identificador de sistema de referência espacial (SRID) válido. Um ponto pode conter valores Z (elevação), M (medida) e pode estar vazio.
+ Comporta o tipo de dados de cadeia de linhas (da versão 5.4.0) definido por uma sequência de pontos e os segmentos de linha que os conectam e por um identificador de sistema de referência espacial (SRID) válido. Uma string de linha pode conter pontos com valores Z (elevação), M (medida) e pode estar vazia.
+ Compatível com o tipo de dados poligonais (das versões 5.5.0 e 6.0.0). Um polígono é uma superfície bidimensional armazenada como uma sequência de pontos que define um anel delimitador externo e zero ou mais anéis internos.
+ Aplicações que se conectam ao Babelfish por meio de drivers, como JDBC, ODBC, DOTNET e PYTHON, podem utilizar esse recurso geoespacial.

### Funções de tipo de dados de geometria aceitas no Babelfish
<a name="babelfish-geospatial-overview-geometry"></a>
+ **STGeomFromText ({{geometry\_tagged\_text}}, SRID)**: cria uma instância de geometria usando a representação de texto conhecido (WKT).
+ **STPointFromText ({{point\_tagged\_text}}, SRID)**: cria uma instância de ponto usando a representação WKT.
+ **Ponto (X, Y, SRID)**: cria uma instância de ponto usando valores flutuantes das coordenadas x e y.
+ **<geometry\_instance>.STAsText ( )**: extrai a representação WKT da instância de geometria.
+ **<geometry\_instance>.STAsBinary ( )**: extrai a representação WKB da instância de geometria.
+ **<geometry\_instance>.STArea ( )**: calcula a área total da superfície da instância de geometria.
+ **<geometry\_instance>.STSrid ( )**: extrai o identificador de referência espacial (SRID) da instância de geometria.
+ **<geometry\_instance>.STDimension ( )**: recupera a dimensão espacial da instância de geometria.
+ **<geometry\_instance>.STIsEmpty ( )**: confere se a instância da geometria está vazia.
+ **<geometry\_instance>.STIsClosed ( )**: confere se a instância da geometria está vazia.
+ **<geometry\_instance>.STIsValid ( )**: confere se a instância da geometria está vazia.
+ **<geometry\_instance>.STDistance (other\_geometry)**: calcula a distância entre duas instâncias de geometria.
+ **<geometry\_instance>.STEquals (other\_geometry)**: confere se a instância de geometria representa o mesmo conjunto de pontos que outra instância de geometria.
+ **<geometry\_instance>.STContains (other\_geometry)**: confere se a instância de geometria contém a instância other\_geometry.
+ **<geometry\_instance>.STDisjoint (other\_geometry)**: confere se duas instâncias de geometria não têm pontos em comum.
+ **<geometry\_instance>.STIntersects (other\_geometry)**: confere se há intersecção espacial entre duas instâncias de geometria.
+ **<geometry\_instance>.STX**: extrai a coordenada X (longitude) para a instância de geometria.
+ **<geometry\_instance>.STY**: extrai a coordenada Y (latitude) para a instância de geometria.

A partir das versões 4.7.0 e 5.3.0, o Babelfish inclui suporte para as seguintes funções de dados espaciais:
+ **<geometry\_instance>.M**: extrai a coordenada M da instância de geometria.
+ **<geometry\_instance>.Z**: extrai a coordenada Z da instância de geometria.
+ **<geometry\_instance>.HasM**: confere se a instância de geometria tem pelo menos um valor M.
+ **<geometry\_instance>.HasZ**: confere se a instância de geometria tem pelo menos um valor Z.

A partir das versões 5.4.0, o Babelfish inclui suporte para a seguinte função de dados espaciais:
+ **STLineFromText ({{linestring\_tagged\_text}}, SRID)**: cria uma instância de string de linha usando a representação WKT.

A partir das versões 5.5.0 e 6.0.0, o Babelfish inclui suporte para as seguintes funções de dados espaciais:
+ **STPolyFromText ({{polygon\_tagged\_text}}, SRID)**: cria uma instância de polígono usando a representação WKT.

### Funções de tipo de dados de geografia aceitas no Babelfish
<a name="babelfish-geospatial-overview-geography"></a>
+ **STGeomFromText ({{geography\_tagged\_text}}, SRID)**: cria uma instância de geografia usando a representação WKT.
+ **STPointFromText ({{point\_tagged\_text}}, SRID)**: cria uma instância de ponto usando a representação WKT.
+ **Ponto (Lat, Long, SRID)**: cria uma instância de ponto usando valores flutuantes de latitude e de longitude.
+ **<geography\_instance>.STAsText ( )**: extrai a representação WKT da instância de geografia.
+ **<geography\_instance>.STAsBinary ( )**: extrai a representação WKB da instância de geografia.
+ **<geography\_instance>.STArea ( )**: calcula a área total da superfície da instância de geografia.
+ **<geography\_instance>.STSrid ( )**: extrai o identificador de referência espacial (SRID) da instância de geografia.
+ **<geography\_instance>.STDimension ( )**: recupera a dimensão espacial da instância de geografia.
+ **<geography\_instance>.STIsEmpty ( )**: confere se a instância da geografia está vazia.
+ **<geography\_instance>.STIsClosed ( )**: confere se a instância da geografia está fechada.
+ **<geography\_instance>.STIsValid( )**: confere se a instância da geografia é válida.
+ **<geography\_instance>.STDistance (other\_geography)**: calcula a distância entre duas instâncias de geografia.
+ **<geography\_instance>.STEquals (other\_geography)**: confere se a instância de geografia representa o mesmo conjunto de pontos que outra instância de geografia.
+ **<geography\_instance>.STContains (other\_geography)**: confere se a instância de geografia contém a instância other\_geography.
+ **<geography\_instance>.STDisjoint (other\_geography)**: confere se duas instâncias de geografia não têm pontos em comum.
+ **<geography\_instance>.STIntersects (other\_geography)**: confere se há intersecção espacial entre duas instâncias de geografia.
+ **<geography\_instance>.Lat**: extrai o valor de latitude para a instância de geografia.
+ **<geography\_instance>.Long**: extrai o valor de longitude para a instância de geografia.

A partir das versões 4.7.0 e 5.3.0, o Babelfish inclui suporte para as seguintes funções de dados espaciais:
+ **<geography\_instance>.M**: extrai a coordenada M da instância geográfica.
+ **<geography\_instance>.M**: extrai a coordenada M da instância de geografia.
+ **<geography\_instance>.HasM**: confere se a instância de geografia tem pelo menos um valor M.
+ **<geography\_instance>.HasZ**: confere se a instância de geografia tem pelo menos um valor Z.

A partir das versões 5.4.0, o Babelfish inclui suporte para a seguinte função de dados espaciais:
+ **STLineFromText ({{linestring\_tagged\_text}}, SRID)**: cria uma instância de string de linha usando a representação WKT.

A partir das versões 5.5.0 e 6.0.0, o Babelfish inclui suporte para as seguintes funções de dados espaciais:
+ **STPolyFromText ({{polygon\_tagged\_text}}, SRID)**: cria uma instância de polígono usando a representação WKT.

## Limitações no Babelfish para tipos de dados geoespaciais
<a name="babelfish-geospatial-limitations"></a>
+ No momento, os tipos de geometria e geografia diferentes de instâncias de polígono e string de linha não são aceitos:
  + CircularString
  + CompoundCurve
  + CurvePolygon
  + MultiPoint
  + MultiLineString
  + MultiPolygon
  + GeometryCollection
+ No momento, a indexação espacial não comporta tipos de dados geoespaciais.
+ No momento, somente as funções listadas comportam esses tipos de dados. Para obter mais informações, consulte [Funções de tipo de dados de geometria aceitas no Babelfish](#babelfish-geospatial-overview-geometry) e [Funções de tipo de dados de geografia aceitas no Babelfish](#babelfish-geospatial-overview-geography).
+ A saída da função STDistance para dados de geografia pode ter pequenas variações de precisão em comparação com o T-SQL. Isso se deve à implementação subjacente do PostGIS. Para ter mais informações, consulte [ST\_Distance](https://postgis.net/docs/ST_Distance.html).
+ A saída da função STIsValid para dados de geometria e geografia pode ter alguns desvios em comparação ao T-SQL. Por esse motivo, as funções STDistance, STContains, STInstersects, STDisjoint, STDimension, STArea, STEquals também podem se desviar do T-SQL em alguns casos (exibe a saída em vez de gerar erro). Isso se deve à implementação subjacente do PostGIS. Para ter mais informações, consulte [ST\_IsValid](https://postgis.net/docs/ST_IsValid.html).
+ Para ter uma performance ideal, use tipos de dados geoespaciais integrados, sem criar camadas adicionais de abstração no Babelfish.
+ No Babelfish, os nomes das funções geoespaciais são usados como palavras-chave e realizarão operações espaciais somente se utilizados da maneira pretendida.