1-- 2-- GEOMETRY 3-- 4 5-- Back off displayed precision a little bit to reduce platform-to-platform 6-- variation in results. 7SET extra_float_digits TO -3; 8 9-- 10-- Points 11-- 12 13SELECT '' AS four, center(f1) AS center 14 FROM BOX_TBL; 15 16SELECT '' AS four, (@@ f1) AS center 17 FROM BOX_TBL; 18 19SELECT '' AS six, point(f1) AS center 20 FROM CIRCLE_TBL; 21 22SELECT '' AS six, (@@ f1) AS center 23 FROM CIRCLE_TBL; 24 25SELECT '' AS two, (@@ f1) AS center 26 FROM POLYGON_TBL 27 WHERE (# f1) > 2; 28 29-- "is horizontal" function 30SELECT '' AS two, p1.f1 31 FROM POINT_TBL p1 32 WHERE ishorizontal(p1.f1, point '(0,0)'); 33 34-- "is horizontal" operator 35SELECT '' AS two, p1.f1 36 FROM POINT_TBL p1 37 WHERE p1.f1 ?- point '(0,0)'; 38 39-- "is vertical" function 40SELECT '' AS one, p1.f1 41 FROM POINT_TBL p1 42 WHERE isvertical(p1.f1, point '(5.1,34.5)'); 43 44-- "is vertical" operator 45SELECT '' AS one, p1.f1 46 FROM POINT_TBL p1 47 WHERE p1.f1 ?| point '(5.1,34.5)'; 48 49-- 50-- Line segments 51-- 52 53-- intersection 54SELECT '' AS count, p.f1, l.s, l.s # p.f1 AS intersection 55 FROM LSEG_TBL l, POINT_TBL p; 56 57-- closest point 58SELECT '' AS thirty, p.f1, l.s, p.f1 ## l.s AS closest 59 FROM LSEG_TBL l, POINT_TBL p; 60 61-- 62-- Boxes 63-- 64 65SELECT '' as six, box(f1) AS box FROM CIRCLE_TBL; 66 67-- translation 68SELECT '' AS twentyfour, b.f1 + p.f1 AS translation 69 FROM BOX_TBL b, POINT_TBL p; 70 71SELECT '' AS twentyfour, b.f1 - p.f1 AS translation 72 FROM BOX_TBL b, POINT_TBL p; 73 74-- scaling and rotation 75SELECT '' AS twentyfour, b.f1 * p.f1 AS rotation 76 FROM BOX_TBL b, POINT_TBL p; 77 78SELECT '' AS twenty, b.f1 / p.f1 AS rotation 79 FROM BOX_TBL b, POINT_TBL p 80 WHERE (p.f1 <-> point '(0,0)') >= 1; 81 82SELECT f1::box 83 FROM POINT_TBL; 84 85SELECT bound_box(a.f1, b.f1) 86 FROM BOX_TBL a, BOX_TBL b; 87 88-- 89-- Paths 90-- 91 92SELECT '' AS eight, npoints(f1) AS npoints, f1 AS path FROM PATH_TBL; 93 94SELECT '' AS four, path(f1) FROM POLYGON_TBL; 95 96-- translation 97SELECT '' AS eight, p1.f1 + point '(10,10)' AS dist_add 98 FROM PATH_TBL p1; 99 100-- scaling and rotation 101SELECT '' AS eight, p1.f1 * point '(2,-1)' AS dist_mul 102 FROM PATH_TBL p1; 103 104-- 105-- Polygons 106-- 107 108-- containment 109SELECT '' AS twentyfour, p.f1, poly.f1, poly.f1 @> p.f1 AS contains 110 FROM POLYGON_TBL poly, POINT_TBL p; 111 112SELECT '' AS twentyfour, p.f1, poly.f1, p.f1 <@ poly.f1 AS contained 113 FROM POLYGON_TBL poly, POINT_TBL p; 114 115SELECT '' AS four, npoints(f1) AS npoints, f1 AS polygon 116 FROM POLYGON_TBL; 117 118SELECT '' AS four, polygon(f1) 119 FROM BOX_TBL; 120 121SELECT '' AS four, polygon(f1) 122 FROM PATH_TBL WHERE isclosed(f1); 123 124SELECT '' AS four, f1 AS open_path, polygon( pclose(f1)) AS polygon 125 FROM PATH_TBL 126 WHERE isopen(f1); 127 128-- convert circles to polygons using the default number of points 129SELECT '' AS six, polygon(f1) 130 FROM CIRCLE_TBL; 131 132-- convert the circle to an 8-point polygon 133SELECT '' AS six, polygon(8, f1) 134 FROM CIRCLE_TBL; 135 136-- 137-- Circles 138-- 139 140SELECT '' AS six, circle(f1, 50.0) 141 FROM POINT_TBL; 142 143SELECT '' AS four, circle(f1) 144 FROM BOX_TBL; 145 146SELECT '' AS two, circle(f1) 147 FROM POLYGON_TBL 148 WHERE (# f1) >= 3; 149 150SELECT '' AS twentyfour, c1.f1 AS circle, p1.f1 AS point, (p1.f1 <-> c1.f1) AS distance 151 FROM CIRCLE_TBL c1, POINT_TBL p1 152 WHERE (p1.f1 <-> c1.f1) > 0 153 ORDER BY distance, area(c1.f1), p1.f1[0]; 154