29

SQL Server 2008 空間データ型を使用しています。すべての状態 (ポリゴンとして) をデータ型 GEOMETRY として持つテーブルがあります。ここで、データ型 GEOGRAPHY としてのポイントの座標 (緯度、経度) がその州内にあるかどうかを確認したいと考えています。

新しい空間データ型を使用した例は見つかりませんでした。現在、何年も前に実装された回避策がありますが、いくつかの欠点があります。

私は SQL Server 2008 と 2012 の両方を使用しています。新しいバージョンに機能強化があれば、それで作業を開始できます。

ありがとう。

更新 1:

もう少しわかりやすくするために、コード サンプルを追加しています。

declare @s geometry  --GeomCol is of this type too.
declare @z geography --GeogCol is of this type too.

select @s = GeomCol
from AllStates
where STATE_ABBR = 'NY'

select @z = GeogCol
from AllZipCodes
where ZipCode = 10101
4

5 に答える 5

35

地理メソッド STIntersects() があなたが望むことをすると思います:

DECLARE @g geography;
DECLARE @h geography;
SET @g = geography::STGeomFromText('POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326);
SET @h = geography::Point(47.653, -122.358, 4326)

SELECT @g.STIntersects(@h)
于 2012-06-15T18:11:06.537 に答える
2

保存されたポリゴンのデータ型を変更できない場合はGEOGRAPHY、入力された緯度と経度を変換して、変換された値GEOMETRYを使用できSTContainsますSTIntersects

DECLARE @PointGeography GEOGRAPHY = geography::Point(43.365267, -80.971974, 4326)
DECLARE @PointGeometry GEOMETRY = geometry::STGeomFromWKB(@PointGeography.STAsBinary(), 4326);

SELECT @PolygonGeometry.STContains(@PointGeometry);

GEOMETRYポリゴンを変換しようとする反対の方向に進むと、GEOGRPAHYエラーが発生しやすく、私の経験からすると失敗する可能性があります。

GEOMETRYまた、緯度と経度の値から直接ポイントを作成しようとすると、 STContains(またはSTIntersects) が機能しないことに注意してください (つまり、必要なときに一致が得られません)。

于 2015-09-18T15:22:58.863 に答える