詳解SQL Server 2008空間數(shù)據(jù)類型
SQL Server 2008為大地測量空間數(shù)據(jù)提供了geography數(shù)據(jù)類型,為平面空間數(shù)據(jù)提供了geometry數(shù)據(jù)類型。這兩個都是Microsoft .NET Framework通用語言運行時(CLR)類型,并且可以用來存儲不同種類的地理元素,例如點、線和多邊形。這兩個數(shù)據(jù)類型都提供了你可以用來執(zhí)行空間操作的屬性和方法,例如計算位置間的距離和找出兩者間交叉的地理特性(例如一條河流經(jīng)一個城鎮(zhèn)。)
geography 數(shù)據(jù)類型
geography數(shù)據(jù)類型為空間數(shù)據(jù)提供了一個由經(jīng)度和緯度聯(lián)合定義的存儲結(jié)構(gòu)。使用這種數(shù)據(jù)的典型用法包括定義道路、建筑、或者地理特性如可以覆蓋到一個光柵圖上的向量數(shù)據(jù),它考慮了地球的彎曲性,或者計算真實的圓弧距離和空中傳播軌道,而這些在一個平面模型中所存在的固有失真引起的錯誤程度是不可接受的。
geometry數(shù)據(jù)類型
geometry數(shù)據(jù)類型為空間數(shù)據(jù)提供了一個存儲結(jié)構(gòu),它是由任意平面上的坐標定義的。這種數(shù)據(jù)通常是用在區(qū)域匹配系統(tǒng)中的,例如由美國政府制定的州平面系統(tǒng),或者是不需要考慮地球彎曲性的地圖和內(nèi)層布置圖。
geometry 數(shù)據(jù)類型提供了與開放地理空間聯(lián)盟(OGC)Simple Features Specification for SQL標準結(jié)合的屬性和方法,使得你可以對geometry數(shù)據(jù)執(zhí)行操作以產(chǎn)生行業(yè)標準的行為。
空間數(shù)據(jù)類型的方法
SQL Server 2008中的兩種空間數(shù)據(jù)類型都提供了一組全面的實例和靜態(tài)方法,你可以使用它們對空間數(shù)據(jù)執(zhí)行查詢和操作。例如,下面的代碼示例為一個城市地圖應(yīng)用程序創(chuàng)建了兩個表;一個包含了城市中區(qū)的geometry值,另一個包含了城市中的街道的geometry 值。然后一個查詢獲得了城市中交叉的街道和區(qū)。
CREATE TABLE Districts( DistrictId int IDENTITY (1,1),
DistrictName nvarchar(20),
DistrictGeo geometry);
GO
CREATE TABLE Streets
( StreetId int IDENTITY (1,1),
StreetName nvarchar(20),
StreetGeo geometry);
GO
INSERT INTO Districts (DistrictName, DistrictGeo)
VALUES ('Downtown',
geometry::STGeomFromText
('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0));
INSERT INTO Districts (DistrictName, DistrictGeo)
VALUES ('Green Park',
geometry::STGeomFromText
('POLYGON ((300 0, 150 0, 150 150, 300 150, 300 0))', 0));
INSERT INTO Districts (DistrictName, DistrictGeo)
VALUES ('Harborside',
geometry::STGeomFromText
('POLYGON ((150 0, 300 0, 300 300, 150 300, 150 0))', 0));
INSERT INTO Streets (StreetName, StreetGeo)
VALUES ('First Avenue',
geometry::STGeomFromText
('LINESTRING (100 100, 20 180, 180 180)', 0))
GO
INSERT INTO Streets (StreetName, StreetGeo)
VALUES ('Mercator Street',
geometry::STGeomFromText
('LINESTRING (300 300, 300 150, 50 50)', 0))
GO
SELECT StreetName, DistrictName
FROM Districts d, Streets s
WHERE s.StreetGeo.STIntersects(DistrictGeo) = 1
ORDER BY StreetName
該查詢的結(jié)果如下表所示
|
|
First Avenue |
Downtown |
First Avenue |
Harborside |
Mercator Street |
Downtown |
Mercator Street |
Green Park |
Mercator Street |
Harborside |
高性能的空間數(shù)據(jù)
SQL Server 2008中的空間數(shù)據(jù)類型作為CLR系統(tǒng)類型來執(zhí)行。SQL Server 2008增加了數(shù)據(jù)庫中的CLR類型的***規(guī)模,提高了原來在SQL Server 2005中的8000字節(jié)的限制,這使得它可以存儲非常復(fù)雜的空間數(shù)據(jù)元素,例如通過許多點定義的多邊形。
通過在關(guān)系表中存儲空間數(shù)據(jù),SQL Server 2008 使得可以結(jié)合空間數(shù)據(jù)到其他任何商業(yè)數(shù)據(jù)類型中去;這消除了對維護一個單獨的只用于空間數(shù)據(jù)存儲的維護要求,并使得可以做高性能查詢,它不需要結(jié)合從多個外部來源獲得的數(shù)據(jù)。
在SQL Server 2008中對空間索引的支持進一步增強了對空間數(shù)據(jù)的查詢操作。你可以用一個集成在SQL Server數(shù)據(jù)庫引擎中的適合的多級網(wǎng)格索引來檢索空間數(shù)據(jù)。空間索引包含一個基于網(wǎng)格的層級,在其中每一級索引又細分為由上一級所定義的網(wǎng)格區(qū)域。一個空間索引的概念模型如圖3所示。
圖3:一個空間索引
SQL Server查詢優(yōu)化器會作出基于成本的決策,決定對給定的查詢使用哪種索引,并且因為空間索引是數(shù)據(jù)庫引擎的一個完整部分,可以作出關(guān)于是否使用特殊的空間索引的基于成本的決策,就像其它索引一樣。
【編輯推薦】