2012-11-12 42 views
1

我有一張名爲'Region'的表,它有2000條記錄。在區域表中,我有一個稱爲點的幾何列。現在我有另一個名爲Bus_Route的表,其中包含1000萬條記錄的稱爲'幾何'的幾何列。現在我想要說明那個地區的觀點。我正在使用以下查詢來查看我的觀點在該地區的天氣情況,還是不使用STcontains。但是這個查詢需要很長時間(大約3天)。我在我的Bus_Route表上創建了空間索引,它有1000萬條記錄,但這並沒有幫助。即使使用空間索引,STcontains()查詢的運行速度也很慢

  Select 
       Region.BlockID, 
       Bus_Route.geometry 
       from 
       Bus_Route,       
       Region 
      where 

       Region.points.STContains(Bus_Route.geometry) = 1 

請幫忙!

回答

1

一對夫婦的意見:

  1. 因爲你的巴士可能不通過平地跑,用 地理代替幾何。
  2. 如果你打算做一個交叉連接 (其中,你作爲表示正在做查詢),顯式地說明通過 做類似:

    選擇 Region.BlockID, Bus_Route.geometry 從Bus_Route
    交叉聯接區域

  3. 你有沒有看使用STIntersects代替STContains?如果我正確解釋你的問題,你正在尋找給定路線經過的地區,這意味着兩個地理實例之間的交集將是非空的。您所寫的查詢將顯示完全封閉在區域內的路線。

+0

嗨本, 感謝您的答覆。 我已經將我的幾何體轉換爲地理現在的問題是我有4000個緯度/長點使得一個區域,並且我想檢查該區域(4000點)中是否存在1點緯度/長度。 我該如何使用STContains地理? DECLARE @g geography; DECLARE @h geography; SET @g = 4000點緯度/長度存儲在數據庫中 SET @h = –

+0

當你說你有4000個點作爲一個區域時,這些點是否定義了區域邊界的線段的端點?我不是在這裏釣點,但這本身就是一個有趣的問題(即你應該爲此提出一個單獨的問題)。我的第一個猜測是,你將不得不從點獲得該地區的文本表示,然後使用靜態地理方法將其解析回地理實例。儘管如此,這對我來說似乎是迂迴的;我會做一些挖掘。 –

+0

感謝您的回覆。我會更詳細地解釋。我有地理形式的區域(構成區域的緯度/長度的輪廓)的經緯度。現在我有1點經/分,我想確定這個點是否在我的區域內。我將如何做到這一點?因此,這裏4000點使一個區域的輪廓,1點是檢查該區域是否存在。我將如何檢查?謝謝你的答案Ben! –

相關問題