ポリゴン内のすべてのポイントを取得しようとしていますが、いくつかのテストの後、最終的にキャッチしました。
STIntersects
ポイントが「視覚的に」ポリゴンにない場合でも、すべてのエンティティに対して常に1を返します。
ポリゴンの作成方向に関する投稿を見つけて試してみましたが、役に立ちませんでした:)
そこで、単純なケースを作成することにしました。
- ロシアのどこかにある 4 つの頂点を持つポリゴン (コーナー: 55 37、56 38)
- この多角形内の 1 点
- そして外にもう一人
ここにポイント付きのGoogleマップへのリンクがあります
そして、このテストの結果は私を轍から抜け出させました
declare @cw geography, @ccw geography, @pointIn geography, @pointOut geography
-- counterclockwise direction from bottom left corner
set @ccw = geography::STPolyFromText (
'POLYGON((
55.0 37.0
,55.0 38.0
,56.0 38.0
,56.0 37.0
,55.0 37.0
))', 4326
)
-- clockwise direction from bottom left corner
set @cw = geography::STPolyFromText (
'POLYGON((
55.0 37.0
,56.0 37.0
,56.0 38.0
,55.0 38.0
,55.0 37.0
))', 4326
)
set @pointIn = geography::Point(55.5, 37.5, 4326)
set @pointOut = geography::Point(54, 36, 4326)
select @pointIn.STIntersects(@ccw) ccw, @pointIn.STIntersects(@cw) cw
-- result: 1 0
--here i should get inversed values, but it didnt happens
select @pointOut.STIntersects(@ccw) ccw, @pointOut.STIntersects(@cw) cw
-- result: 1 0
なぜこれが起こるのですか?何が欠けているのか理解できません
pointIn
ポリゴンが小さい場合は 1 を返し、ポリゴンが全世界から選択した領域を引いたpointOut
場合は 0 を返し、最初のケースでは 0 を返し、2 番目のケースでは 1を返すことを期待しています
ただし、反時計回りのポリゴンでは両方のポイントが 1 を返します。
アップデート
最後に、私のエラーは、geography::STPolyFromText
最初の入力パラメータの順序がlngで、2番目がlatである必要がありました。拡張機能では、順序が
異なります msdn は次のように述べています。Point ( Lat, Long, SRID )