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

SQL Server 2008 空間資料類型實戰:地理位置查詢與空間索引

     編輯:關於SqlServer

SQL Server 2008 引入 geometry (平面) 與 geography (地球曲面) 兩大空間資料類型,支援 OGC 標準方法。本實驗以 Adventure Works 自行車通路為例,示範建立空間資料、查詢空間關係、建立空間索引。

實驗環境與目標

  • 預估時間:60 分鐘
  • 目標:建立空間資料類型實例、使用空間方法、建立空間索引
  • 前置條件:T-SQL 腳本與 SSMS 經驗
  • 虛擬機:Sql08,帳號 administrator / password01!

核心場景

管理全美通路地理資訊,支援查詢:

  • 哪些通路在某銷售區域內? (STIntersects, STWithin)
  • 某銷售區域面積多大? (STArea)
  • 哪些通路離特定地理區域最近? (STDistance)

關鍵實作步驟

  1. 建立資料表含空間欄位:
    CREATE TABLE Store (
        StoreID INT PRIMARY KEY,
        StoreName NVARCHAR(100),
        StoreLocation GEOGRAPHY  -- 地理空間類型
    );
  2. 插入空間資料 (GML 格式):
    INSERT INTO Store (StoreName, StoreLocation)
    VALUES ('Aerobic Exercise Company',
        geography::GeomFromGML(
            '
                34.235504 -118.988734
            ', 4326)); -- SRID 4326 = WGS84
  3. 空間查詢範例:
    -- 找出在某多邊形銷售區域內的通路
    DECLARE @region GEOGRAPHY = geography::STPolyFromText(
        'POLYGON((-120 34, -118 34, -118 36, -120 36, -120 34))', 4326);
    SELECT StoreName FROM Store
    WHERE StoreLocation.STWithin(@region) = 1;
  4. 建立空間索引 (需資料表有主鍵):
    CREATE SPATIAL INDEX idx_Store_Location ON Store(StoreLocation)
    USING GEOGRAPHY_GRID
    WITH (GRIDS = (LEVEL_1 = MEDIUM, LEVEL_2 = MEDIUM, LEVEL_3 = MEDIUM, LEVEL_4 = MEDIUM),
          CELLS_PER_OBJECT = 16);

空間索引原理

空間索引將地球表面分解為階層式網格,每個物件對應覆蓋的網格儲存格。查詢時先以索引快速篩選候選物件,再精確計算空間關係,大幅降低計算量。

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