天天看點

SQL Server 2008空間資料應用系列二:空間索引(Spatial Index)基礎

  在前一篇博文中我們學習到了一些關于地理資訊的基礎知識,也學習了空間參照系統,既地球橢球體、基準、本初子午線、計量機關、投影等相關理論知識,我們可以使用這些空間參照系統元件來定義一系列應用于地球空間上的幾何圖像來表示地理空間中的特定功能,表示着地球上一個一個特定的位置點。 本篇主要介紹地理空間索引的概念以及微軟SQL Server 2008 R2中的空間索引的應用。

一、空間索引

  空間索引是指依據空間對象的位置和形狀或空間對象之間的某種空間關系按一定的順序排列的一種資料結構,其中包含空間對象的概要資訊。作為一種輔助性的空間資料結構,空間索引介于空間操作算法和空間對象之間,它通過篩選作用,大量與特定空間操作無關的空間對象被排除,進而提高空間操作的速度和效率。

  關于更多空間索引的知識點需要深入了解EPSG和SRID,本文主要介紹基于微軟SQL Server 2008的空間資料特性實作介紹,故不詳細介紹這些基礎理論知識點,有興趣的可以通路文末的推薦資料連結,了解更多關于EPSG核SRID的相關知識。

  SQL Server 2008中的空間資料類型作為CLR系統類型來執行。SQL Server 2008增加了資料庫中的CLR類型的最大規模,提高了原來在SQL Server 2005中的8000位元組的限制,這使得它可以存儲非常複雜的空間資料元素,例如通過許多點定義的多邊形。通過在關系表中存儲空間資料,SQL Server 2008 使得可以結合空間資料到其他任何商業資料類型中去;這消除了對維護一個單獨的隻用于空間資料存儲的維護要求,并使得可以做高性能查詢,它不需要結合從多個外部來源獲得的資料。

  在SQL Server 2008中對空間索引的支援進一步增強了對空間資料的查詢操作。你可以用一個內建在SQL Server資料庫引擎中的适合的多級網格索引來檢索空間資料。空間索引包含一個基于網格的層級,在其中每一級索引又細分為由上一級所定義的網格區域。下圖為官方給出的一個空間索引的機率模型圖:

        

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

二、SQL Server 2008的空間參考系統

  微軟SQL Server 2008的空間系統表(實際上是一個系統視圖)"sys.spatial_reference_systems"中存儲了詳細的支援所有大地測量空間參考系統标準,該表中的每一行資料對應于一個唯一的空間參考系統,可以基于這些空間參考系統在SQL Server 2008中來定義任何形式的空間資料。

select * from sys.spatial_reference_systems

   

SQL Server 2008空間資料應用系列二:空間索引(Spatial Index)基礎

  系統表“sys.spatial_reference_systems”中實際上僅僅隻是存儲了應用于SQL Server 2008中地理參照坐标的參考系統,除了空間參考系統可以使用這張表中列出的參考系統标準,也可以基于這些标準來定義基于任何地理投影的空間資料。

 三、空間參照文本格式(WKT)

  Well-Known Text (WKT) Representation of Spatial Reference Systems:顧名思義用衆所周知的文字形式來描述看見坐标參考系統,它與EPSG(2005年已經換名)的坐标文字表述模型一緻。WKT字元串應用于确定空間參考系統的組成部分的描述,其定義主要包含以下10項内容:

  1、一個總體的坐标系名

  2、一個地理圖形坐标系統名

  3、一個基準面定義

  4、一個橢球體的名字。長半軸(semi-major axis)和反扁率(inverse flattening)

  5、本初子午線(prime meridian)名和其與格林威治子午線的偏移值

  6、投影方法類型(如橫軸莫卡托)

  7、投影參數清單(如中央經線等)

  8、一個機關的名稱和其到米和弧度機關的轉換參數

  9、軸線的名稱和順序

  10、在預定義的權威坐标系中的編碼(如EPSG)

select well_known_text 

    from sys.spatial_reference_systems 

        where authorized_spatial_reference_id=4326 

            and authority_name='EPSG'

  基于sys.spatial_reference_systems表定義了多種不同的空間參照系統的WKT描述,如上SQL語句查詢出的是我們平時在地圖應用開發中使用最多的EPSG:4326空間參照系統标準,則對于的WKT如下:

