皆様の、お力を貸して下さい。
MYSQL5.1以上で ポリゴン用のテーブルを作成。
CREATE TABLE IF NOT EXISTS test1 (
`id` int(11) DEFAULT NULL,
`gn` geometry DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=ujis;
以下のようにデータを挿入します。
これで、ポリゴンデータは作成できているのでしょうか?
INSERT INTO test1 (id,gn)
VALUES(1,
PolygonFromText('POLYGON((
1 1,
5 1,
5 5,
3 6,
1 5,
3 3,
1 1
))')
);
で、SELECTを実行すると、
SELECT * FROM test1 WHERE MBRContains(gn, GeomFromText('Point(2 6)'));
SELECT * FROM test1 WHERE Contains(gn, GeomFromText('Point(2 6)'));
本当は範囲外にある値なのに、SELECTの結果が返ってきます。
なんで返ってくるのでしょうか?
SELECTが悪いのか、INSERTが悪いのか
わかる方、いたら教えて下さい。
自分的には、多角形になってなくて、常に四角形でデータが
生成されているように思うんですよね・
面白そうだからやってみた! 以下のようにSELECT句に書いてみると判り易いよ!!
CREATE TEMPORARY TABLE test1 (id int(11) DEFAULT NULL, gn geometry DEFAULT NULL); INSERT INTO test1 (id, gn) VALUES(1, GeomFromText('Polygon((1 1, 5 1, 5 5, 3 6, 1 5, 3 3, 1 1))')); SELECT id, AsText(gn) , MBRContains(GeomFromText('Point(2 6)'), gn) , MBRWithin(GeomFromText('Point(2 6)'), gn) FROM test1;
AsText でINSERTしたものが正しく書き込まれているか出力!
MBRContains で引数1が引数2に含まれていれば1 !
MBRWithin は引数1が引数2に含まれていなければ1 !
http://dev.mysql.com/doc/refman/5.1-olh/ja/relations-on-geometry...
Contains ってのはごめん! 見当たらなかった!!
質問受付中はコメント欄受け取らない設定なので、回答欄で2回目すみません!!
逆書いちゃいました! 前回と同じURLからですが下手に検証などやらずに、引用だけのほうがよかったかもです! すみません!!
http://dev.mysql.com/doc/refman/5.1-olh/ja/relations-on-geometry...
mysql> SET @g1 = GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))');
mysql> SET @g2 = GeomFromText('Point(1 1)');
mysql> SELECT MBRContains(@g1,@g2), MBRContains(@g2,@g1);
MBRContains(@g1,@g2) MBRContains(@g2,@g1) 1 0
ありがとうございます。
SELECT id, AsText(gn) , MBRContains(GeomFromText('Point(4 4)'), gn) , MBRWithin(GeomFromText('Point(3 5)'), gn) FROM test1;
とやっても
0と1がselectの結果に返ってきますね・・
予想では、1と0になるのですが・・・
なんだろう・・・