Sql Server 空間資料

2022-09-02 12:30:13 字數 3016 閱讀 9615

1、地理座標系空間需要用geography ,平面座標系空間用geometry,計算距離使用stdistance

字串裡經緯度的順序是 「經度[空格]緯度」,即「longitude latitude」。
如果要計算兩個lat/lon點之間的實際距離就需要將geometry型別轉成geography型別,不然結果不正確。

2、geometry轉geography的方法:

geography::stgeomfromtext(boundary.tostring(), 4326)

boundary是geometry型別的,4326是座標系的引數,4326代表gcs-wgs-1984座標系,是系統預設的座標系。

可以通過這個sql獲得系統的座標系(sql server中):select * from sys.spatial_reference_systems where authorized_spatial_reference_id=4326

3、谷歌地圖裡得到的多邊形(polygon)的頂點定義的順序和sql server裡geography型別中的頂點定義順序是相反的,即乙個是順時針定義,乙個是逆時針定義(至於哪個是順時針,哪個是逆時針,沒有細究),所以把這些頂點存到資料庫的時候,需要先反轉一下,否則  sql server會報異常。

declare

@ggeography;

declare

@hgeography;

set@g

= geography::stgeomfromtext('

polygon((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))

', 4326

);set

@h= geography::point(47.653, -

122.358, 4326

)select

@g.stintersects(@h)

stdistance的用法:

按照裡面的例子能夠計算出距離,但是如果輸入的是經緯度的值,得出的結果總是覺得不對,值比較小,實際上需要按照第二步轉化為geography型別再計算就可以了,4326座標系預設返回距離的單位【unit】是公尺【meter】。

declare

@ggeography;

declare

@hgeography;

set@g

= geography::stgeomfromtext('

point(104.12765 31.61)

', 4326

);set

@h= geography::stgeomfromtext('

point(114.132179 22.547010)

', 4326

);select

@g.stdistance(@h);

參考:

if

object_id ( '

dbo.spatialtable

', '

u' ) is

notnull

drop

table

dbo.spatialtable;

gocreate

table

spatialtable

( id

intidentity (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

選取圓形區域範圍的 位址---也就是 圓心到半徑範圍內的所有點

declare

@ggeometry;

set@g

= geometry::stgeomfromtext('

point(104.12765 30.60445)

', 4326

)select address,geom.sty,geom.stx from spatialtable where geom.stdistance(@g)<=

0.005

選取多邊形

declare

@ggeometry;

set@g

= geometry::stgeomfromtext('

polygon ((104.12189573049204 30.608145728994504,104.12223905324595 30.60282680842528,104.13262456655161 30.603122311674902,104.13176625966685 30.610066378528995,104.12189573049204 30.608145728994504,104.12189573049204 30.608145728994504))

',4326

)select address from

spatialtable

where geom.stintersects(@g)=

1

SQL Server 2008之空間資料應用 二

在sql server 2008之空間資料應用 一 中概略的介紹了sql server 2008中支援的兩種空間資料型別 geometry和geography。空間資料的具體型別 在sql server 2008中,geometry和geography支援十一種空間資料物件或例項型別。下圖所示是可例...

空間資料轉換引擎

引擎採用windows com方式開發,二次開發者可以直接使用所提供的元件進行二次開發。支援第三方嵌入開發 第三方根據引擎提供介面,實現其特定格式檔案轉換,編譯成動態庫後可直接嵌入引擎內部,實現無縫連線。軟體實現的功能是支援以下格式空間資料格式相互轉換 arc view shape 檔案 arc i...

空間資料的採掘

近年來,資料採掘研究多針對於關聯式資料庫,但是空間資料庫系統的發展為我們提供了豐富的空間資料,為資料分析和知識發現展示了廣闊的前景。空間資料探勘技術幫助人們從龐大的空間資料中抽取有用資訊。由於空間資料的數量龐大及空間問題的特殊性,因此發現隱含在空間資料中的特徵和模式,已成為空間資料庫的乙個重要問題。...