環境: SQL Server 2012 地球上のポリゴンとポイントをプロットするために、これまでに見つけた唯一のオンライン ツールを使用しています。http://www.birdtheme.org/useful/googletool.html 2 つのテーブルがあります。1つは「エリア」をポリゴンとして保存し、もう1つのテーブルは私の質問に関係のないポイントを保存します。簡単にするために、シナリオを sql 変数に減らします。
以下のクエリでは、よく知られている名所に地理データ型を使用しています。ロベン島、ロベン島のポイント、アルカトラズ島のポイントの周りにポリゴンを描きました。
DECLARE @robben_island geography = ('POLYGON((18.351803 -33.788421,18.382788 -33.787494,18.386736 -33.820515,18.354464 -33.822369,18.351803 -33.788421))')
DECLARE @point_in_robben_island geography= ('POINT(18.369226 -33.80554)')
DECLARE @point_in_alcatraz geography= ('POINT(-122.423401 37.827006)')
SELECT @robben_island.STContains(@point_in_robben_island) --returns 'False', but it's not what I expected
SELECT @robben_island.STContains(@point_in_alcatraz) --returns 'True', but it's not what I expected
上記のこのクエリは、正しく理解すれば、 my@point_in_robben_island
は に含まれておらず@robben_island
、@point_in_alcatraz が存在する@robben_island
ことを示しています。
データ型を geography から geometry に変更すると、すべて正常に動作しますが、ジオメトリ データ型を引き続き使用すると、いくつかの問題に遭遇する可能性があるのではないかと心配しています。幾何学が地球の曲率を完全に説明していないという事実によって悪影響を受けないかどうか、私はただ疑問に思っています. 木に触れる。
DECLARE @robben_island geometry = ('POLYGON((18.351803 -33.788421,18.382788 -33.787494,18.386736 -33.820515,18.354464 -33.822369,18.351803 -33.788421))')
DECLARE @point_in_robben_island geometry= ('POINT(18.369226 -33.80554)')
DECLARE @point_in_alcatraz geometry= ('POINT(-122.423401 37.827006)')
SELECT @robben_island.STContains(@point_in_robben_island) --returns 'True' as it should
SELECT @robben_island.STContains(@point_in_alcatraz) --returns 'False' as it should
私の質問は、ジオメトリが期待どおりに機能しているのに、地理データ型が予期しない結果を返すのはなぜですか? どうもありがとうございました。