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関連機能についての理解がそもそも間違ってい るのでしょうか?