GEOGCS["WGS 84", 

        DATUM["World Geodetic System 1984", 

        ELLIPSOID["WGS 84", 6378137, 298.257223563]], 

        PRIMEM["Greenwich", 0], 

        UNIT["Degree", 0.0174532925199433]

      ]

  以上KWT字元串确定了EPSG:4326空間參照系統的組成部分元素描述,其主要使用了四種空間配置,分别為:基準(Datum)、橢圓(Ellipsoid)、本初子午線(Primem)和Unit(計量機關)。關于這些空間參考系統參數在上一篇文中中介紹過,這裡就不在做重複介紹,以上KWT字元串表述的意思大緻是這樣的:“WGS 84坐标系,采用1984年訂立的世界地理坐标系統标準,地理标準半徑為:6378137........”。

四、SQL Server 2008的空間索引

  SQL Server 2008 引入了對空間資料和空間索引的支援。“空間索引”是一種擴充索引,允許您對空間列編制索引。空間列是包含空間資料類型(如 geometry 或 geography)資料的表列。本節中的主題介紹了空間索引。 

  在 SQL Server 2008 中,空間索引(存儲在:sys.spatial_indexes表中)使用 B 樹建構而成,也就是說,這些索引必須按 B 樹的線性順序表示二維空間資料。是以,将資料讀入空間索引之前,SQL Server 2008 先實作對空間的分層均勻分解。索引建立過程會将空間分解成一個四級“網格層次結構”。這些級别指的是“第 1 級”(頂級)、“第 2 級”、“第 3 級”和“第 4 級”。

  每個後續級别都會進一步分解其上一級,是以上一級别的每個單元都包含下一級别的整個網格。在給定級别上,所有網格沿兩個軸都有相同數目的單元(例如 4x4 或 8x8),并且單元的大小都相同。下圖顯示了網格層次結構每個級别的右上角單元被分解成 4x4 網格的情況。事實上,所有單元都是以這種方式分解的。是以,以此為例,将一個空間分解成四個級别的 4x4 網格際上會總共産生 65,536 個第四級單元。針對空間索引進行的空間分解與應用程式資料使用的度量機關無關。

SQL Server 2008空間資料應用系列二:空間索引(Spatial Index)基礎

  網格層次結構的單元是利用多種 Hilbert 空間填充曲線以線性方式編号的。然而,出于示範目的,這裡使用的是簡單的按行編号,而不是由 Hilbert 曲線實際産生的編号。在下圖中,幾個表示建築物的多邊形和表示街道的線已經放進了一個 4x4 的 1 級網格中。第 1 級單元的編号為 1 到 16,編号從左上角的單元開始。

SQL Server 2008空間資料應用系列二:空間索引(Spatial Index)基礎

  沿網格軸的單元數目确定了網格的“密度”:單元數目越大,網格的密度越大。例如,8x8 網格(産生 64 個單元)的密度就大于 4x4 網格(産生 16 個單元)的密度。網格密度是以每個級别為基礎定義的。網格配置單元數目低 :4X4 =16,中8X8 = 64,高16X16 =256,預設設定所有級别都為 中。

  您可以通過指定非預設的網格密度控制分解過程。例如,在不同級别指定不同網格密度對于基于索引空間的大小和空間列中的對象來優化索引可能非常有用。空間索引的網格密度顯示在 sys.spatial_index_tessellations 目錄視圖的 level_1_grid、level_2_grid、level_3_grid 和 level_4_grid 列中。

  将索引空間分解成網格層次結構後,空間索引将逐行讀取空間列中的資料。讀取空間對象(或執行個體)的資料後,空間索引将為該對象執行“分割過程”。分割過程通過将對象與其接觸的網格單元集(“接觸單元”)相關聯使該對象适合網格層次結構。從網格層次結構的第 1 級開始,分割過程以“廣度優先”方式對整個級别進行處理。在可能的情況下,此過程可以連續處理所有四個級别,一次處理一個級别。

  注:以上内容截取SQL Server 2008幫助文檔,詳細請檢視聯機幫助文檔。

五、相關資料

  

相關說明

 本文屬學習筆記文章,願與有志者共同學習交流。歡迎轉載,為了儲存作者的創作熱情,但請在明顯地位标記本文的原文連接配接。  

作      者:Beniao