Creación, construcción y consulta de instancias de Geometry
Se aplica a: SQL Server Base de datos de Azure SQL Azure SQL Managed Instance
El tipo de datos espaciales planar geometryrepresenta los datos en un sistema de coordenadas euclidiano (plano). Implementan este tipo como un tipo de datos en de Common Language Runtime (CLR) en SQL Server.
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 (planar) admitido por SQL Server cumple con las características simples de Open 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 lo siguiente:
Especificaciones de OGC, Acceso a características simples, Parte 1 - Arquitectura común
Especificaciones de OGC, acceso a características simples, parte 2: opciones de SQL
SQL Server admite un subconjunto del estándar GML 3.1 existente que se define en el siguiente esquema: https://schemas.microsoft.com/sqlserver/profiles/gml/SpatialGML.xsd.
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.
Para crear un búfer alrededor de un objeto geometry
STBuffer (tipo de datos geometry)
BufferWithTolerance (tipo de datos geometry)
Para crear una versión simplificada de un objeto geometry
Reduce (tipo de datos geometry)
Para crear la forma convexa de un objeto geometry
STConvexHull (tipo de datos geometry)
Para crear un objeto geometry a partir de la intersección de dos objetos geometry
STIntersection (tipo de datos geometry)
Para crear un objeto geometry a partir de la unión de dos objetos geometry
STUnion (tipo de datos geometry)
Para crear un objeto geometry a partir de los puntos en los que un objeto geometry no se superpone a otro
STDifference (tipo de datos geometry)
Para crear un objeto geometry a partir de los puntos en los que dos objetos geometry no se superponen
STSymDifference (tipo de datos geometry)
Para crear una instancia de Point arbitraria que se encuentra en un objeto geometry existente
STPointOnSurface (tipo de datos geometry)
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.
Para construir cualquier tipo de instancia de geometry a partir de datos WKT
STGeomFromText (tipo de datos geometry)
Parse (tipo de datos geometry)
Para construir una instancia de geometry de tipo Point a partir de datos WKT
STPointFromText (tipo de datos geometry)
Para construir una instancia de geometry de tipo MultiPoint a partir de datos WKT
STMPointFromText (tipo de datos geometry)
Para construir una instancia de geometry de tipo LineString a partir de datos WKT
STLineFromText (tipo de datos geometry)
Para construir una instancia de geometry de tipo MultiLineString a partir de datos WKT
STMLineFromText (tipo de datos geometry)
Para construir una instancia de geometry de tipo Polygon a partir de datos WKT
STPolyFromText (tipo de datos geometry)
Para construir una instancia de geometry de tipo MultiPolygon a partir de datos WKT
STMPolyFromText (tipo de datos geometry)
Para construir una instancia de geometry de tipo GeometryCollection a partir de datos WKT
STGeomCollFromText (tipo de datos geometry)
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:
Para construir cualquier tipo de instancia de geometry a partir de datos WKB
STGeomFromWKB (tipo de datos geometry)
Para construir una instancia de geometry de tipo Point a partir de datos WKB
STPointFromWKB (tipo de datos geometry)
Para construir una instancia de geometry de tipo MultiPoint a partir de datos WKB
STMPointFromWKB (tipo de datos geometry)
Para construir una instancia de geometry de tipo LineString a partir de datos WKB
STLineFromWKB (tipo de datos geometry)
Para construir una instancia de geometry de tipo MultiLineString a partir de datos WKB
STMLineFromWKB (tipo de datos geometry)
Para construir una instancia de geometry de tipo Polygon a partir de datos WKB
STPolyFromWKB (tipo de datos geometry)
Para construir una instancia de geometry de tipo MultiPolygon a partir de datos WKB
STMPolyFromWKB (tipo de datos geometry)
Para construir una instancia de geometry de tipo GeometryCollection a partir de datos WKB
STGeomCollFromWKB (tipo de datos geometry)
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.
Para construir un tipo de instancia de geometry a partir de datos GML
GeomFromGML (tipo de datos geometry)
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 :
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 geometry, incluidos cualesquiera valores Z y M.
AsTextZM (tipo de datos geometry)
Para devolver la representación WKB de una instancia de geometry
STAsBinary (tipo de datos geometry)
Para devolver la representación GML de una instancia de geometry
AsGml (tipo de datos geometry)
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.
Para devolver el tipo de instancia de un objeto geometry
STGeometryType (tipo de datos geometry)
Para determinar si un objeto geometry es un tipo de instancia determinado
InstanceOf (tipo de datos geometry)
Para determinar si el formato de una instancia de geometry es correcto de acuerdo con su tipo de instancia
STIsValid (tipo de datos geometry)
Para convertir una instancia de geometry en una instancia de geometry con el formato correcto de acuerdo con su tipo de instancia
MakeValid (tipo de datos geometry)
Para devolver el número de objetos geometry existente en una instancia de GeometryCollection
STNumGeometries (tipo de datos geometry)
Para devolver un objeto geometry específico de una instancia de GeometryCollection
STGeometryN (tipo de datos geometry) STGeometryN (tipo de datos geometry)
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 datosgeometry proporciona numerosos métodos integrados para consultar los puntos de una instancia.
Devolver el número de puntos que comprende una instancia
STNumPoints (tipo de datos geometry)
Devolver un punto concreto en una instancia
STPointN
Devolver un punto arbitrario que se encuentra en una instancia
STPointOnSurface
Devolver el punto inicial de una instancia
STStartPoint
Devolver el punto final de una instancia
STEndpoint
Devolver la coordenada X de una instancia de Point
STX (tipo de datos geometry)
Para devolver la coordenada Y de una instancia de Point
STY
Para devolver el punto central geométrico de una instancia de Polygon, CurvePolygon o MultiPolygon
STCentroid
Dimensión
Una instancia de geometry no vacía puede ser no dimensional, unidimensional o bidimensional. Los tipos de datos geometryno dimensionales, como Point y MultiPoint, no tienen ni longitud ni área. Los objetos unidimensionales, como LineString, CircularString, CompoundCurvey MultiLineString, tienen longitud. Las instancias bidimensionales, como Polygon, CurvePolygony 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
Vacío
Una instancia emptygeometry no tiene puntos. La longitud de instancias de LineString, CircularString, CompoundCurvey MultiLineString es cero. El área de las instancias de Polygon, CurvePolygony MultiPolygon vacías es 0.
Para determinar si una instancia está vacía
STIsEmpty.
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.
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.
Ellímite lo define OGC de la siguiente manera:
La instancias dePoint y MultiPoint no tienen un límite.
Los límites deLineString y MultiLineString boundaries are formed by the start points y 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();
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();
Devolver el límite de una instancia
STBoundary
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
Cierre
Una instancia de geometrycerrada es una figura cuyos puntos de inicio y de finalización son los mismos. Las instanciasPolygon se consideran cerradas. Las instanciasPoint 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
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
Nota:
Esta propiedad se puede modificar.
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
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.
Ejemplo A.
En este 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 de LineString
de geometry
y otra 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
Ejemplo B.
En este 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();