程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server 2008:使用空間數據實現位置智能

SQL Server 2008:使用空間數據實現位置智能

編輯:關於SqlServer
 1. 導言

  現今的信息工作人員和消費者處理大量不同類型的信息,從電子表格和數據庫中的商業數據的傳統數據表,到在線的基於媒體的數據例如視頻、照片和音樂。近來朝向mash up解決方案(mash up解決方案是指合並從多個來源獲得的信息和內容來創建通用的在線應用程序)發展的趨勢表明計算機用戶使用高度集成的解決方案來利用它們可用的大量信息。

  同時,技術優勢導致地理服務和設備的發展,包括在線繪制地圖解決方案,例如Microsoft® Virtual Earth™,和較便宜的全球定位系統(GPS)解決方案。曾經只用於地理信息系統(GIS)專家的技術現在廣泛的應用於每一個人。

  這兩個因素為軟件應用程序帶來了新的期望和機遇。地理服務的普遍性,和用戶使用數據所采用的混合度的提高意味著這個空間信息只是合成到解決方案中的另一個組件,並且是作出更好決策和提供更高的價值服務的一個基礎。

  空間數據有多種使用方式,如下面的示例列表所描述的:

  · 一個零售商網站可以將所有的存儲位置作為一個地圖上的點顯示出來,並按照所給的郵政編碼找到最近的存儲位置。

  · 一個銷售經理可以定義地理銷售區域,並使用它們將客戶和銷售代表匹配起來,並對銷售情況進行分析。

  · 一個架構師可以為創建一個新的架構制定計劃,並將這些計劃覆蓋到一個給定的站點地圖上。

  · 一個驅動器可以找到兩個位置間的距離,並制定路由路線。

  · 一個房地產經紀人可以快速地根據某個客戶的要求找到匹配的房子,例如在華盛頓湖岸邊的超過20000平方英尺的房子。

  · 一個移動應用程序可以找到所有給定位置的10公裡范圍內的加油站。

  這些例子只顯示了空間數據集成到軟件應用程序中所產生的一些可能案例。

  SQL Server 2008通過引入新的空間數據類型提供了對地理數據的支持,你可以使用它來存儲和操縱基於位置的信息,SQL Server 2008中的空間支持可以幫助用戶通過分析例如下面所示的場景中的位置數據來作出更好的決策:

  · 關注於消費者的基於位置的信息

  · 基於客戶的管理和開發

  · 與環境相關的數據的影響、分析和計劃

  · 公司中的財務和經濟分析

  · 基於政府的計劃和開發分析

  · 市場分割和分析

  · 科學研究設計和分析

  · 房地產開發和分析

  這篇白皮書對SQL Server 2008中的全面的空間數據支持做了高層次的介紹,並描述了它的具有高性能的空間能力和位置智能應用程序的可擴展性。

  2. 廣泛的空間支持

  SQL Server 2008通過新的數據類型提供了廣泛的空間支持。要理解你可以怎樣使用這些數據類型來存儲位置智能的數據,你首先需要了解空間數據——特別是地理數據——是怎麼工作的。

  2.1 空間模型

  空間數據是用於顯示一個表面的點、線和區域的。一般情況下,這些元素與地球上的實際物理位置有關,所以它們可以被稱為地理數據。我們大多數都通過使用地球儀和地圖熟悉了這個概念,它們一般顯示了多個地理特性和它們的相對位置。

  大地測量空間模型

  描述一個行星表面位置的困難就在於行星不是平的。地球是一個非常復雜的對象,它可以近似的看作是一個扁橢圓體,一個(稍微)有點平坦的球體。地球的一個准確表示通常是通過地球儀來顯示的,在它上面行星表面的位置是通過經度和緯度來表示的,它們是根據從赤道開始和按照相應的國際日界線所測量得到的。這個建立地理位置模型的方法被稱作大地測量模型,它提供了一個定義如圖1所示的地球儀上的位置和對象的精確方法。現在全球在使用幾個不同的大地測量模型,包括英國的國家地圖地理系統所使用的Airy 1830 橢球體,和全球的GPS解決方案所使用的WGS84 橢球體。

