1

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 マップの境界を空間クエリにどのようにマッピングするかということです。(基本的に、現在のビューポートにあるすべての場所を取得したい)

4

1 に答える 1

1

ポイントはポリゴン内にあると思いますが(平面モデル上にあります)、楕円体モデル上ではありません。

ポリゴンのサイズが大きくなるにつれて、ポリゴンの座標が不足することに苦しんでいます。座標がないため、長方形の経度 (上と下) をたどる線が地球の曲率に沿って「曲がり」ます。これは、それらを「まっすぐ」に保つための追加の座標 (またはアンカー ポイント) がないためです。この曲がりは、ポリゴンのサイズが大きくなるにつれて顕著になるため、ポリゴンが小さいほど期待どおりの結果が得られます。Google マップが使用する投影システムのため、これは表示されません (ただし、記憶が正しければ、ポリゴンを描画するとgeodesic: true表示される可能性があります)。

メルカトル図法でこれを示す下の画像を添付しました。ポイントは 200 KM バッファリングされているので、はっきりと見ることができます。これは、このような大きなズーム レベルで 4326 を使用することの欠点です。

次のことができます。

  1. Geometry を使用します (地理オブジェクトを主に使用する場合は、通常はお勧めしませんが)。平面モデルはこの問題を取り除きます。

  2. 境界ボックスに手動で座標を追加し、緯度の値を同じに保ちながら、上下の線に沿って経度を変更します。ただし、これはまだ完全ではありませんが、より良い結果が得られます。

  3. 特定のレベルのズーム後にポイントを表示する必要があるかどうかを検討してください。ポイントがたくさんある場合は、それほど役に立たない可能性があります。

多角形と点

于 2014-03-08T14:22:10.373 に答える