[前][次][番号順一覧][スレッド一覧]

mysql:11346

From: "pocari" <"pocari" <pocari@xxxxxxxxxx>>
Date: Sat, 23 Apr 2005 09:16:48 +0900
Subject: [mysql 11346] contains()について



私のプログラミング経験はPHP・MySQLで掲示板などの簡単なWEBアプリケーションを
作った事がある程度です。
現在、MySQLのGIS関連の機能を初めて使おうと試みている最中なのですが、理解出来
ない挙動があったので何を間違えているのか教えてください。
contains(g1,g2)はリファレンスによるとg1にg2が完全に含まれているかをチェック
するものらしいですが、
例えば以下の例で期待するものとは違う結果を返します。(contains()以外の部分に
ミスがあるかもしれないので全SQL文を載せます。)

//mysql5 windowsXP
create table geotest(
no int primary key auto_increment,
geo multipoint not null,
spatial index (geo))type=myisam;
insert into geotest (geo) values (mpointfromtext('以下の3つの値の内の1つ
'));

(1)MULTIPOINT(4 5,1 52,5 36,8 32,5 76,7 81,3 43,7 4,9 51,3 19,2 49,5 46,1
1,5 50,1 28,9 74,0 19,9 65,3 52,8 46,6 13,11 13,12 27,11 60,13 65,13 34,6
16,11 7,9 38,9 13,2 55,6 60,0 9,0 27,7 4,7 45,1 2,5 19,5 14,5 16,12 80)
(2)MULTIPOINT(12 46,8 73,3 45,8 67,8 10,9 29,8 36,12 73,13 75,1 50,9 80,0
16,13 10,11 4,2 26,11 23,7 50,6 62,10 48,9 71,0 44,2 77,10 37,9 81,12 47,10
15,8 3,13 39,7 19,3 44,13 11,5 8,11 70,1 5,10 37,6 37,13 51,3 14,0 16,0 1,12
43)
(3)MULTIPOINT(6 3,13 17,9 44,4 67,1 31,13 46,1 7,4 12,5 36,6 38,12 80,1 19,9
8,1 66,9 15,3 63,3 42,9 42,8 10,11 30,3 64,13 15,7 7,12 16,0 36,7 72,2 24,2
4,6 41,1 5,13 81,13 34,5 62,8 12,0 76,10 5,7 71,2 1,13 70,12 4,3 42)

こうしてこの3つのデータを入力した後に、
select no,astext(geo) from geotest where
contains(geo,mpointfromtext('multipoint(1 1,2 2,3 3)'));
を実行すると3件全てが該当します。
1件目のデータには1 1はありますが2 2と3 3はありません。
2,3件目のデータには1 1も2 2も3 3もありません。
この3つの座標を含まないのに該当してしまうのです。

私はこのSQL文を、1レコードに複数の座標点を格納し、指定した全ての座標点を含む
レコードを検索させる意図で書きました。
しかし期待する結果は得られませんでした。
リファレンスは読んだのですが、GIS関連機能についての理解がそもそも間違ってい
るのでしょうか?


[前][次][番号順一覧][スレッド一覧]