Partilhar via


Criar, construir e consultar instâncias geográficas

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceEndpoint de análise SQL no Microsoft FabricArmazém no Microsoft FabricBase de dados SQL no Microsoft Fabric

O tipo de dados espaciais geográficos, geografia, representa dados em um sistema de coordenadas de Terra redonda. Esse tipo é implementado como um tipo de dados CLR (Common Language Runtime) do .NET no SQL Server. O tipo de dados de geografia do SQL Server armazena dados elípticos (terra redonda), como coordenadas de latitude e longitude do GPS.

O tipo de geografia é predefinido e está disponível em cada base de dados. Você pode criar colunas de tabela de tipo geografia e operar em dados geográficos da mesma maneira que usaria outros tipos fornecidos pelo sistema.

Criando ou construindo uma nova instância de geografia

Criando uma nova instância geográfica a partir de uma instância existente

O tipo de dados geography fornece vários métodos internos que você pode usar para criar novas instâncias geográficas com base em instâncias existentes.

Para criar um buffer em torno de uma geografia
STBuffer (tipo de dados geográficos)

Para criar um limite em torno de uma geografia, permitindo uma tolerância
BufferWithTolerance (tipo de dados geográficos)

Para criar uma geografia a partir da interseção de duas instâncias geográficas
STIntersection (tipo de dados geográficos)

Criar uma geografia a partir da união de duas instâncias geográficas
STUnion (tipo de dados geográficos)

Criar uma geografia a partir dos pontos onde uma geografia não se sobrepõe a outra
STDifference (tipo de dados geográficos)

Construindo uma ocorrência de geografia a partir de Well-Known entrada de texto

O tipo de dados geográficos fornece vários métodos internos que geram uma geografia a partir da representação WKT do Open Geospatial Consortium (OGC). O padrão WKT é uma cadeia de texto que permite que dados geográficos sejam trocados em forma textual.

Para construir qualquer tipo de instância geográfica a partir da entrada WKT
STGeomFromText (tipo de dados geográficos)

Analisar (tipo de dados geográficos)

Para construir uma instância de ponto de geografia a partir da entrada WKT
STPointFromText (tipo de dados geográficos)

Para construir uma instância geográfica do MultiPoint a partir da entrada WKT
STMPointFromText (tipo de dados geográficos)

Para construir uma instância LineString geográfica a partir da entrada WKT
STLineFromText (tipo de dados geográficos)

Para construir uma instância de geografia MultiLineString a partir da entrada de WKT
STMLineFromText (tipo de dados geográficos)

Para construir uma instância de Polígono geográfico a partir da entrada WKT
STPolyFromText (tipo de dados geográficos)

Para construir uma instância de geografia MultiPolygon a partir da entrada WKT
STMPolyFromText (tipo de dados geográficos)

Para construir uma instância Geography GeometryCollection a partir da entrada WKT
STGeomCollFromText (tipo de dados geográficos)

Construindo uma instância de geografia a partir de entrada binária Well-Known

WKB é um formato binário especificado pelo OGC que permite que dados geográficos sejam trocados entre um aplicativo cliente e um banco de dados SQL. As seguintes funções aceitam a entrada WKB para construir instâncias geográficas:

Para construir qualquer tipo de instância geográfica a partir da entrada WKB
STGeomFromWKB (tipo de dados geográficos)

Para construir uma instância de ponto geográfico a partir da entrada WKB
STPointFromWKB (tipo de dados geográficos)

Para construir uma instância geográfica do MultiPoint a partir da entrada WKB
STMPointFromWKB (tipo de dados geográficos)

Para construir uma instância de LineString de geografia a partir da entrada WKB
STLineFromWKB (tipo de dados geográficos)

Para construir uma instância de geografia MultiLineString a partir do WKB
STMLineFromWKB (tipo de dados geográficos)

Para construir uma instância de Polígono geográfico a partir da entrada WKB
STPolyFromWKB (tipo de dados geográficos)

Para construir uma instância de MultiPolygon de geografia a partir da entrada WKB
STMPolyFromWKB (tipo de dados geográficos)

Para construir uma instância geography GeometryCollection a partir de uma entrada WKB
STGeomCollFromWKB (tipo de dados geográficos) STGeomCollFromWKB (tipo de dados geográficos)

