Crear, construir y consultar instancias de Geometry

El tipo de datos espacial plano geometry representa los datos en un sistema de coordenadas euclidiano (plano). Implementan este tipo como un tipo de datos en SQL Server de Common Language Runtime (CLR).

El tipo geometry está predefinido y está disponible en cada base de datos. Puede crear columnas de tabla de tipo geometry y operar con los datos geometry de la misma manera que con los demás tipos CLR.

El tipo de datos geometry (plano) admitido por SQL Server cumple con las características simples de Geospatial Consortium (OGC) para la especificación SQL versión 1.1.0.

Para obtener más información acerca de las especificaciones de OGC, vea:

SQL Server admite un subconjunto del estándar GML 3.1 existente que se define en el esquema siguiente: https://schemas.microsoft.com/sqlserver/profiles/gml/SpatialGML.xsd.

En este tema

  • Crear o construir una instancia de geometry

    • Crear una instancia de geometry a partir de una instancia existente

    • Construir una instancia de geometry a partir de datos Well-Known Text

    • Construir una instancia de geometry a partir de datos Well-Known Binary

    • Para construir una instancia de geometry a partir de datos de texto GML

  • Devolver Well-Known Text y Well-Known Binary a partir una instancia de geometry

  • Consultar propiedades y comportamientos de instancias de geometry

    • Validez, tipo de instancia e información de GeometryCollection

    • Número de puntos

    • Dimensión

    • Vacío

    • Límite, interior y exterior

    • Envolvente

    • Clausura

    • Identificador de referencia espacial (SRID)

  • Determinar las relaciones entre instancias de geometry

  • Las instancias de geometry tienen como valor predeterminado SRID cero

  • Ejemplos

Crear o construir una instancia de geometry

Crear una instancia de geometry a partir de una instancia existente

El tipo de datos geometry proporciona numerosos métodos integrados que puede usar para crear nuevas instancias de geometry basadas en instancias existentes.

[ARRIBA]

Construir una instancia de geometry a partir de datos Well-Known Text

El tipo de datos geometry proporciona varios métodos integrados que generan un objeto geometry a partir de la representación WKT de Open Geospatial Consortium (OGC). La norma WKT consiste en una cadena de texto que permite intercambiar datos de geometría de forma textual.

[ARRIBA]

Construir una instancia de geometry a partir de datos Well-Known Binary

WKB es un formato binario especificado por Open Geospatial Consortium (OGC) que permite intercambiar datos de tipo geometry entre una aplicación cliente y una base de datos SQL. Las funciones siguientes aceptan datos WKB para construir las instancias de geometry:

[ARRIBA]

Para construir una instancia de geometry a partir de datos de texto GML

El tipo de datos geometry proporciona un método que genera una instancia de geometry a partir de GML (lenguaje de marcado de geografía), una representación XML de objetos geométricos. SQL Server admite un subconjunto de GML.

[ARRIBA]

Devolver Well-Known Text y Well-Known Binary a partir una instancia de geometry

Puede usar los métodos siguientes para devolver el formato WKT o WKB de una instancia de geometry:

[ARRIBA]

Consultar propiedades y comportamientos de instancias de geometry

Todas las instancias de geometry tienen varias propiedades que se pueden recuperar a través de los métodos que SQL Server proporciona. Los temas siguientes definen las propiedades y los comportamientos de tipos geometry, y los métodos para consultar cada uno.

Validez, tipo de instancia e información de GeometryCollection

Una vez construida una instancia de geometry, puede usar los métodos siguientes para determinar si su formato es correcto, devolver el tipo de instancia o, si es una instancia de una colección, devolver una instancia de geometry específica.

[ARRIBA]

Número de puntos

Todas las instancias de geometry no vacías están compuestas de puntos. Estos puntos representan las coordenadas X e Y del plano en el cual se dibujan los objetos geometry. El tipo de datos de geometry proporciona numerosos métodos integrados para consultar los puntos de una instancia.

[ARRIBA]

Dimensión

Una instancia de geometry no vacía puede ser no dimensional, unidimensional o bidimensional. geometries no dimensionales, como Point y MultiPoint, no tienen ninguna longitud ni área. Los objetos unidimensionales, como LineString, CircularString, CompoundCurve y MultiLineString, tienen longitud. Las instancias bidimensionales, como Polygon, CurvePolygon y MultiPolygon, tienen área y longitud. Las instancias vacías informarán de una dimensión de -1 y GeometryCollection informará de un área dependiente de los tipos de su contenido.

  • Devolver la dimensión de una instancia
    STDimension

  • Devolver la longitud de una instancia
    STLength

  • Devolver el área de una instancia
    STArea

[ARRIBA]

Vacío