SQL Server 2008:使用空間數據實現位置智能

  圖1: 一個大地測量模型

  平面空間模型

  一個大地測量模型提供了最精確的方法來顯示地理特性,它使用一個橢圓體並考慮了行星的彎曲程度,這在以前人們必須使用平面地圖時要計算距離是非常困難的。過去,使用二維表面或平面是非常方便的,所以在許多平面(平坦)模型中顯示的一般都是基於位置的數據。現在要在一個平面二維表面使用地理數據,就要創建一個投影來展平橢球體上的地理對象。有了大地測量模型,就產生了很多用於將地球的地理特性設計到一個平坦的表面上的數學模型,包括Mercator投影、Peters投影,和朗伯正形圓錐投影。圖2顯示了一個基於Mercator投影的地球平面模型。

  圖2:一個平面模型

  無論使用哪個投影,將一個橢球體上的地理數據轉換成平面表面總會導致結果地圖上的地理特性方面的一些形狀、尺寸或位置(或三者都有)上的失真,這就是為什麼在圖2中的投影中格陵蘭顯示如美國一般大小,而事實上它的土地面積要小很多。一般來說,投影的表面面積越大,失真就越嚴重——地圖邊緣的地方的失真程度要大於中心位置的失真程度。為此,平面模型用於較小的地理區域比較好,例如單個的國家、州和城鎮,或者是沒有投影的空間表面,例如內層布置圖。

  2.2 SQL Server 2008空間數據類型

  SQL Server 2008為大地測量空間數據提供了geography數據類型,為平面空間數據提供了geometry數據類型。這兩個都是Microsoft .Net 框架通用語言運行時(CLR)類型,並且可以用來存儲不同種類的地理元素,例如點、線和多邊形。這兩個數據類型都提供了你可以用來執行空間操作的屬性和方法,例如計算位置間的距離和找出兩者間交叉的地理特性(例如一條河流經一個城鎮。)

  Geography數據類型

  geography 數據類型為空間數據提供了一個由經度和緯度聯合定義的存儲結構。使用這種數據的典型用法包括定義道路、建築、或者地理特性如可以覆蓋到一個光柵圖上的向量數據,它考慮了地球的彎曲性,或者計算真實的圓弧距離和空中傳播軌道,而這些在一個平面模型中所存在的固有失真引起的錯誤程度是不可接受的。

  Geometry數據類型

  geometry 數據類型為空間數據提供了一個存儲結構,它是由任意平面上的坐標定義的。這種數據通常是用在區域匹配系統中的,例如由美國政府制定的州平面系統,或者是不需要考慮地球彎曲性的地圖和內層布置圖。

  geometry 數據類型提供了與開放地理空間聯盟(OGC)Simple Features Specification for SQL標准結合的屬性和方法,使得你可以對geometry數據執行操作以產生行業標准的行為。

  2.3 空間數據類型的方法

  SQL Server 2008中的兩種空間數據類型都提供了一組全面的實例和靜態方法,你可以使用它們對空間數據執行查詢和操作。例如,下面的代碼示例為一個城市地圖應用程序創建了兩個表;一個包含了城市中區的geometry值,另一個包含了城市中的街道的geometry 值。然後一個查詢獲得了城市中交叉的街道和區。

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

  這個查詢的結果如下表所示:

StreetName DistrictName First Avenue Downtown First Avenue Harborside Mercator Street Downtown Mercator Street Green Park Mercator Street Harborside

  3. 高性能的空間數據能力

  SQL Server 2008中的空間數據類型作為CLR系統類型來執行。SQL Server 2008增加了數據庫中的CLR類型的最大規模,提高了原來在SQL Server 2005中的8000字節的限制,這使得它可以存儲非常復雜的空間數據元素,例如通過許多點定義的多邊形。

  通過在關系表中存儲空間數據,SQL Server 2008 使得可以結合空間數據到其他任何商業數據類型中去;這消除了對維護一個單獨的只用於空間數據存儲的維護要求,並使得可以做高性能查詢,它不需要結合從多個外部來源獲得的數據。

  在SQL Server 2008中對空間索引的支持進一步增強了對空間數據的查詢操作。你可以用一個集成在SQL Server數據庫引擎中的適合的多級網格索引來檢索空間數據。空間索引包含一個基於網格的層級,在其中每一級索引又細分為由上一級所定義的網格區域。一個空間索引的概念模型如圖3所示。

  圖3:一個空間索引

  SQL Server查詢優化器會作出基於成本的決策,決定對給定的查詢使用哪種索引,並且因為空間索引是數據庫引擎的一個完整部分,可以作出關於是否使用特殊的空間索引的基於成本的決策,就像其它索引一樣。

  4. 位置智能的應用程序可擴展性

  geography和geometry 數據類型在SQL Server 2008的多個版本中都得到了支持,從個人桌面應用程序到企業級數據存儲,使得你可以建立任何規模的地理解決方案。這個廣泛的支持將空間數據能力提供給所有種類的應用程序,而不需要具有地理解決方案的昂貴的所有權。

  4.1 導入空間數據

  geography和geometry 數據類型包括以用於在OGC中所定義的地理數據的已知文本(Well Known Text,WKT)和已知二進制(Well Known Binary,WKB)格式導入和導出數據的方法,還包括普遍使用的地理標示語言(Geographic Markup Language,GML)格式,這使得很容易從支持這些格式的數據源導入地理數據。地理數據很容易從一些政府和商業數據源獲得,並且可以相對容易地從許多現有的GIS應用程序和GPS系統中導出。Microsoft保持與一些第三方GIS供應商和地理數據解決方案供應商的緊密關系,這幫助確保SQL Server 2008和廣泛的行業標准工具間的強大兼容能力,以用於導入、導出和操縱空間數據。

  4.2 使用空間數據

  正如在本篇白皮書中已經描述過的,geography和geometry數據類型提供了使你可以用來對你的數據執行空間操作的方法。因為這些數據類型是作為.Net CLR類型來執行的,你可以很容易的創建通過數據可編程性使用SQL Server的空間數據的客戶端應用程序,並使用在客戶端管理的代碼來調用空間類型的實例上的方法。這使得你可以建立強大的應用程序來使用你的空間數據,並將它集成到其它位置智能的應用程序和服務中,例如虛擬地球。

  例如,圖4顯示了一個應用程序,其中從SQL Server 2008獲得的空間數據與虛擬地球集成在一起。這個應用程序顯示了在某郵政編碼區域的普查街區,包括計算了周圍的餐廳。在每個街道的餐廳數目,相對於街道的規模產生一個密度值,這在顯示區域上顯示為從白色陰影(低密度)到紅色陰影(密度最高)。

SQL Server 2008:使用空間數據實現位置智能

  圖4:和虛擬地球集成的空間數據

  5. 總結

  隨著地理信息集成到應用程序中變得越來越普遍,應用程序開發人員將越來越需要可以存儲和操縱空間數據的數據庫系統。隨著geography和geometry數據類型的推出,SQL Server 2008為空間數據提供了一個全面的、高性能的和可擴展的數據存儲解決方案,並使得所有規模的公司都可以將地理特性集成到它們的應用程序和服務中去。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved