Compartir a través de


Crear, construir y consultar instancias de geometría

El tipo de datos espaciales planar, geometry, representa los datos en un sistema de coordenadas euclidiana (plana). Este tipo se implementa como un tipo de datos de Common Language Runtime (CLR) en SQL Server.

El geometry tipo 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 se usarían otros tipos CLR.

El tipo de datos geometry (planar) admitido por SQL Server se ajusta a la Especificación de Características Simples para SQL del Open Geospatial Consortium (OGC), versión 1.1.0.

Para obtener más información sobre las especificaciones de OGC, consulte lo siguiente:

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.

Creación o construcción de una nueva instancia de geometría

Creación de una nueva instancia de geometría a partir de una instancia existente

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

Para crear un búfer alrededor de una geometría
STBuffer (Tipo de Datos Geometría)

BufferWithTolerance (tipo de datos geometry)

Para crear una versión simplificada de una geometría
Reducir (Tipo de Datos Geometry)

Para crear la envolvente convexa de una geometría
STConvexHull (tipo de datos geometría)

Para crear una geometría a partir de la intersección de dos geometrías
STIntersection (Tipo de datos Geometry)

Para crear una geometría a partir de la unión de dos geometrías
STUnion (tipo de datos Geometry)

Para crear una geometría a partir de los puntos en los que una geometría no se superpone a otra
STDifference (tipo de dato de geometría)

Para crear una geometría a partir de los puntos en los que dos geometrías no se superponen
STSymDifference (tipo de dato geometry)

Para crear una instancia arbitraria de Point que se sitúa sobre una geometría existente
STPointOnSurface (tipo de datos geometría)

Construcción de una instancia de geometría a partir de la entrada de texto Well-Known

El geometry tipo de datos proporciona varios métodos integrados que generan una geometría a partir de la representación WKT de Open Geospatial Consortium (OGC). El estándar WKT es una cadena de texto que permite intercambiar datos de geometría en formato textual.

Para construir cualquier tipo de instancia de geometría desde la entrada WKT
STGeomFromText (tipo de dato de geometría)

Analizar (tipo de datos geometría)

Para construir una instancia de punto de geometría a partir de la entrada WKT
STPointFromText (tipo de datos geometry)

Para construir una instancia de Geometry MultiPoint a partir de la entrada WKT
STMPointFromText (tipo de datos geometría)

Para construir una instancia de la geometría LineString a partir de los datos de entrada WKT
STLineFromText (Geometry Data Type)

Para construir una instancia de MultiLineString de geometría a partir de una entrada WKT
STMLineFromText (tipo de datos géometría)

Para construir una instancia de Geometry Polygon a partir de la entrada WKT
STPolyFromText (tipo de datos geometry)

Para construir una instancia de Geometry MultiPolygon a partir de la entrada WKT
STMPolyFromText (tipo de datos geometría)

Para crear una instancia de GeometryCollection a partir de una entrada WKT
STGeomCollFromText (tipo de datos geométrico)

Construcción de una instancia de geometry a partir de Well-Known entrada binaria

WKB es un formato binario especificado por open Geospatial Consortium (OGC) que permite geometry intercambiar datos entre una aplicación cliente y una base de datos SQL. Las funciones siguientes aceptan la entrada WKB para construir geometrías:

Para construir una instancia de cualquier tipo de geometría a partir de entrada WKB
STGeomFromWKB (tipo de datos geométrico)

Para construir una instancia de geometry Point a partir de la entrada WKB
STPointFromWKB (Geometry Data Type)

Para construir una instancia de Geometry MultiPoint a partir de la entrada WKB
STMPointFromWKB (tipo de datos de geometría)

Para construir una instancia de geometría LineString a partir de una entrada WKB
STLineFromWKB (tipo de datos geometría)

Para construir una instancia de geometría MultiLineString a partir de una entrada WKB
STMLineFromWKB (tipo de datos geometry)

Para construir una instancia de Geometry Polygon a partir de la entrada WKB
STPolyFromWKB (tipo de dato geométrico)

Para construir una instancia de Geometry MultiPolygon a partir de la entrada WKB
STMPolyFromWKB (Geometry, tipo de datos)

Para construir una instancia geometry GeometryCollection a partir de la entrada WKB
STGeomCollFromWKB (tipo de datos geometría)

Construcción de una instancia de geometría a partir de la entrada de texto GML

El geometry tipo de datos proporciona un método que genera una geometry instancia de GML, una representación XML de objetos geométricos. SQL Server admite un subconjunto de GML.

Para construir cualquier tipo de instancia de geometry a partir de la entrada GML
GeomFromGml (tipo de datos geometría)

Devolver texto Well-Known y Well-Known binario desde una instancia de geometry

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

Para devolver la representación WKT de una instancia de geometry
STAsText (tipo de datos Geometry)

ToString (tipo de datos "geometry")

Para devolver la representación WKT de una instancia de geometría, incluidos los valores Z y M
AsTextZM (tipo de datos geometry)

Para obtener la representación WKB de una instancia de geometría
STAsBinary (geometry tipo de datos)

Para devolver una representación GML de una instancia de geometría
AsGml (Tipo de Datos Geometría)

Consultar las propiedades y los comportamientos de las instancias de geometría

