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 查詢 |
「它比 Shapefile 資料提供者還略快,而 Shapefile 曾是 SharpMap 中最快的提供者。PostgreSQL/PostGIS 相較之下慢 4-6 倍。」
SQL Server 2008 引入原生 `geometry`/`geography` 類型與空間索引,建議遷移策略:
以 WKB+IMAGE+MBR 擴展 SQL Server 空間能力,是**在原生支援缺位時期的卓越工程實踐**,展現「以標準格式為核心、關聯引擎為加速器、應用層為運算引擎」的架構智慧。現代專案應直接擁抱原生空間類型,但此設計模式 (標準序列化 + 關聯索引加速 + 應用層精確運算) 仍具備跨平台、跨資料庫的通用參考價值。