Construindo uma instância de geografia a partir da entrada de texto GML

O tipo de dados geography fornece um método que gera uma instância de geography a partir de GML, uma representação XML de uma instância de geography. O SQL Server dá suporte a um subconjunto de GML.

Para obter mais informações sobre Geography Markup Language, consulte a Especificação OGC: OGC Specifications, Geography Markup Language.

Para construir qualquer tipo de instância geográfica a partir da entrada GML
GeomFromGML (tipo de dados geográficos)

Retornar Texto Conhecido e Binário Conhecido de uma instância de geografia

Você pode usar os seguintes métodos para retornar o formato WKT ou WKB de uma instância geográfica:

Para retornar a representação WKT de uma instância geográfica
STAsText (tipo de dados geográficos)

ToString (tipo de dados geográficos)

Para retornar a representação WKT de uma instância geográfica, incluindo quaisquer valores Z e M
AsTextZM (tipo de dados geográficos)

Para retornar a representação WKB de uma instância geográfica
STAsBinary (tipo de dados geográficos)

Para retornar uma representação GML de uma instância geográfica
AsGml - tipo de dados geográficos

Consultar as propriedades e comportamentos de instâncias geográficas

Todas as instâncias geográficas têm várias propriedades que podem ser recuperadas por meio de métodos fornecidos pelo SQL Server. Os tópicos a seguir definem as propriedades e comportamentos dos tipos de geografia e os métodos para consultar cada um.

Informações sobre validade, tipo de instância e GeometryCollection

Depois que uma instância de geography é construída, você pode usar os seguintes métodos para retornar o tipo de instância ou, se for uma instância de GeometryCollection , retornar uma instância de geography específica.

Para retornar o tipo de instância de uma geografia
STGeometryType (tipo de dados geográficos)

Para determinar se uma geografia é um determinado tipo de instância:
InstanceOf (tipo de dados geográficos)

Para determinar se uma instância de geografia está bem formada para o seu tipo de instância:
STNumGeometries (tipo de dados geográficos)

Para retornar uma geografia específica em uma instância GeometryCollection
STGeometryN (tipo de dados geográficos) STGeometryN (tipo de dados geográficos)

Número de pontos

Todas as instâncias geográficas não vazias são compostas por pontos. Estes pontos representam as coordenadas de latitude e longitude da Terra nas quais as instâncias geográficas são desenhadas. A geografia do tipo de dados fornece vários métodos internos para consultar os pontos de uma instância.

Para retornar o número de pontos que compõem uma instância
STNumPoints (tipo de dados geográficos)

Para retornar um ponto específico em uma instância
STPointN (tipo de dados de geometria)

Para retornar o ponto inicial de uma instância
STStartPoint (tipo de dados geográficos)

Para retornar o ponto de extremidade de uma instância
STEndPoint (tipo de dados geográficos)

Dimension

Uma instância de geografia não vazia pode ser 0-, 1-, ou 2-dimensional. Instâncias de geografia de dimensão zero, como Point e MultiPoint, não têm comprimento ou área. Objetos unidimensionais, como LineString, CircularString, CompoundCurve e MultiLineString, têm comprimento. Instâncias bidimensionais, como Polygon, CurvePolygon e MultiPolygon, têm área e comprimento. Instâncias vazias relatam uma dimensão de -1 e uma GeometryCollection relata a dimensão máxima de seu conteúdo.

Para retornar a dimensão de uma instância
STDimension (tipo de dados geográficos)

Para retornar o comprimento de uma instância
STLength (tipo de dados geográficos)

Para retornar a área de uma instância
STArea (tipo de dados geográficos)

Empty

Uma instância degeografia vazia não tem pontos. O comprimento das ocorrências vazias de LineString, CircularString, CompoundCurve e MultiLineString é 0. A área de instâncias vazias de Polygon, CurvePolygon e MultiPolygon é 0.

Para determinar se uma instância está vazia
STIsEmpty (tipo de dados geográficos)

Closure

Uma instância degeografia fechada é uma figura cujos pontos iniciais e finais são os mesmos. As instâncias do polígono são consideradas fechadas. Instâncias de ponto não são fechadas.

Um anel é uma instância LineString simples e fechada.

