MySQLのwithin関数とかは今後に期待する

id:yellow_73:20080507#p2 のつづき。
半年前に複数のリングが云々と言ってたのですが、どういう扱いをしているのか見てやろうと思い立つ。ソースを見て、sql/spatial.h にありました。C++ファイルの方じゃなく、ヘッダファイルの方です。
mbrの比較をしていました。

実験してみる

ということで、リングひとつのポリゴンで、mbrでテストしたら引っかかるけどポリゴン自体でテストしたら引っかからないポイントでテストしてみます。

insert into t_test select geometryfromtext('POLYGON( (1000 1000,1100 1100,1100 1000,1000 1000))');

で、(1050 1080)についてテストしてみる。ポリゴンでテストしているならFalseが出ないといけません。

select within(geometryfromtext('POINT( 1050 1080)'),the_geom) as foo from t_test;
              • +
foo
              • +
1
              • +

やはり、Trueが出ました。

バージョン

5.1系でテストしました。ソースは5.1系と6.0系とを見ました。