1. 程式人生 > >SQLServer空間查詢geometry

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

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

看個例項吧:
這裡寫圖片描述