MS SQL で空間クエリを実行しており、特定のポイントがエリア内にあるかどうかを確認しています。ポイントを含むエリアのクエリがありますが、クエリは 0 (false) を返します。
declare @area geography;
declare @point geography;
set @area = geography::STGeomFromText('POLYGON((87.3924 76.73386,-61.67004 76.73386,-61.67004 27.12494,87.3924 27.12494,87.3924 76.73386))', 4326);
set @point = geography::STGeomFromText('POINT(-2.7933 56.3412)', 4326);
select @area.STIntersects(@point);
select @point.STIntersects(@area);
両方のSELECT
ステートメントの戻り値は 0 で、交差していないことを意味します。奇妙なことに、領域を少し小さくすると、クエリは 1 を返します。
ポリゴンの順序が重要であることはわかっています。逆方向に指定すると、1 が返されます。質問は次のとおりです。
- それらを指定する順序をどのように知ることができますか? (北、東、南、西の値しかなく、赤道にまたがる可能性があります)
- わずかに小さい領域 (同じ方向) で一致が返されるのはなぜですか?
これらは、これらの WKT の視覚的表現です。
編集: これは、サイズの異なる 3 つのポリゴンです (最大から最小まで):
1. POLYGON((-171.173863132129 82.6444755487971,-109.298863132129 82.6444755487971,-109.298863132129 -2.35770630179323,-171.173863132129 -2.35770630179323,-171.173863132129 82.6444755487971))
2. POLYGON((77.2050431178711 76.1254124064562,-71.8574568821289 76.1254124064562,-71.8574568821289 37.7996777961385,77.2050431178711 37.7996777961385,77.2050431178711 76.1254124064562))
3. POLYGON((38.8847306178711 68.43690689125,-35.6465193821289 68.43690689125,-35.6465193821289 48.1758722609095,38.8847306178711 48.1758722609095,38.8847306178711 68.43690689125))
ここで奇妙なのは、1 番目のポリゴンが英国内のすべてのポイントと一致することです。2 番目のクエリは英国では一致せず、3 番目のクエリは北部のいくつかの地点のみに一致します。
クエリを視覚化すると、2 番目と 3 番目のクエリには完全な UK が含まれていることがわかりますが、最初のクエリは完全にオフになっています。
ですから、問題は本当に、Google マップの境界を空間クエリにどのようにマッピングするかということです。(基本的に、現在のビューポートにあるすべての場所を取得したい)