Partilhar via


Criar, construir e consultar instâncias de geometria

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Ponto de extremidade de análise de SQL no Microsoft Fabric Warehouse no Microsoft Fabric Banco de dados SQL no Microsoft Fabric

O tipo de dados espaciais planares, geometry, representa dados em um sistema de coordenadas euclidiano (plano). Esse tipo é implementado como um tipo de dados CLR (Common Language Runtime) no SQL Server.

O tipo geometry é predefinido e está disponível em cada banco de dados. É possível criar colunas de tabelas do tipo geometry e operar com dados geometry da mesma maneira como outros tipos CLR são usados.

O tipo de dados de geometria (planar) suportado pelo SQL Server está em conformidade com os recursos simples do Open Geospatial Consortium (OGC) para a especificação SQL versão 1.1.0.

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

O SQL Server oferece suporte a um subconjunto do padrão GML 3.1 existente, que é definido no seguinte esquema: https://schemas.microsoft.com/sqlserver/profiles/gml/SpatialGML.xsd.

Criar ou construir uma nova instância de geometria

Criar uma nova instância de geometria a partir de uma instância existente

O tipo de dados geometry fornece vários métodos internos que podem ser usados para criar novas instâncias geometry baseadas em instâncias existentes.

Para criar um buffer em torno de uma geometria
STBuffer (tipo de dados geometry)

BufferWithTolerance (tipo de dados geometry)

Para criar uma versão simplificada de uma geometria
Reduce (tipo de dados geometry)

Para cria o casco convexo de uma geometria
STConvexHull (tipo de dados geometry)

Para criar uma geometria da interseção de duas geometrias
STIntersection (tipo de dados geometry)

Para criar uma geometria da união de duas geometrias
STUnion (tipo de dados geometry)

Para criar uma geometria dos pontos onde uma geometria não sobrepõe outra
STDifference (tipo de dados geometry)

Para criar uma geometria dos pontos onde duas geometrias não se sobrepõem
STSymDifference (tipo de dados geometry)

Para criar uma instância de Point arbitrária que está em uma geometria existente
STPointOnSurface (tipo de dados geometry)

Construir uma instância de geometria a partir da entrada de texto conhecido

O tipo de dados geometry fornece vários métodos internos que geram uma geometria da representação WKT do OGC (Open Geospatial Consortium). O padrão WKT é uma cadeia de caracteres de texto que permite que dados de geometria sejam trocados em formulário textual.

Para construir qualquer tipo de instância de geometria de entrada WKT
STGeomFromText (tipo de dados geometry)

Parse (tipo de dados geometry)

Para construir uma instância de Point de geometria de entrada WKT
STPointFromText (tipo de dados geometry)

Para construir uma instância de MultiPoint de geometria de entrada WKT
STMPointFromText (tipo de dados geometry)

Para construir uma instância de LineString de geometria de entrada WKT
STLineFromText (tipo de dados geometry)

Para construir uma instância de MultiLineString de geometria de entrada WKT
STMLineFromText (tipo de dados geometry)

Para construir uma instância de Polygon de geometria de entrada WKT
STPolyFromText (tipo de dados geometry)

Para construir uma instância de MultiPolygon de geometria de entrada WKT
STMPolyFromText (tipo de dados geometry)

Para construir uma instância de GeometryCollection de geometria de entrada WKT
STGeomCollFromText (tipo de dados geometry)

Construir uma instância de geometria a partir da entrada Binária Conhecida

O WKB é um formato binário especificado pelo Open Geospatial Consortium (OGC) que permite que dados de geometria sejam trocados entre um aplicativo cliente e um banco de dados SQL. As seguintes funções aceitam entrada WKB para construir geometrias:

Para construir qualquer tipo de instância de geometria de entrada WKB
STGeomFromWKB (tipo de dados geometry)

Para construir uma instância de Point de geometria de entrada WKB
STPointFromWKB (tipo de dados geometry)

Para construir uma instância de MultiPoint de geometria de entrada WKB
STMPointFromWKB (tipo de dados de geometry)

Para construir uma instância de LineString de geometria de entrada WKB
STLineFromWKB (tipo de dados geometry)

Para construir uma instância de MultiLineString de geometria de entrada WKB
STMLineFromWKB (tipo de dados geometry)

Para construir uma instância de Polygon de geometria de entrada WKB
STPolyFromWKB (tipo de dados geometry)

Para construir uma instância de MultiPolygon de geometria de entrada WKB
STMPolyFromWKB (tipo de dados geometry)

Para construir uma instância de GeometryCollection de geometria de entrada WKB
STGeomCollFromWKB (tipo de dados geometry)

