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