隨著價(jià)格的不斷下降,基于GPS的設(shè)備逐漸在大眾消費(fèi)者中普及,人們對(duì)地理位置的重要性認(rèn)識(shí)越來(lái)越深刻,商業(yè)企業(yè),如物流和制造公司對(duì)位置的依賴性就很強(qiáng),對(duì)企業(yè)的發(fā)展也很關(guān)鍵。 文章導(dǎo)讀 1、兩個(gè)類型,兩個(gè)模型 2、重溫歐幾里得幾何 3、在地圖上繪制點(diǎn) 4、多邊形計(jì)算實(shí)例 要存儲(chǔ)位置數(shù)據(jù)也相當(dāng)簡(jiǎn)單,只需要將位置的經(jīng)緯度值存儲(chǔ)起來(lái)即可,使用簡(jiǎn)單的浮點(diǎn)字段就可以存儲(chǔ)這些信息,但依靠這種數(shù)據(jù)類型只能實(shí)現(xiàn)一些簡(jiǎn)單的應(yīng)用,如果你想創(chuàng)建更高級(jí)的應(yīng)用,或使用幾何算法來(lái)定位數(shù)據(jù)點(diǎn),則必須自己動(dòng)手編寫代碼,例如,如何在10英里范圍內(nèi)快速找出所有存儲(chǔ)的位置。在這種情況下,如果數(shù)據(jù)庫(kù)本身可以為你做一些工作,那不是更好嗎?這也是SQL Server 2008的目的之一,在SQL Server 2008中,新增了基于位置的數(shù)據(jù)類型,具有地理空間特性。接下來(lái)將了解到這個(gè)新的數(shù)據(jù)類型是如何工作的。 兩個(gè)類型,兩個(gè)模型
SQL Server 2008支持兩個(gè)類似但不同的數(shù)據(jù)類型:geometry和geography。如果事情簡(jiǎn)單,這兩個(gè)數(shù)據(jù)類型都可以存儲(chǔ)x和y值,并支持基于這些值的計(jì)算。分成兩個(gè)不同的數(shù)據(jù)類型是因?yàn)間eometry是基于平面進(jìn)行計(jì)算的,而geography是基于地球的實(shí)際形狀計(jì)算的。它們之間的差異實(shí)際上是很大的,例如計(jì)算最短路線時(shí),基于平面的計(jì)算結(jié)果和基于圓的的計(jì)算結(jié)果可能相差很大。我們以航線為例,如圖1所示,兩站之間基于平面的距離和基于圓的距離可能相差十萬(wàn)八千里。實(shí)際上,SQL Server 2008可以根據(jù)多個(gè)不同的圓度和坐標(biāo)進(jìn)行計(jì)算,這種支持是必要的,因?yàn)椴煌膰?guó)家地球形狀略有不同,計(jì)算方法略有差異,如果不小心,這些差異即使可能很微小,但最終也會(huì)影響到你的結(jié)果。
圖 1 哪條線路是最短的?
SQL Server 2008引入了一個(gè)空間參考標(biāo)識(shí)符(Spatial Reference Identifiers,簡(jiǎn)稱SRID)的概念,當(dāng)你使用geometry和geography這兩個(gè)數(shù)據(jù)類型時(shí)就必須使用它。對(duì)于最簡(jiǎn)單的geometry數(shù)據(jù)類型,可以忽略SRID值,或設(shè)置為0;對(duì)于geography數(shù)據(jù)類型,你就必須明確設(shè)置SRID值。SQL Server一般使用WGS 84坐標(biāo)系(World Geodetic System 1984),它給SRID賦予了一個(gè)魔法值4326,所有支持的SRID可以從Master數(shù)據(jù)庫(kù)中的sys.spatial_reference_systems視圖查詢到,如圖2所示。