Tipos de dados espaciais

Há dois tipos de dados espaciais. O tipo de dados de geometry oferece suporte a dados planares ou a dados euclidianos (terra plana). O tipo de dados de geometry está de acordo com os Recursos Simples do Open Geospatial Consortium (OGC) para o SQL Specification versão 1.1.0.

Além disso, o SQL Server oferece suporte ao tipo de dados de geography que armazena dados elipsoidais (globo), como coordenadas de latitude e longitude de GPS.

Os tipos de dados de geometry e de geography oferecem suporte a onze objetos de dados espaciais ou tipos de instâncias. No entanto, apenas sete dos tipos de instâncias podem ser instanciados. É possível criar e trabalhar com essas instâncias (ou instanciá-las) em um banco de dados. Essas instâncias derivam determinadas propriedades de seus tipos de dados pai que as distingue como Points, LineStrings, Polygons ou como várias instâncias de geometry ou de geography em uma GeometryCollection.

A figura a seguir descreve a hierarquia de geometry na qual os tidos dados de geometry e de geography são baseados. Os tipos de geometry e de geography que podem ser instanciados são indicados em azul.

Hierarquia do tipo de geometria

Como a figura indica, os sete tipos de dados que podem ser instanciados de geometry e de geography são Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon e GeometryCollection. Os tipos geometry e geography podem reconhecer uma instância específica desde que ela esteja bem formada, ainda que não esteja definida explicitamente. Por exemplo, se você definir uma instância de Point explicitamente usando o método STPointFromText(), geometry e geography a reconhecerão como uma instância de Point, desde que a entrada do método esteja bem formada. Se você definir a mesma instância usando o método STGeomFromText(), os tipos de dados de geometry e de geography a reconhecerão como uma instância de Point.

Para obter mais informações sobre essas instâncias, consulte os seguintes tópicos:

Diferenças entre os dois tipos de dados

Os dois tipos de dados espaciais sempre se comportam de maneira muito semelhante, mas há algumas diferenças importantes na maneira como eles são armazenados e manipulados.

Como bordas de conexão são definidas

Os dados definidos para os tipos LineString e Polygon só são vértices. A borda de conexão entre dois vértices em um tipo de geometria é uma linha reta. No entanto, a borda de conexão entre dois vértices em um tipo de geografia é um amplo arco elíptico curto entre os dois vértices. Uma grande elipse é a interseção do elipsoide com um plano no centro e um amplo arco elíptico é um segmento de arco na grande elipse.

Medidas em tipos de dados espaciais

No sistema planar ou de terra plana, as medidas de distâncias e de áreas são fornecidas na mesma unidade de medida de coordenadas. Usando o tipo de dados de geometry, a distância entre (2, 2) e (5, 6) é de 5 unidades, independentemente das unidades usadas.

No sistema elipsoidal ou de terra redonda, as coordenadas são fornecidas em graus de latitude ou de longitude. No entanto os comprimentos e áreas são normalmente medidos em metros e metros quadrados, embora a medida possa depender do SRID (spatial reference identifier) da instância de geography. A unidade mais comum de medida para o tipo de dados de geography é metros.

Orientação de dados espaciais

No sistema de planar, a orientação de anel de um polígono não é um fator importante. Por exemplo, um polígono descrito por ((0, 0), (10, 0), (0, 20), (0, 0)) é o mesmo que um polígono descrito por ((0, 0), (0, 20), (10, 0), (0, 0)). Os Recursos Simples do OGC para SQL Specification não ditam uma ordenação de anel e o SQL Server não impõe ordenação de anel.

Em um sistema elipsoidal, um polígono não tem nenhum significado ou é ambíguo, sem uma orientação. Por exemplo, um anel ao redor do equador descreve o hemisfério norte ou o sul? Se usarmos o tipo de dados de geography para armazenar a instância espacial, deveremos especificar a orientação do anel e descrever precisamente o local da instância.

O SQL Server 2008 coloca as seguintes restrições sobre o uso do tipo de dados de geography:

  • Cada instância de geography deve se ajustar dentro de um único hemisfério. Nenhum objeto espacial maior do que um hemisfério pode ser armazenado.

  • Qualquer instância de geography de uma representação WKT (Well-Known Text) ou WKB (Well-Known Binary) do Open Geospatial Consortium (OGC) que reproduza um objeto maior do que um hemisfério aciona uma ArgumentException.

  • Os métodos de tipo de dados de geography que requerem a entrada de duas instâncias de geography, como STIntersection(), STUnion(), STDifference() e STSymDifference() retornarão nulo se os resultados dos métodos não se ajustarem dentro de um único hemisfério. STBuffer() retornará nulo se a saída ultrapassar um único hemisfério.

Anéis externos e internos não são importantes no tipo de dados de geografia

Os Recursos Simples do OGC para SQL Specification discutem anéis externos e internos, mas essa distinção faz pouco sentido para o tipo de dados SQL Servergeography: qualquer anel de um polígono pode ser usado como anel externo.

Para obter mais informações sobre especificações do OCG, consulte o seguinte:

OGC Specifications, Simple Feature Access Part 1 - Common Architecture

OGC Specifications, Simple Feature Access Part 2 – SQL Options