一、介绍
geometry数据类型为空间数据提供了一个存储结构,它是由任意平面上的坐标定义的。这种数据通常是用在区域匹配系统中的,例如由美国政府制定的州平面系统,或者是不需要考虑地球弯曲性的地图和内层布置图。
geometry 数据类型提供了与开放地理空间联盟(OGC)Simple Features Specification for SQL标准结合的属性和方法,使得你可以对geometry数据执行操作以产生行业标准的行为。
二、创建表和geometry字段以及插入点,线,多边形
sql如下:
IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL
DROP TABLE dbo.SpatialTable;
GO
CREATE TABLE SpatialTable
( id int IDENTITY (1,1),
geom geometry,
adress varchar );
GO
INSERT INTO SpatialTable (geom)
VALUES (geometry::STGeomFromText('POINT (20 180)', 4326));
INSERT INTO SpatialTable (geom)
VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 4326));
INSERT INTO SpatialTable (geom)
VALUES (geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 4326));
GO
ps: 4326是空间引用标识符 (SRID) 一般写0或者4326
存入表中的geom字段如下:
三、查询点线多边形包含关系
select * from table1 a,table2 b where a.geom.STContains(b.geom)=1
注:除了包含关系还有很多,详查官方文档:
https://docs.microsoft.com/zh-cn/sql/t-sql/spatial-geometry/spatial-types-geometry-transact-sql
四、(WKT)表示形式
geometry 列呈现为其开放地理空间联盟 (OGC) 熟知文本 (WKT)表示形式,并使用 STAsText() 方法。
查询到的geom字段格式如上图所示,为16进制特殊格式。想转成标准格式如下所示:SELECT @result.STAsText();
如下示例使用 STIntersection() 方法返回两个以前插入的 geometry 实例相交的点。
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();
看个实例吧: