SQL Server 2008 引入原生空間數據類型 geometry(平面)與 geography(測地/球面),將 GIS 能力直接內建於關係引擎,開啟「位置智能」新紀元。本文系統梳理類型體系、索引機制、標準互操作、應用集成路徑,助力構建高性能空間應用。
| 類型 | 模型 | 坐標系統 | 典型場景 |
|---|---|---|---|
geometry | 平面幾何 | 投影坐標系 (SRID 0 或自定義) | 室內地圖、CAD 圖面、平面分析、游戲地圖 |
geography | 球面測地 | 地理坐標系 (WGS84 SRID 4326 等) | GPS 軌跡、全球物流、地理圍欄、鄰近搜尋 |
兩類型均實現 OGC Simple Features 標準,支持 Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon、GeometryCollection 七大實例類型。
POINT(121.5 25.0)、POLYGON((...)),人類可讀,調試首選。STAsText()、STAsBinary()、AsGml() / 靜態 ::STGeomFromText()、::STGeomFromWKB()、::GeomFromGml()。-- 距離
SELECT @g1.STDistance(@g2); -- geometry: 平面單位 / geography: 米
-- 拓撲關係
@g1.STIntersects(@g2) -- 相交
@g1.STContains(@g2) -- 包含
@g1.STWithin(@g2) -- 在...內部
@g1.STTouches(@g2) -- 邊界接觸
@g1.STOverlaps(@g2) -- 重疊
-- 集合運算
@g1.STUnion(@g2) -- 並集
@g1.STIntersection(@g2) -- 交集
@g1.STDifference(@g2) -- 差集
@g1.STSymDifference(@g2)-- 對稱差集
-- 幾何構造
@g.STBuffer(100) -- 緩衝區
@g.STEnvelope() -- 外包矩形
@g.STConvexHull() -- 凸包
@g.Reduce(0.01) -- 簡化 (容差)
空間索引基於 四層網格分解(Level 1-4),將空間對象映射為網格單元鍵值,存儲於 B+ 樹中。
CREATE SPATIAL INDEX idx_spatial ON Table(GeoCol) USING GEOGRAPHY_GRID/GEOMETRY_GRID WITH (GRIDS = (LEVEL_1=MEDIUM, LEVEL_2=MEDIUM, LEVEL_3=MEDIUM, LEVEL_4=MEDIUM), CELLS_PER_OBJECT = 16)GRIDS:各層網格密度 (LOW/MEDIUM/HIGH),密度越高索引越大但查詢越精準。CELLS_PER_OBJECT:單對象最大覆蓋網格數 (1-8192),複雜多邊形需調大。FORCESEEK 提示強制使用。ALTER INDEX ... REBUILD 重建;分區表支持分區級維護。空間類型為原生 CLR UDT,可直接作為表列、變量、參數、返回值,支持:
SELECT * FROM Stores WHERE GeoCol.STDistance(@userLoc) < 5000SELECT c.Name, s.Address FROM Customers c JOIN Stores s ON c.GeoCol.STDistance(s.GeoCol) < 10000SELECT COUNT(*) FROM Events WHERE GeoCol.STIntersects(@polygon)| 層面 | 技術/工具 | 說明 |
|---|---|---|
| 客戶端庫 | Microsoft.SqlServer.Types (NuGet) | .NET 核心空間類型庫,支援完整 OGC 方法 |
| 前端地圖 | Bing Maps / Azure Maps / Leaflet / OpenLayers | GeoJSON 互轉,WKB 二進制高效傳輸 |
| ETL/數據整合 | SSIS / FME / GDAL (ogr2ogr) | Shapefile、PostGIS、Oracle Spatial 雙向同步 |
| 報表 | SSRS 地圖報表 / Power BI Azure Maps 視覺效果 | 原生消費空間查詢結果 |
geography (SRID 4326);室內/局部投影 → geometry。MakeValid() 修復無效幾何,避免索引創建失敗。STDistance + 篩選器 STIntersects(Buffer) 兩階段過濾。SQL Server 2008 將企業級關係引擎與專業 GIS 能力深度融合,消除了「空間數據單獨存儲、跨系統查詢痛苦」的歷史痛點。善用原生空間類型、索引、標準互操作,可在熟悉的 T-SQL 環境中構建高性能、標準化、易集成的位置智能應用。