Partilhar via


Criar, construir e consultar instâncias de geometria

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

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

O tipo de dados de geometry (planar) que tem suporte do SQL Server está de acordo com os Recursos Simples do Open Geospatial Consortium (OGC) para o SQL Specification 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.

Neste tópico

  • Criando ou construindo uma nova instância de geometria

    • Criando uma nova instância de geometria de uma instância existente

    • Construindo uma instância de geometria da entrada de texto conhecida

    • Construindo uma instância de geometria da entrada binária conhecida

    • Construindo uma instância de geometria de entrada de texto GML

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

  • Consultando as propriedades e comportamentos de instâncias de geometria

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

    • Número de pontos

    • Dimensão

    • Vazio

    • Limite, interior e exterior

    • Envelope

    • Fechamento

    • SRID (Spatial Reference ID)

  • Determinando relações entre instâncias de geometria

  • Padrão de instâncias de geometria para SRID zero

  • Exemplos

Criando ou construindo uma nova instância de geometria

Criando uma nova instância de geometria 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 de geometry baseadas em instâncias existentes.

[TOP]

Construindo uma instância de geometria da entrada de texto conhecida

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

[TOP]

Construindo uma instância de geometria da entrada binária conhecida

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

[TOP]

Construindo uma instância de geometria de entrada de texto GML

O tipo de dados de geometria fornece um método que gera uma instância de 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.

[TOP]

Retornando 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:

[TOP]

Consultando as propriedades e comportamentos de instâncias de geometria

Todas as instâncias de geometry 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.

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

Quando uma instância de 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 de geometry específica.

[TOP]

Número de pontos

Todas as instâncias de geometry não vazias são compostas de 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

  • Para retornar um ponto arbitrário que está em uma instância
    STPointOnSurface

  • Para retornar o ponto inicial de uma instância
    STStartPoint

  • Para retornar o ponto de extremidade de uma instância
    STEndpoint

  • 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

  • Para retornar o ponto do centro geométrico de uma instância de Polygon, CurvePolygon ou MultiPolygon
    STCentroid

[TOP]

Dimensão

Uma instância geometry não vazia pode ser zero, uni ou bidimensional. geometries de dimensão zero, como Point e MultiPoint, não têm nenhum 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 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

  • Para retornar o comprimento de uma instância
    STLength

  • Para retornar a área de uma instância
    STArea

[TOP]

Vazio

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

  • Para determinar se uma instância está vazia
    STIsEmpty.

[TOP]

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çãoObservação

Geometrias vazias são sempre simples.

  • Para determinar se uma instância é simples
    STIsSimple.

[TOP]

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.

O Limite é definido pelo OGC da seguinte maneira:

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

  • Limites de LineString e MultiLineString são formados pelos pontos iniciais e de extremidade removendo os que ocorrem um número par de vezes.

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

[TOP]

Envelope

O envelope de uma instância de 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

[TOP]

Fechamento

Uma instância closed geometry é uma figura cujos pontos inicial e final são os mesmos. As instâncias Polygon são consideradas fechadas. As instâncias Point não estão fechadas.

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

  • Para determinar se uma instância está fechada
    STIsClosed

  • Para determinar se uma instância é um anel
    STIsRing

  • Para retornar o anel exterior de uma instância de Polygon
    STExteriorRing

  • Para retornar o número de anéis interiores em um Polígono
    STNumInteriorRing

  • Para retornar um anel interior especificado de um Polígono
    STInteriorRingN

[TOP]

SRID (Spatial Reference ID)

A ID de referência espacial (SRID) é 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

Essa propriedade pode ser modificada.

[TOP]

Determinando 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 de geometry.

  • Para determinar se duas instâncias abrangem o mesmo conjunto de pontos
    STEquals

  • Para determinar se duas instâncias são não contíguas
    STDisjoint

  • Para determinar se há interseção entre duas instâncias
    STIntersects

  • Para determinar se duas instâncias se tocam
    STTouches

  • Para determinar se duas instâncias se sobrepõem
    STOverlaps

  • Para determinar se duas instâncias se cruzam
    STCrosses

  • Para determinar se uma instância está dentro de outra
    STWithin

  • Para determinar se uma instância contém outra
    STContains

  • Para determinar se uma instância sobrepõe outra
    STOverlaps

  • Para determinar se duas instâncias estão espacialmente relacionadas
    STRelate

  • Para determinar a distância mais curta entre pontos em duas instâncias de geometria
    STDistance

[TOP]

Padrão de instâncias de geometria para SRID zero

O padrão de SRID para instâncias de geometry 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 não definido nos cálculos de métodos de tipo de dados de geometry, o Mecanismo de Banco de Dados do SQL Server usa SRID 0.

Exemplos

Os dois exemplos a seguir mostram como adicionar e consultar dados de geometria.

  • O primeiro 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 geometry e uma linha que contém uma instância 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
    
  • O segundo exemplo usa o método STIntersection() para retornar os pontos onde 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();
    

[TOP]

Consulte também

Conceitos

Dados espaciais (SQL Server)