Todas las geometry instancias tienen una serie de propiedades que se pueden recuperar a través de métodos que proporciona SQL Server. En los temas siguientes se definen las propiedades y los comportamientos de los tipos de geometría y los métodos para consultar cada uno de ellos.

Validez, tipo de instancia e información de GeometryCollection

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

Para devolver el tipo de instancia de una geometría
STGeometryType (tipo de datos geometry)

Para determinar si una geometría es un tipo de instancia determinado
InstanceOf (tipo de datos geometry)

Para determinar si una instancia de geometría está bien definida para su tipo de instancia
STIsValid (Tipo de Datos Geometry)

Para convertir una instancia de geometría en una instancia de geometría bien formada con un tipo de instancia
MakeValid (geometry Tipo de Datos)

Para devolver el número de geometrías en una instancia de colección de geometrías
STNumGeometries (tipo de datos geometry)

Para devolver una geometría específica en una instancia de colección de geometrías
STGeometryN (tipo de datos geometría)STGeometryN (tipo de datos geometría)

Número de puntos

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

Para devolver el número de puntos que componen una instancia
STNumPoints (tipo de datos Geometry)

Para devolver un punto específico en una instancia
STPointN

Para devolver un punto arbitrario que se encuentra en una instancia
STPointOnSurface

Para devolver el punto de inicio de una instancia
STStartPoint

Para devolver el punto final de una instancia
STEndpoint

Para devolver la coordenada X de una instancia de Point
STX (tipo de datos geometry)

Para devolver la coordenada Y de una instancia de Point
ESTILO

Para devolver el punto central geométrico de una instancia de Polygon, CurvePolygon o MultiPolygon
STCentroid

Dimensión

Una instancia no geometry vacía puede ser de 0, 1 o 2 dimensiones. Dimensión cero geometries, como Point y MultiPoint, no tienen longitud ni área. Los objetos unidimensionales, como LineString, CircularString, CompoundCurve, y MultiLineString, tienen longitud. Las instancias bidimensionales, como Polygon, CurvePolygony MultiPolygon, tienen área y longitud. Las instancias vacías notificarán una dimensión de -1 y un GeometryCollection informe de un área dependiente de los tipos de su contenido.

Para devolver la dimensión de una instancia
STDimension

Para devolver la longitud de una instancia
STLength

Para devolver el área de una instancia
STArea

Vacío

Una instancia vacíageometry no tiene puntos. La longitud de las instancias vacías LineString, CircularString, CompoundCurvey MultiLineString es cero. El área de las instancias vacías Polygon, CurvePolygony MultiPolygon es 0.

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

Sencillo

Para que una geometry de las instancias sea sencilla, debe cumplir ambos requisitos:

  • Cada figura dentro de la instancia no debe cruzarse consigo misma, excepto en sus extremos.

  • No se pueden intersecar dos figuras de la instancia entre sí en un punto que no está en ambos límites.

Nota:

Las geometrías vacías siempre son sencillas.

Para determinar si una instancia es sencilla
STIsSimple.

Límite, interior y exterior

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

El límite se define mediante el OGC de la siguiente manera:

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

  • LineString y MultiLineString los límites están formados por los puntos de inicio y los puntos finales, 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 Polygon instancia 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();  

Para devolver el límite de una instancia
STBoundary

Sobre

El envolvente de una geometry instancia, también conocido como caja delimitadora, es el rectángulo alineado con los ejes formado por las coordenadas mínimas y máximas (X,Y) de la instancia.

Para devolver el envoltorio de una instancia
STEnvelope

Cierre

Una instanciageometry cerrada es una figura cuyos puntos iniciales y finales son los mismos. Polygon Las instancias se consideran cerradas. Point Las instancias no están cerradas.

Un anillo es una instancia simple y cerrada LineString .

Para determinar si se cierra una instancia
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 en un polígono
STNumInteriorRing

Para devolver un anillo interior especificado de un polígono
STInteriorRingN

Id. de referencia espacial (SRID)

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

Para establecer o devolver el SRID de una instancia
STSrid

Esta propiedad se puede modificar.

Determinar las relaciones entre instancias de geometría

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

Para determinar si dos instancias componen el mismo conjunto de puntos
STEquals

Para determinar si dos instancias están separadas
STDisjoint

Para determinar si dos instancias se intersecan
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 otra
STContains

Para determinar si una instancia se superpone a otra
STOverlaps

Para determinar si dos instancias están relacionadas espacialmente
STRelate

Para determinar la distancia más corta entre puntos en dos geometrías
STDistance

Instancias de geometría predeterminadas a SRID cero

El SRID predeterminado para geometry las instancias de SQL Server es 0. Con geometry los datos espaciales, el SRID específico de la instancia espacial no es necesario para realizar cálculos; por lo tanto, las instancias pueden residir en un espacio planar indefinido. Para indicar el espacio planar no definido en los cálculos de métodos de tipo de geometry datos, 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 geometría.

  • En el primer ejemplo se crea una tabla con una columna de identidad y una geometry columna GeomCol1. Una tercera columna representa la columna geometry en su representación del Open Geospatial Consortium (OGC) como texto Well-Known (WKT) y usa el método STAsText(). A continuación, se insertan dos filas: una fila contiene una LineString instancia de geometryy una fila contiene una Polygon instancia.

    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 STIntersection() método para devolver los puntos en los que se intersecan las dos instancias insertadas geometry anteriormente.

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

Véase también

Datos Espaciales (SQL Server)