ポリゴン初心者で申し訳ないのですが

皆様の、お力を貸して下さい。

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が悪いのか
わかる方、いたら教えて下さい。

自分的には、多角形になってなくて、常に四角形でデータが
生成されているように思うんですよね・

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/03/25 20:40:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:GreenStar No.1

回答回数192ベストアンサー獲得回数46

ポイント35pt

面白そうだからやってみた! 以下のように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 ってのはごめん! 見当たらなかった!!

id:hopefully

ありがとうございます。

SELECT id, AsText(gn) , MBRContains(GeomFromText('Point(4 4)'), gn) , MBRWithin(GeomFromText('Point(3 5)'), gn) FROM test1;

とやっても

0と1がselectの結果に返ってきますね・・

予想では、1と0になるのですが・・・

なんだろう・・・

2010/03/19 00:14:13
id:GreenStar No.2

回答回数192ベストアンサー獲得回数46

ポイント35pt

質問受付中はコメント欄受け取らない設定なので、回答欄で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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません