2013-12-18 15 views
6

ジオメトリデータをジオメトリに変換したくないので、STIntersectでtrueを返します。ここでポリゴン内のSQLジオメトリポイントがSTIntersectでtrueを返さない(しかし、ジオメトリを使用してtrueを返す)

は、SQLのコードされています(0)、しかし、私が使用している場合

DECLARE @point GEOGRAPHY = GEOGRAPHY::Point(1, 1, 4326) 
DECLARE @polygon GEOGRAPHY = GEOGRAPHY::STGeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))', 4326) 

SELECT @polygon.STIntersects(@point), @point.STIntersects(@polygon) 

次はfalseを返しますが:それはtrueを返す

DECLARE @point GEOMETRY = GEOMETRY::Point(1, 1, 4326) 
DECLARE @polygon GEOMETRY = GEOMETRY::STGeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))', 4326) 

SELECT @polygon.STIntersects(@point), @point.STIntersects(@polygon) 

、私が行方不明です何かがあるのでしょうか?私が知っているのは、地理学は3D平面であり、ジオメトリはフラットマップですが、ポイントがポリゴンにある場合は、計算にアースを使用しています。

PS:それはこの作品のMicrosoft SQL Server 2012の

答えて

8

を使用してSTContains、STWithin、STOverlaps

と同様に動作しません:あなたはと注意する必要があり

DECLARE @point GEOGRAPHY = GEOGRAPHY::Point(1, 1, 4326) 
DECLARE @polygon GEOGRAPHY = GEOGRAPHY::STGeomFromText('POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))', 4326) 

SELECT @polygon.STIntersects(@point), @point.STIntersects(@polygon) 

geographyのポリゴンを記述する "direction" - 赤道の周りの円として定義されたポリゴンを考えます - 北半球または南半球を指定するつもりでしたか?

hereを参照してください:

を楕円のシステムでは、多角形は意味を持たない、またはオリエンテーションなし、あいまいです。例えば、赤道の周りのリングは、北半球または南半球を表していますか?地理データ型を使用して空間インスタンスを格納する場合は、リングの方向を指定し、インスタンスの位置を正確に記述する必要があります。楕円体系内の多角形の内部は、左手の規則によって定義されます。

+0

ありがとう、私のために働いた。 – MilkTea027

+1

これは_left-hand_ルールを説明する素晴らしいブログエントリです:http://danielwertheim.se/2012/12/03/sqlgeography-in-sql-server-2012-polygon-must-start-on-correct-position- no/ たとえば、ポイントがポリゴンのすべての行の_left_にある場合、そのポリゴンに_交差します。 – bounav

+0

左のルールを説明する上のブログ記事のURLは、次のとおりです。http://danielwertheim.se/sqlgeography-in-sql-server-2012-polygon-must-start-on-correct-position-no/ – Daniel

関連する問題