SQLServer空间查询geometry

一、介绍

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

看个实例吧:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/mao834099514/article/details/79094405
今日推荐