Una instancia vacía geometry no tiene ningún punto. La longitud de instancias de LineString, CircularString, CompoundCurve y MultiLineString es cero. El área de las instancias de Polygon, CurvePolygon y MultiPolygon vacías es 0.

  • Para determinar si una instancia está vacía
    STIsEmpty.

[ARRIBA]

Simple

Para que una geometry de la instancia sea simple, debe cumplir estos requisitos:

  • Cada figura de la instancia no debe cortarse, excepto en sus extremos.

  • Ninguna de las dos figuras de la instancia puede cortarse en un punto que no esté en ambos de sus límites.

[!NOTA]

Los objetos geometry vacíos son siempre simples.

  • Determinar si una instancia es simple
    STIsSimple.

[ARRIBA]

Límite, interior y exterior

El interior de una instancia de geometry es el espacio ocupado por la instancia y el exterior es el espacio no ocupado.

El límite lo define OGC de la siguiente manera:

  • La instancias de Point y MultiPoint no tienen un límite.

  • Los límites de LineString y MultiLineString están formados por los puntos de inicio y de fin, quitando los que se producen un número par de veces.

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

El límite de una instancia de Polygon o MultiPolygon es el conjunto de sus anillos.

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();

[ARRIBA]

Envolvente

La envolvente de una instancia de geometry , también conocida como el cuadro de límite, es el rectángulo alineado con el eje formado por las coordenadas mínimas y máximas (X, Y) de la instancia.

  • Para devolver la envolvente de una instancia
    STEnvelope

[ARRIBA]

Clausura

Una instancia cerrada geometry es una figura cuyos puntos de inicio y de finalización son los mismos. Las instancias Polygon se consideran cerradas. Las instancias Point no son cerradas.

Un anillo es una instancia de LineString simple y cerrada.

  • Para determinar si una instancia está cerrada
    STIsClosed

  • Para determinar si una instancia es un anillo
    STIsRing

  • Para devolver el anillo exterior de una instancia de Polygon
    STExteriorRing

  • Para devolver el número de anillos interiores de un Polygon
    STNumInteriorRing

  • Devolver un anillo interior especificado de un Polygon
    STInteriorRingN

[ARRIBA]

Identificador de referencia espacial (SRID)

El identificador de referencia espacial (SRID) es un identificador que especifica en qué sistema de coordenadas está representada la instancia de geometry. Dos instancias con SRID diferentes son incomparables.

  • Para establecer o devolver el SRID de una instancia
    STSrid

Esta propiedad se puede modificar.

[ARRIBA]

Determinar las relaciones entre instancias de geometry

El tipo de datos geometry proporciona muchos métodos integrados que puede usar para determinar las relaciones entre dos instancias de geometry.

  • Para determinar si dos instancias comprenden el mismo conjunto de puntos
    STEquals

  • Para determinar si dos instancias no son contiguas
    STDisjoint

  • Para determinar si dos instancias contienen puntos que forman una intersección
    STIntersects

  • Para determinar si dos instancias se tocan
    STTouches

  • Para determinar si dos instancias se superponen
    STOverlaps

  • Para determinar si dos instancias se cruzan
    STCrosses

  • Para determinar si una instancia está dentro de otra
    STWithin

  • Para determinar si una instancia contiene a otra
    STContains

  • Para determinar si una instancia se superpone a otra
    STOverlaps

  • Para determinar si existe una relación espacial entre dos instancias
    STRelate

  • Para determinar la distancia más corta entre los puntos de dos objetos geometry
    STDistance

[ARRIBA]

Las instancias de geometry tienen como valor predeterminado SRID cero

El SRID predeterminado para instancias de geometry en SQL Server es 0. Con los datos espaciales de geometry, no se necesita el SRID específico de la instancia espacial para realizar cálculos; por tanto, las instancias pueden encontrarse en un espacio plano indefinido. Para indicar el espacio plano indefinido en los cálculos de métodos de tipo de datos geometry, el Motor de base de datos de SQL Server usa SRID 0.

Ejemplos

En los dos ejemplos siguientes se muestra cómo agregar y consultar datos de geometry.

  • En el primer ejemplo se crea una tabla con una columna de identidad y una columna de tipo geometry, GeomCol1. Una tercera columna representa la columna de tipo geometry en su representación Well-Known Text (WKT) de Open Geospatial Consortium (OGC) y utiliza el método STAsText(). A continuación, se insertan dos filas: una que contiene una instancia LineString de geometry y una que contiene una instancia 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
    
  • En el segundo ejemplo se usa el método STIntersection() para devolver los puntos de intersección de las dos instancias de geometry insertadas previamente.

    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();
    

[ARRIBA]

Vea también

Conceptos

Datos espaciales (SQL Server)