Construir uma instância de geometria a partir da entrada de texto GML

O tipo de dados geometry fornece um método que gera uma instância geometry de GML, uma representação XML de uma instância de objetos de geometria. O SQL Server oferece suporte a um subconjunto de GML.

Para construir qualquer tipo de instância de geometria de entrada GML
GeomFromGml (tipo de dados geometry)

Retornar texto conhecido e binário conhecido de uma instância de geometria

É possível usar os seguintes métodos para retornar o formato WKT ou WKB de uma instância de geometry :

Para retornar a representação WKT de uma instância de geometria
STAsText (tipo de dados geometry)

ToString (tipo de dados geometry)

Para retornar a representação WKT de uma instância de geometria incluindo qualquer valor Z e M
AsTextZM (tipo de dados geometry)

Para retornar a representação WKB de uma instância de geometria
STAsBinary (tipo de dados geometry)

Para retornar uma representação GML de uma instância de geometria
AsGml (tipo de dados geometry)

Consultar as propriedades e comportamentos de instâncias de geometria

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

Validade, tipo de instância e informações de GeometryCollection

Quando uma instância geometry é construída, é possível usar os seguintes métodos para determinar se ela está bem formada, para retornar o tipo da instância ou, se ela for uma instância de coleção, retornar uma instância geometry específica.

Para retornar o tipo de instância de uma geometria
STGeometryType (tipo de dados geometry)

Para determinar se uma geometria é um determinado tipo de instância
InstanceOf (tipo de dados geometry)

Para determinar se uma instância de geometria está bem formada para seu tipo de instância
STIsValid (tipo de dados geometry)

Para converter uma instância de geometria em uma instância de geometria bem formada com um tipo de instância
MakeValid (tipo de dados geometry)

Para retornar o número de geometrias em uma instância de coleção de geometrias
STNumGeometries (tipo de dados geometry)

Para retornar uma geometria específica em uma instância coleção de geometrias
STGeometryN (Tipo de Dados de geometria) STGeometryN (Tipo de Dados de geometria)

Número de pontos

Todas as instâncias de geometry não vazias são compostas por pontos. Esses pontos representam as coordenadas X e Y do plano no qual as geometrias são obtidas. geometry fornece vários métodos internos de consulta de pontos de uma instância.

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

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

Para retornar um ponto arbitrário que está em uma instância
STPointOnSurface (tipo de dados geometry)

Para retornar o ponto inicial de uma instância
STStartPoint (tipo de dados geometry)

Para retornar o ponto de extremidade de uma instância
STEndpoint (tipo de dados geometry)

Para retornar a coordenada X de uma instância de Point
STX (tipo de dados geometry)

Para retornar a coordenada Y de uma instância de Point
STY (tipo de dados geometry)

Para retornar o ponto do centro geométrico de uma instância de Polygon, CurvePolygon ou MultiPolygon
STCentroid (tipo de dados geometry)

Dimensão

Uma instância geometry não vazia pode ser zero, uni ou bidimensional. Instâncias geographycom dimensional zero, como Point e MultiPoint, não têm tamanho nem área. Objetos unidimensionais, como LineString, CircularString, CompoundCurvee MultiLineString, têm comprimento. Instâncias bidimensionais, como Polygon, CurvePolygone MultiPolygon, têm área e comprimento. Instâncias vazias relatarão uma dimensão de -1 e uma GeometryCollection relatará uma área dependente dos tipos de seu conteúdo.

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

Para retornar o comprimento de uma instância
STLength (tipo de dados geometry)

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

Vazio

Uma instância emptygeometry não tem pontos. O comprimento de instâncias LineString, CircularString, CompoundCurvee MultiLineString é zero. A área de instâncias de Polygon, CurvePolygone MultiPolygon vazias é 0.

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

Simples

Para que uma geometry da instância seja simples, ela deve atender a estes dois requisitos:

  • Não deve haver interseção de nenhuma figura da instância consigo mesma, exceto em seus pontos de extremidade.

  • Não pode haver nenhuma interseção entre duas figuras da instância em nenhum ponto que não esteja nos seus dois limites.

Observação

Geometrias vazias são sempre simples.

Para determinar se uma instância é simples
STIsSimple (tipo de dados de geometria).

Limite, interior e exterior

O interior de uma instância geometry é o espaço ocupado pela instância e o exterior é o espaço não ocupado por ela.

OLimite é definido pelo OGC da seguinte maneira:

  • Instâncias dePoint e MultiPoint não têm um limite.

  • Os limites deLineString e MultiLineString boundaries are formed by the start points e end points, removing those that occur an even number of times.

