首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

擴展 SQL Server 空間功能:以 WKB 影像欄位儲存幾何體並整合 SharpMap 實現高效渲染

     編輯:關於SqlServer

前言:SQL Server 2005/2008 缺乏原生空間類型的歷史缺口

SQL Server 2008 前無原生 `geometry`/`geography` 類型。CLR 使用者定義類型 (UDT) 受限於 **8000 位元組上限** (約 500 點),無法支援海岸線、邊界等複雜幾何體;且不支援繼承,難以建構完整物件模型。作者創新採用 **WKB (Well-Known Binary) + IMAGE 欄位 + 外接矩形座標欄位** 方案,突破儲存與查詢瓶頸。

核心架構設計

資料表結構


CREATE TABLE SpatialObjects (
    ID           INT IDENTITY PRIMARY KEY,
    GeomWKB      IMAGE NOT NULL,                    -- WKB 二進位幾何體,支援 2GB
    MinX         FLOAT NOT NULL, MaxX FLOAT NOT NULL,  -- 外接矩形 (MBR)
    MinY         FLOAT NOT NULL, MaxY FLOAT NOT NULL,
    Properties   XML,                               -- 屬性資料 (名稱、類型、樣式等)
    -- 空間索引由應用層維護,或建立計算欄位 + 一般索引
);

關鍵設計決策

挑戰解決方案原理
幾何體超過 8000 位元組使用 IMAGE 欄位 (2GB 上限)VARBINARY(MAX) / IMAGE 為 LOB 儲存,無 8K 限制
空間查詢效能 (相交、包含、距離)冗餘儲存 MBR 四座標 (MinX, MaxX, MinY, MaxY)以一般 B-tree 索引快速篩選候選物件,再由應用層精確幾何運算驗證
標準化互通採用 WKB (Well-Known Binary) 格式OGC 標準,SharpMap、GDAL、PostGIS、QGIS 皆原生支援讀寫
屬性擴充性使用 XML 欄位儲存動態屬性免 DDL 變更即可新增屬性,支援 XPath/XQuery 查詢

SharpMap 整合實作兩大模組

1. 匯入工具:Shapefile → SQL Server

  • 讀取 Shapefile (.shp/.dbf) 幾何體與屬性。
  • 轉換幾何體為 WKB (SharpMap 內建 `WKBWriter`)。
  • 計算 MBR (MinX, MaxX, MinY, MaxY)。
  • 批次寫入資料表 (參數化命令,效能佳)。

2. 資料提供者:SharpMap 即時渲染

  • 實作 `IProvider` 介面 (`GetFeaturesInView`, `GetFeature` 等)。
  • 查詢邏輯:
    1. 以檢視範圍 (View BBox) 為條件,查詢 MBR 相交的候選列 (SQL `WHERE MinX <= @MaxX AND MaxX >= @MinX ...`)。
    2. 將 WKB 反序列化為 SharpMap 幾何體物件 (`WKBReader`)。
    3. 精確幾何關係判斷 (Intersects, Within, Distance)。
    4. 回傳 `FeatureDataRow` 集合供渲染引擎繪製。

效能實測驚人結果

「它比 Shapefile 資料提供者還略快,而 Shapefile 曾是 SharpMap 中最快的提供者。PostgreSQL/PostGIS 相較之下慢 4-6 倍。」

效能優勢來源

  • MBR 索引篩選 在關聯引擎層完成,僅傳輸候選幾何體 WKB,網路/IO 極小。
  • WKB 二進位緊湊,比 Shapefile 文字/二進位混合格式解析快。
  • 無序列化/投影轉換開銷 (Shapefile 常需投影轉換)。
  • 資料庫連線池、查詢計畫快取、平行查詢** 企業級引擎紅利。

部署與遷移指南 (SQL Server 2008+ 現代化)

SQL Server 2008 引入原生 `geometry`/`geography` 類型與空間索引,建議遷移策略:

  1. 新專案直接使用原生類型: `geometry::STGeomFromWKB(@wkb, @srid)` 導入,`geometry::STAsBinary()` 導出。
  2. 舊系統漸進式遷移:
    • 新增 `geometry` 計算欄位:`ALTER TABLE ADD GeomNative AS geometry::STGeomFromWKB(GeomWKB, 4326) PERSISTED;`。
    • 建立空間索引:`CREATE SPATIAL INDEX ... ON GeomNative;`。
    • 應用層逐步切換查詢至原生類型 (`STIntersects`, `STDistance` 等)。
    • 驗證無誤後移除 WKB/IMAGE/MBR 欄位。
  3. SharpMap 現代版 已支援原生 SQL Server 空間提供者 (`SharpMap.Data.Providers.SqlServer2008`),優先使用。

結語

以 WKB+IMAGE+MBR 擴展 SQL Server 空間能力,是**在原生支援缺位時期的卓越工程實踐**,展現「以標準格式為核心、關聯引擎為加速器、應用層為運算引擎」的架構智慧。現代專案應直接擁抱原生空間類型,但此設計模式 (標準序列化 + 關聯索引加速 + 應用層精確運算) 仍具備跨平台、跨資料庫的通用參考價值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved