2012-09-05 145 views
0

我對SQL Server的空間領域非常陌生,需要一些幫助。我有一個航點組織應用程序,我試圖產生一些查詢,其前提是查找航點,這些航點是湖泊,河流等地理多邊形的一部分。我用我已下載的數據預裝了我的表格。我使用shape2sql.exe將shapefile加載到適當的db表中。SQL Server 2008 R2空間查詢

表如下:
地下水位 - 編號,名稱,地理(geography數據類型)
國表 - ID,STATE_NAME,state_abbr,地理(geography數據類型)
縣表 - 編號,名稱, STATE_NAME,地理(geography數據類型)
航點表 - 編號,名稱,緯度,經度,waterid

我怎樣寫對這些表的查詢返回的東西,如:
- 在「密歇根」
所有航點 - 在'montcalm'的'低音湖'上的所有航點在密歇根州的縣(在密歇根州和國家因此縣/州部分有多個低音湖泊)
- 自動分配航點表的水id列,通過「處理」一組航點並找到他們真正的湖泊屬於
- 等

謝謝!

學會爲止:
選擇geog.ToString()爲點,geog.STArea()作爲面積,geog.STLength()作爲持續 從水 其中名稱LIKE '%低音湖泊%' 和STATE = 'mi'

將返回Bass湖的記錄和該湖的實際座標的多邊形。
POLYGON((-87.670498549804691 46.304831340698243,-87.670543549804691 46.307117340698241,-87.676573549804687 46.313480340698241,-87.68120854980468 46.314821340698245,-87.685168549804686 46.315703340698242,-87.6877605498047 46.313390340698241,-87.685051549804683 46.308827340698244,-87.682360549804685 46.305650340698243,-87.677734549804683 46.304768340698246,-87.674440549804686 46.304336340698242,-87.670498549804691 46.304831340698243)) 1022083.96662664 4027.52433709888

回答

0

好 - 學習,我去所以這裏有一些答案我自己的問題,任何人想知道的。

這裏是用於查找各種航點與where子句中的條件之一的查詢:
SELECT * FROM WaypointTable WP
JOIN地下水位瓦特
ON wp.geogcolumn.STIntersects(w.geogcolumn)= 1
其中W .name LIKE'%bass lake%'
AND w。state ='mi';

這裏是水的分配ID的基於他們在那裏 '適合' 航點查詢:
UPDATE WaypointTable WP
SET WaterID =(
SELECT ID
FROM地下水位
WHERE geogcolumns.STIntersects(WP。 geogcolumn)= 1
);

這兩個查詢的工作非常好,快!愛它!

0

從髖部,在這裏,但也許這樣的拍攝:

UPDATE waypoints 
SET waypoints.WaterId = water.Id 
FROM dbo.Waypoints AS waypoints LEFT JOIN 
    dbo.Water AS water ON geography::Point(waypoints.Lat, waypoints.Lon, 4326).STIntersects(water.geog) 

應在wapoints表中設置的waterId到匹配水ID之一,從地下水位開始。

這應該讓你所有的航點上BASS LAKE

SELECT waypoints.* 
FROM dbo.Waypoints as waypoints INNER JOIN 
    dbo.Water AS water ON geography::Point(waypoints.Lat, waypoints.Lon, 4326).STIntersects(water.geog) = 1 
WHERE water.Name = 'BASS_LAKE' -- OR WHATEVER 
+1

地理位置::點是否需要經緯度和緯度?得到一些有關經度的誤差需要在-90到90之間...... –