The planar spatial data type, geometry, is implemented as a common language runtime (CLR) data type in SQL Server. This type represents data in a Euclidean (flat) coordinate system.
SQL Server supports a set of methods for the geometry spatial data type. These methods include methods on geometry that are defined by the Open Geospatial Consortium (OGC) standard and a set of Microsoft extensions to that standard.
For more information on geometry spatial Data Type methods, see the geometry Data Type Method Reference.
|Applies to: SQL Server (SQL Server 2008 through current version), Azure SQL Database.|
The geometry type is predefined and available in each database. You can create table columns of type geometry and operate on geometry data in the same manner as you would use other CLR types. Can be used in persisted and non-persisted computed columns.
The following two examples show how to add and query geometry data. The first example creates a table with an identity column and a
GeomCol1. A third column renders the
geometry column into its Open Geospatial Consortium (OGC) Well-Known Text (WKT) representation, and uses the
STAsText() method. Two rows are then inserted: one row contains a
LineString instance of
geometry, and one row contains a
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
The second example uses the
STIntersection() method to return the points where the two previously inserted
geometry instances intersect.
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();
The following example creates a table with a persisted computed column using a geometry type.
IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL DROP TABLE dbo.SpatialTable; GO CREATE TABLE SpatialTable ( locationId int IDENTITY(1,1), location geometry, deliveryArea as location.STBuffer(10) persisted )