DECLARE @g geometry;  
SET @g = geometry::Parse('MULTILINESTRING((0 1, 0 0, 1 0, 0 1), (1 1, 1 0))');  
SELECT @g.STBoundary().ToString();  

O limite de uma instância de Polygon ou MultiPolygon é o conjunto de seus anéis.

DECLARE @g geometry;  
SET @g = geometry::Parse('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1))');  
SELECT @g.STBoundary().ToString();  

Para retornar o limite de uma instância
STBoundary (tipo de dados geometry)

Envelope

O envelope de uma instância geometry , também conhecido como a caixa delimitadora, é o retângulo alinhado com o eixo formado pelas coordenadas máxima e mínima (X,Y) da instância.

Para retornar o envelope de uma instância
STEnvelope (tipo de dados geometry)

Fechamento

Uma instância closedgeometry é uma figura cujos pontos inicial e final são os mesmos. As instânciasPolygon são consideradas fechadas. As instânciasPoint não estão fechadas.

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

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

Para determinar se uma instância é um anel
STIsRing (tipo de dados geometry)

Para retornar o anel exterior de uma instância de Polygon
STExteriorRing (tipo de dados geometry)

Para retornar o número de anéis interiores em um Polígono
STNumInteriorRing (tipo de dados geometry)

Para retornar um anel interior especificado de um Polígono
STInteriorRingN (tipo de dados geometry)

ID de referência espacial (SRID)

A SRID (ID de referência espacial) é um identificador que especifica o sistema de coordenadas no qual a instância geometry é representada. Duas instâncias com SRIDs diferentes são incomparáveis.

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

Observação

Essa propriedade pode ser modificada.

Determinar relações entre instâncias de geometria

O tipo de dados geometry fornece vários métodos internos que podem ser usados para determinar relações entre duas instâncias geometry .

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

Para determinar se duas instâncias são não contíguas
STDisjoint (tipo de dados geometry)

Para determinar se há interseção entre duas instâncias
STIntersects (tipo de dados geometry)

Para determinar se duas instâncias se tocam
STTouches (tipo de dados geometry)

Para determinar se duas instâncias se sobrepõem
STOverlaps (tipo de dados geometry)

Para determinar se duas instâncias se cruzam
STCrosses (tipo de dados geometry)

Para determinar se uma instância está dentro de outra
STWithin (tipo de dados geometry)

Para determinar se uma instância contém outra
STContains (tipo de dados geometry)

Para determinar se uma instância sobrepõe outra
STOverlaps (tipo de dados geometry)

Para determinar se duas instâncias estão espacialmente relacionadas
STRelate (tipo de dados geometry)

Para determinar a distância mais curta entre pontos em duas instâncias de geometria
STDistance (tipo de dados geometry)

instâncias de geometria Padrão para zero SRID

O SRID padrão para instâncias de geometria no SQL Server é 0. Com dados espaciais de geometry , o SRID da instância espacial não é necessário para executar cálculos. Portanto as instâncias podem residir em espaço planar não definido. Para indicar espaço planar indefinido nos cálculos de métodos de tipo de dados de geometria, o Mecanismo de Banco de Dados do SQL Server usa SRID 0.

Comentários

Os tipos de geometria e geografia não podem ser usados como colunas de tabela no ponto de extremidade de análise SQL no Microsoft Fabric ou Warehouse no Microsoft Fabric.

Exemplos

Os dois exemplos a seguir mostram como adicionar e consultar dados geométricos.

Exemplo A.

Este exemplo cria uma tabela com uma coluna de identidade e uma coluna de geometry, GeomCol1. Uma terceira coluna renderiza a coluna de geometry em sua representação WKT (Well-Known Text) do Open Geospatial Consortium (OGC) e usa o método STAsText() . Em seguida, duas linhas são inseridas: uma linha que contém uma instância LineString de geometrye uma linha que contém uma instância de Polygon .

IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL   
DROP TABLE dbo.SpatialTable;  
GO  

CREATE TABLE SpatialTable   
  ( id int IDENTITY (1,1),  
    GeomCol1 geometry,   
    GeomCol2 AS GeomCol1.STAsText() 
  );  
GO  

INSERT INTO SpatialTable (GeomCol1)  
VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0));  

INSERT INTO SpatialTable (GeomCol1)  
VALUES (geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0));  
GO  

Exemplo B.

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

DECLARE @geom1 geometry;  
DECLARE @geom2 geometry;  
DECLARE @result geometry;  

SELECT @geom1 = GeomCol1 FROM SpatialTable WHERE id = 1;  
SELECT @geom2 = GeomCol1 FROM SpatialTable WHERE id = 2;  
SELECT @result = @geom1.STIntersection(@geom2);  
SELECT @result.STAsText();