目的
WKT(Well-known text)ではPOLYGONの外側を構成する頂点は反時計回りに書くのがOGC標準で定められているとのこと(WikipediaのWKTの記事より)。
でも、常に反時計回りに頂点を書くのが大変なので、時計回りでも正しく動くか簡単に試してみた。
確認したバージョン
PostGIS 2.1.3、 SpatiaLite 4.3.0aで確認
方法
以下のSQLをPostGIS、SpatiaLiteで実行する。
clockwise_intersects
、counterclockwise_intersects
の両者がtrueに相当する値を返すことを期待する。
SELECT
ST_Intersects(clockwise, point) AS clockwise_intersects,
ST_Intersects(counterclockwise, point) AS counterclockwise_intersects
FROM
(
SELECT
ST_GeomFromText('POLYGON ((0 1, 1 1, 1 0, 0 0, 0 1))') AS clockwise,
ST_GeomFromText('POLYGON ((0 1, 0 0, 1 0, 1 1, 0 1))') AS counterclockwise,
ST_GeomFromText('POINT (0.5 0.5)') AS point
) AS t
;
結果
PostGIS 2.1.3
出力
clockwise_intersects | counterclockwise_intersects
----------------------+-----------------------------
t | t
(1 行)
両者ともtrueが返された。期待通り!
SpatiaLite 4.3.0a
出力
clockwise_intersects counterclockwise_intersects
1 1
どちらもtrueに相当する1が返された。期待通り!
まとめ
- WKTでPOLYGONを記述する際、外側の頂点を反時計回り、時計回りの両方で与えてみた。
-
ST_Intersects()
関数の引数とする限り、時計回り/反時計回りとも正しく動作した。 - 今後、正しく動作しないケースが見つかった場合はここでお知らせしたい。