SQLServer空間查詢geometry
阿新 • • 發佈:2019-02-04
一、介紹
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();
看個例項吧: