PHPでのOracle利用(11)

一旦、テーブルを綺麗に掃除してから新しくテストデータを格納する
・空間検索にヒットする空間
・空間検索にヒットしない空間
・空間検索の条件ぎりぎりの空間
この三種類の空間をポリゴン、ライン、マーカーで用意する。丁度、9個のデータが存在するという事
意図する結果が得られれば、6個のWKTが返されるはず

まずはデータを格納してゆく

INSERT INTO gis_t (id,geom) VALUES 
(1,SDO_UTIL.FROM_WKTGEOMETRY(('<WKT>')));

格納したデータ達はこんな感じ

POINT (10.0 10.0)
POINT (5.0 5.0)
POINT (20.0 20.0)
POINT (15.0 15.0)
LINESTRING (0.0 0.0, 10.0 10.0)
LINESTRING (0.0 0.0, 5.0 5.0)
LINESTRING (0.2 0.2, 20.0 20.0)
LINESTRING (0.0 0.0, 20.0 20.0)
POLYGON ((0.0 0.0, 0.0 10.0, 10.0 10.0, 10.0 0.0, 0.0 0.0))
POLYGON ((0.0 0.0, 0.0 5.0, 5.0 5.0, 5.0 0.0, 0.0 0.0))
POLYGON ((0.0 0.0, 0.0 20.0, 20.0 20.0, 20.0 0.0, 0.0 0.0))
POLYGON ((0.0 0.0, 0.0 15.0, 15.0 15.0, 15.0 0.0, 0.0 0.0))

LINESTRINGとかPOLYGONとか複数点を通過する複雑形を空で編んでると、頭がぐるぐるしてくる
条件を満たす正しいテストデータなのかこれ…(怯
とりあえず実行しよう。細かなデバッグはテスト用の本データを格納して他の空間DBと比較すれば良いと信じて

SELECT SDO_UTIL.TO_WKTGEOMETRY(geom) FROM gis_t 
WHERE SDO_FILTER(geom,SDO_UTIL.FROM_WKTGEOMETRY(
'POLYGON ((0.0 0.0, 0.0 15.0, 15.0 15.0, 15.0 0.0, 0.0 0.0))
'
))='TRUE'

実行結果

POLYGON ((0.0 0.0, 0.0 15.0, 15.0 15.0, 15.0 0.0, 0.0 0.0))
POLYGON ((0.0 0.0, 0.0 20.0, 20.0 20.0, 20.0 0.0, 0.0 0.0))
POLYGON ((0.0 0.0, 0.0 10.0, 10.0 10.0, 10.0 0.0, 0.0 0.0))
POLYGON ((0.0 0.0, 0.0 5.0, 5.0 5.0, 5.0 0.0, 0.0 0.0))
LINESTRING (0.0 0.0, 10.0 10.0)
LINESTRING (0.0 0.0, 5.0 5.0)
LINESTRING (0.0 0.0, 20.0 20.0)
LINESTRING (0.2 0.2, 20.0 20.0)
POINT (5.0 5.0)
POINT (10.0 10.0)
POINT (15.0 15.0)

おお、よく見るときっちりマーカーが除外されてる
…っていうかこのテストデータよくよく見てみるとマーカー一つしか除外できないじゃないか(汗
とりあえず、大雑把な空間検索テストは上場か
次は大量のデータを放り込んでWebMapに組み込んでみる