| -- |
| -- POLYGON |
| -- |
| -- polygon logic |
| -- |
| -- 3 o |
| -- | |
| -- 2 + | |
| -- / | |
| -- 1 # o + |
| -- / | |
| -- 0 #-----o-+ |
| -- |
| -- 0 1 2 3 4 |
| -- |
| |
| CREATE TABLE POLYGON_TBL(s serial, f1 polygon); |
| |
| |
| INSERT INTO POLYGON_TBL(f1) VALUES ('(2.0,0.0),(2.0,4.0),(0.0,0.0)'); |
| |
| INSERT INTO POLYGON_TBL(f1) VALUES ('(3.0,1.0),(3.0,3.0),(1.0,0.0)'); |
| |
| -- degenerate polygons |
| INSERT INTO POLYGON_TBL(f1) VALUES ('(0.0,0.0)'); |
| |
| INSERT INTO POLYGON_TBL(f1) VALUES ('(0.0,1.0),(0.0,1.0)'); |
| |
| -- bad polygon input strings |
| INSERT INTO POLYGON_TBL(f1) VALUES ('0.0'); |
| |
| INSERT INTO POLYGON_TBL(f1) VALUES ('(0.0 0.0'); |
| |
| INSERT INTO POLYGON_TBL(f1) VALUES ('(0,1,2)'); |
| |
| INSERT INTO POLYGON_TBL(f1) VALUES ('(0,1,2,3'); |
| |
| INSERT INTO POLYGON_TBL(f1) VALUES ('asdf'); |
| |
| SELECT '' AS four, * FROM POLYGON_TBL ORDER BY s; |
| |
| -- overlap |
| SELECT '' AS three, p.* |
| FROM POLYGON_TBL p |
| WHERE p.f1 && '(3.0,1.0),(3.0,3.0),(1.0,0.0)' ORDER BY s; |
| |
| -- left overlap |
| SELECT '' AS four, p.* |
| FROM POLYGON_TBL p |
| WHERE p.f1 &< '(3.0,1.0),(3.0,3.0),(1.0,0.0)' ORDER BY s; |
| |
| -- right overlap |
| SELECT '' AS two, p.* |
| FROM POLYGON_TBL p |
| WHERE p.f1 &> '(3.0,1.0),(3.0,3.0),(1.0,0.0)' ORDER BY s; |
| |
| -- left of |
| SELECT '' AS one, p.* |
| FROM POLYGON_TBL p |
| WHERE p.f1 << '(3.0,1.0),(3.0,3.0),(1.0,0.0)' ORDER BY s; |
| |
| -- right of |
| SELECT '' AS zero, p.* |
| FROM POLYGON_TBL p |
| WHERE p.f1 >> '(3.0,1.0),(3.0,3.0),(1.0,0.0)' ORDER BY s; |
| |
| -- contained |
| SELECT '' AS one, p.* |
| FROM POLYGON_TBL p |
| WHERE p.f1 <@ polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' ORDER BY s; |
| |
| -- same |
| SELECT '' AS one, p.* |
| FROM POLYGON_TBL p |
| WHERE p.f1 ~= polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' ORDER BY s; |
| |
| -- contains |
| SELECT '' AS one, p.* |
| FROM POLYGON_TBL p |
| WHERE p.f1 @> polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' ORDER BY s; |
| |
| -- |
| -- polygon logic |
| -- |
| -- 3 o |
| -- | |
| -- 2 + | |
| -- / | |
| -- 1 / o + |
| -- / | |
| -- 0 +-----o-+ |
| -- |
| -- 0 1 2 3 4 |
| -- |
| -- left of |
| SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' << polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS false; |
| |
| -- left overlap |
| SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' << polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS true; |
| |
| -- right overlap |
| SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' &> polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS false; |
| |
| -- right of |
| SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' >> polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS false; |
| |
| -- contained in |
| SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' <@ polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS false; |
| |
| -- contains |
| SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' @> polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS false; |
| |
| -- same |
| SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' ~= polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS false; |
| |
| -- overlap |
| SELECT polygon '(2.0,0.0),(2.0,4.0),(0.0,0.0)' && polygon '(3.0,1.0),(3.0,3.0),(1.0,0.0)' AS true; |
| |