Para determinar se uma instância está fechada
STIsClosed (tipo de dados geográficos)

Para retornar o número de anéis em uma ocorrência de polígono
NumRings (tipo de dados geográficos)

Para retornar um anel especificado de uma instância de geografia
RingN (tipo de dados geográficos)

ID de referência espacial (SRID)

O ID de referência espacial (SRID) é um identificador que especifica em qual sistema de coordenadas elípsoidais a ocorrência geográfica está representada. Duas instâncias geográficas com SRIDs diferentes não podem ser comparadas.

Para definir ou retornar o SRID de uma instância
STSrid (tipo de dados geográficos)

Esta propriedade pode ser modificada.

Determinando relações entre instâncias geográficas

O tipo de dados geography fornece muitos métodos internos que você pode usar para determinar relações entre duas instâncias geográficas.

Para determinar se duas instâncias compreendem o mesmo conjunto de pontos
STEquals (tipo de dados de geometria)

Para determinar se duas instâncias estão separadas
STDisjoint (tipo de dados de geometria)

Para determinar se duas instâncias se cruzam
STIntersects (tipo de dados de geometria)

Para determinar o ponto ou pontos onde duas instâncias se cruzam
STIntersection (tipo de dados geográficos)

Para determinar a menor distância entre pontos em duas instâncias geográficas
STDistance (tipo de dados de geometria)

Para determinar a diferença de pontos entre duas instâncias geográficas
STDifference (tipo de dados geográficos)

Para derivar a diferença simétrica, ou pontos únicos, de uma instância geográfica em comparação com outra instância
STSymDifference (tipo de dados geográficos)

as instâncias de geografia devem utilizar um SRID suportado

O SQL Server oferece suporte a SRIDs com base nos padrões EPSG. Um SRID com suporte do SQL Server para instâncias geográficas deve ser usado ao executar cálculos ou usar métodos com dados espaciais geográficos. O SRID deve corresponder a um dos SRIDs exibidos na exibição de catálogo sys.spatial_reference_systems . Como mencionado anteriormente, quando você executa cálculos em seus dados espaciais usando o tipo de dados geográficos , seus resultados dependerão de qual elipsoide foi usado na criação de seus dados, pois a cada elipsoide é atribuído um identificador de referência espacial (SRID) específico.

O SQL Server usa o SRID padrão de 4326, que mapeia para o sistema de referência espacial WGS 84, ao utilizar métodos em instâncias de geografia. Se você usar dados de um sistema de referência espacial diferente do WGS 84 (ou SRID 4326), precisará determinar o SRID específico para seus dados geográficos.

Remarks

Os tipos de geometria e geografia não podem ser utilizados como colunas de tabela no ponto de extremidade SQL Analytics do Microsoft Fabric ou no Warehouse do Microsoft Fabric.

Examples

Os exemplos a seguir mostram como adicionar e consultar dados geográficos.

Exemplo A.

Este exemplo cria uma tabela com uma coluna de identidade e uma geography coluna GeogCol1. Uma terceira coluna processa a geography coluna em sua representação Open Geospatial Consortium (OGC) Well-Known Text (WKT) e usa o STAsText() método. Duas linhas são então inseridas: uma linha contém uma LineString instância de geography, e uma linha contém uma Polygon instância.

IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL   
DROP TABLE dbo.SpatialTable;  
GO  
  
CREATE TABLE SpatialTable   
  ( id int IDENTITY (1,1),  
    GeogCol1 geography,   
    GeogCol2 AS GeogCol1.STAsText()
   );  
GO  
  
INSERT INTO SpatialTable (GeogCol1)  
VALUES (geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326));  
  
INSERT INTO SpatialTable (GeogCol1)  
VALUES (geography::STGeomFromText('POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326));  
GO  

Exemplo B.

Este exemplo usa o STIntersection() método para retornar os pontos onde as duas instâncias inseridas geography anteriormente se cruzam.

DECLARE @geog1 geography;  
DECLARE @geog2 geography;  
DECLARE @result geography;  
  
SELECT @geog1 = GeogCol1 FROM SpatialTable WHERE id = 1;  
SELECT @geog2 = GeogCol1 FROM SpatialTable WHERE id = 2;  
SELECT @result = @geog1.STIntersection(@geog2);  
SELECT @result.STAsText();