跳轉到內容

Microsoft SQL Server/地理空間資料

來自華夏公益教科書,開放的書籍,開放的世界

微軟在 2008 年釋出的 SQL Server 最終為 SQL Server 產品套件帶來了地理空間支援。

這允許將空間資料儲存在 SQL 表中(以點、線和多邊形的形式),以及一組函式來操作這些資料。還包括新的空間索引來支援這些函式的執行。

示例資料庫

[編輯 | 編輯原始碼]

本書將使用一個示例資料庫作為其大多數示例的基礎。建立該資料庫的程式碼可以在附錄 A 中找到,應該按照那裡的說明執行,以便能夠在本書中使用示例程式碼。以下是該資料庫及其包含資料的簡要描述。如果您願意,可以跳過此部分,直接進入有趣的內容,在學習過程中找出資料庫的作用。

地理空間資料型別

[編輯 | 編輯原始碼]

SQL Server 2008 支援兩種不同的空間資料型別:GEOMETRY 和 GEOGRAPHY。

  • GEOMETRY - 此資料型別將資料儲存在投影平面表面中。
  • GEOGRAPHY - 此資料型別將資料儲存在橢球模型中。

幾何類定義了一個層次結構,如下所示

從圖中我們可以看到,有七種可例項化的空間資料型別(橙色)。即


點是一個表示單個位置的物件。它始終具有 X 和 Y 座標,並且可以另外具有海拔 Z 和度量 M。

多點物件是點的集合。它與線串和多邊形不同,因為集合中的點之間沒有隱含的連線。因此,多點物件的邊界為空。

線串同樣是點的集合。但是,這與多點物件不同,因為點是有序的,線串物件還表示連線點的線段。

多線串

[編輯 | 編輯原始碼]

多線串只是線串的集合。

多邊形

[編輯 | 編輯原始碼]

多邊形是表示二維表面的點的集合。多邊形可以包含一個外部環和多個內部環。為了使多邊形物件成為有效的例項,內部環不能交叉。

多邊形集合

[編輯 | 編輯原始碼]

多邊形集合是多邊形的集合。

幾何集合

[編輯 | 編輯原始碼]

幾何集合是幾何(或地理)物件的集合。

視覺化

[編輯 | 編輯原始碼]

將地理空間資料匯入 SQL Server

[編輯 | 編輯原始碼]

資料可以從以下格式直接匯入 SQL Server:WKT、WKB 和 GML。有關這些格式的更多詳細資訊,請參閱附錄。

那我無法從 shape 檔案匯入資料嗎?

[編輯 | 編輯原始碼]

目前您無法直接執行此操作,將來版本是否會改變還有待觀察。如果您的資料在 shape 檔案或其他格式中,則需要找到一種方法進行轉換。有許多 Microsoft Spatial 合作伙伴提供工具,可以讓您執行此操作,但顯然這會涉及額外的許可費用。我相信隨著 SQL Server 2008 版本的釋出,免費版本將開始出現。目前,Morten Nielsen 在他的部落格上釋出了這樣一個免費工具 [[1]],Tillmann Eitelberg 在 CodePlex 上釋出了 MS-PL 下的 SSIS shape 檔案源 [[2]]。AutoConViz(由 Sugam Sharma、U Sunday Tim 和 Shashi Gadia 開發)還提供基於 GUI 的空間格式轉換(shape 檔案格式到 GML)作為其核心功能之一 [[3]]。

匯入函式

[編輯 | 編輯原始碼]

將空間資料匯入 SQL Server 2008 是透過 STxxxfromyyy 函式集來完成的,其中 xxx 可以是以下之一

  • Geom - 用於匯入任何空間資料型別。
  • Point - 用於匯入點資料。
  • Line - 用於匯入線資料。
  • Poly - 用於匯入多邊形資料。


  • GeomColl - 用於匯入幾何集合。
  • MPoint - 用於匯入多點資料。
  • MLine - 用於匯入多線資料。
  • MPoly - 用於匯入多邊形資料。


yyy 可以是

  • Text - 用於匯入 WKT 格式的資料。
  • WKB - 用於匯入 WKB 格式的資料。
  • Gml - 用於匯入 GML 格式的資料。(注意 Gml 的大小寫,此函式缺少前導 ST,例如:GeomfromGml(.....))
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 51)', 0))
GO

地理空間 SQL 函式

[編輯 | 編輯原始碼]
  • STRelate
  • STDisjoint
  • STIntersects
  • STTouches
  • STCrosses
  • STWithin
  • STContains
  • STOverlaps
  • STBuffer
  • STConvexHull
  • STIntersection
  • STUnion
  • STGeomFromText
  • STPointFromText
  • STLineFromText
  • STPolyFromText
  • STGeomFromWKB
  • STPointFromWKB
  • STLineFromWKB
  • STPolyFromWKB

A. 示例資料庫程式碼

B. WKT(Well Known Text)格式定義

C. GML(地理標記語言)格式定義

參考文獻

[編輯 | 編輯原始碼]
  • Directions 雜誌對 Ed Katibah 的採訪 [4]
  • Isaac Kunen 的部落格 [5]
  • Microsoft 空間論壇 [6]
  • Microsoft SQL Server 2008 空間資料概述 [7]
  • Microsoft SQL Server 2008 空間資料資料表 [8]
  • Microsoft SQL Server 2008 空間資料白皮書 [9]
  • Microsoft 聯機叢書 [10]
  • 維基百科 [11]
  • AutoConViz 用於基於 GUI 的空間格式線上轉換 [12]
華夏公益教科書