0

私はSQLServerの空間領域に非常に慣れていないので、助けが必要です。私はウェイポイント整理アプリを持っており、湖や川などの地理的ポリゴンの一部であるウェイポイントを見つけるという前提に沿っていくつかのクエリを生成しようとしています。ダウンロードしたデータをテーブルにプリロードしました。shape2sql.exeを使用して、シェープファイルを適切なデータベーステーブルにロードしました。

テーブルは次のとおりです。
ウォーターテーブル-id、name、geog(地理データタイプ)
状態テーブル-id、state_name、state_abbr、geog(地理データタイプ)
郡テーブル-id、name、state_name、geog(地理データタイプ)
ウェイポイントテーブル--id、name、lat、lon、waterid

これらのテーブルに対してクエリを記述して、次のようなものを返すにはどうすればよいですか。-「ミシガン」のすべて
のウェイ
ポイント-「ミシガン」の「モンカルム」郡の「バス湖」のすべてのウェイポイント郡/州の部分)
-ウェイポイントのグループを「処理」し、それらが実際にどの湖に属しているかを見つけることによって、ウェイポイントテーブルの水ID列を自動的に割り当てます
-など。

ありがとう!

これまでに学習したこと:
geog.ToString()をポイントとして、geog.STArea()をエリアとして、geog.STLength()を水からの長さとして選択します。名前は「%basslake%」、STATE=「mi」などです。

BassLakeのレコードと湖の実際の座標を含むポリゴンを返します。
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

4

2 に答える 2

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の1つに設定する必要があります。

これにより、BASSLAKEのすべてのウェイポイントを取得できます。

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
于 2012-09-05T19:41:27.793 に答える
0

わかりました-私が行くにつれて学ぶので、ここに知りたい人のための私自身の質問に対するいくつかの答えがあります。

where句に条件があるさまざまなウェイポイントを見つけるための1つのクエリを次に示します
。SELECT*FROMWaypointTable wp
JOIN WaterTable w
ON wp.geogcolumn.STIntersects(w.geogcolumn)= 1
WHERE w.name LIKE'%bass lake%'ANDw
。状態='mi';

これは、「適合する」場所に基づいてウェイポイントに水IDを割り当てるためのクエリです。UPDATEWaypointTable
wp
SET WaterID =(
SELECT ID
FROM WaterTable
WHERE geogcolumns.STIntersects(wp.geogcolumn)= 1
);

これらのクエリは両方とも非常にうまく機能し、高速です。大好きです!

于 2012-09-07T11:43:33.777 に答える