?
先看看sql server 2008 spatial的函數(shù)定義? http://msdn.microsoft.com/zh-cn/library/bb933917(v=SQL.100).aspx
所有的空間計算是以這些函數(shù)為基礎的
?
搜索距離內(nèi)的地理對象(幾何形狀),其實就是電子地圖的"顯示視野內(nèi) 酒店/商場..." 功能, 這里可以有兩種方式來實現(xiàn).
? ?
?方法1: 使用 STDistance
STDistance(geography 數(shù)據(jù)類型)
返回一個 geography 實例中的點與另一個 geography 實例中的點之間的最短距離。
語法
.STDistance ( other_geography )?
?
算法

2 ? ?
3 ? select
4 ? ??name,lng,lat,location.STDistance( @urplace )? as ?distance
5 ? from
6 ? ??geotable
7 ? where
8 ? ??location.STDistance( @urplace ) < 1000
9 ?
?
這個方法計算精度高( STDistance返回精確的距離 ),但是作為where條件,也因此導致效率低,一般推薦在查詢的數(shù)據(jù)量比較少的情況下(幾百)使用
?
方法2:使用STBuffer?
?STBuffer(geography 數(shù)據(jù)類型)
返回一個地理對象,該對象表示所有與 geography 實例的距離小于或等于指定值的點的并集。
語法
.STBuffer ( distance )
?
算法

2 ? declare ? @bufArea ? = ? @urplace .STBuffer( 1000 )
3 ?
4 ? select
5 ? ???name,lng,lat,location.STDistance( @urplace )? as ?distance
6 ? from
7 ? ???geotable
8 ? where
9 ? ??location.Filter( @bufArea )? = ? 1
?
?
此方法先是對原來地理對象建立緩沖區(qū),然后通過Filter()與緩沖區(qū)有交集的數(shù)據(jù)集,再進行精確的 STDistance 計算, Filter會使用到 你為該表建立spatial索引,因此 會極大地提高性能
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
