2000-01-05 07:07:58 +01:00
|
|
|
--
|
|
|
|
-- GEOMETRY
|
|
|
|
--
|
|
|
|
|
2002-11-08 21:09:55 +01:00
|
|
|
-- Back off displayed precision a little bit to reduce platform-to-platform
|
|
|
|
-- variation in results.
|
|
|
|
SET extra_float_digits TO -3;
|
|
|
|
|
1997-05-11 17:42:09 +02:00
|
|
|
--
|
|
|
|
-- Points
|
|
|
|
--
|
|
|
|
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS four, center(f1) AS center
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM BOX_TBL;
|
1997-05-11 17:42:09 +02:00
|
|
|
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS four, (@@ f1) AS center
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM BOX_TBL;
|
|
|
|
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS six, point(f1) AS center
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM CIRCLE_TBL;
|
|
|
|
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS six, (@@ f1) AS center
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM CIRCLE_TBL;
|
|
|
|
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS two, (@@ f1) AS center
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM POLYGON_TBL
|
|
|
|
WHERE (# f1) > 2;
|
|
|
|
|
|
|
|
-- "is horizontal" function
|
1997-05-11 17:42:09 +02:00
|
|
|
SELECT '' AS two, p1.f1
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM POINT_TBL p1
|
2000-01-05 07:07:58 +01:00
|
|
|
WHERE ishorizontal(p1.f1, point '(0,0)');
|
1997-05-11 17:42:09 +02:00
|
|
|
|
1997-07-29 18:22:48 +02:00
|
|
|
-- "is horizontal" operator
|
|
|
|
SELECT '' AS two, p1.f1
|
|
|
|
FROM POINT_TBL p1
|
2000-01-05 07:07:58 +01:00
|
|
|
WHERE p1.f1 ?- point '(0,0)';
|
1997-07-29 18:22:48 +02:00
|
|
|
|
|
|
|
-- "is vertical" function
|
|
|
|
SELECT '' AS one, p1.f1
|
|
|
|
FROM POINT_TBL p1
|
2000-01-05 07:07:58 +01:00
|
|
|
WHERE isvertical(p1.f1, point '(5.1,34.5)');
|
1997-07-29 18:22:48 +02:00
|
|
|
|
|
|
|
-- "is vertical" operator
|
1997-05-11 17:42:09 +02:00
|
|
|
SELECT '' AS one, p1.f1
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM POINT_TBL p1
|
2000-01-05 07:07:58 +01:00
|
|
|
WHERE p1.f1 ?| point '(5.1,34.5)';
|
1997-05-11 17:42:09 +02:00
|
|
|
|
|
|
|
--
|
|
|
|
-- Line segments
|
|
|
|
--
|
|
|
|
|
1997-07-29 18:22:48 +02:00
|
|
|
-- intersection
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS count, p.f1, l.s, l.s # p.f1 AS intersection
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM LSEG_TBL l, POINT_TBL p;
|
|
|
|
|
|
|
|
-- closest point
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS thirty, p.f1, l.s, p.f1 ## l.s AS closest
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM LSEG_TBL l, POINT_TBL p;
|
|
|
|
|
1997-05-11 17:42:09 +02:00
|
|
|
--
|
|
|
|
-- Boxes
|
|
|
|
--
|
|
|
|
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' as six, box(f1) AS box FROM CIRCLE_TBL;
|
1997-05-11 17:42:09 +02:00
|
|
|
|
|
|
|
-- translation
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS twentyfour, b.f1 + p.f1 AS translation
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM BOX_TBL b, POINT_TBL p;
|
|
|
|
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS twentyfour, b.f1 - p.f1 AS translation
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM BOX_TBL b, POINT_TBL p;
|
1997-05-11 17:42:09 +02:00
|
|
|
|
|
|
|
-- scaling and rotation
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS twentyfour, b.f1 * p.f1 AS rotation
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM BOX_TBL b, POINT_TBL p;
|
|
|
|
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS twenty, b.f1 / p.f1 AS rotation
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM BOX_TBL b, POINT_TBL p
|
2000-01-05 07:07:58 +01:00
|
|
|
WHERE (p.f1 <-> point '(0,0)') >= 1;
|
1997-05-11 17:42:09 +02:00
|
|
|
|
2015-05-05 20:22:24 +02:00
|
|
|
SELECT f1::box
|
|
|
|
FROM POINT_TBL;
|
|
|
|
|
|
|
|
SELECT bound_box(a.f1, b.f1)
|
|
|
|
FROM BOX_TBL a, BOX_TBL b;
|
|
|
|
|
1997-05-11 17:42:09 +02:00
|
|
|
--
|
|
|
|
-- Paths
|
|
|
|
--
|
|
|
|
|
2000-03-15 00:06:59 +01:00
|
|
|
SELECT '' AS eight, npoints(f1) AS npoints, f1 AS path FROM PATH_TBL;
|
1997-05-11 17:42:09 +02:00
|
|
|
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS four, path(f1) FROM POLYGON_TBL;
|
1997-05-11 17:42:09 +02:00
|
|
|
|
|
|
|
-- translation
|
2000-01-05 07:07:58 +01:00
|
|
|
SELECT '' AS eight, p1.f1 + point '(10,10)' AS dist_add
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM PATH_TBL p1;
|
1997-05-11 17:42:09 +02:00
|
|
|
|
|
|
|
-- scaling and rotation
|
2000-01-05 07:07:58 +01:00
|
|
|
SELECT '' AS eight, p1.f1 * point '(2,-1)' AS dist_mul
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM PATH_TBL p1;
|
1997-05-11 17:42:09 +02:00
|
|
|
|
|
|
|
--
|
|
|
|
-- Polygons
|
|
|
|
--
|
|
|
|
|
1997-07-29 18:22:48 +02:00
|
|
|
-- containment
|
2006-09-10 02:29:35 +02:00
|
|
|
SELECT '' AS twentyfour, p.f1, poly.f1, poly.f1 @> p.f1 AS contains
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM POLYGON_TBL poly, POINT_TBL p;
|
1997-05-11 17:42:09 +02:00
|
|
|
|
2006-09-10 02:29:35 +02:00
|
|
|
SELECT '' AS twentyfour, p.f1, poly.f1, p.f1 <@ poly.f1 AS contained
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM POLYGON_TBL poly, POINT_TBL p;
|
1997-05-11 17:42:09 +02:00
|
|
|
|
2000-03-15 00:06:59 +01:00
|
|
|
SELECT '' AS four, npoints(f1) AS npoints, f1 AS polygon
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM POLYGON_TBL;
|
1997-05-11 17:42:09 +02:00
|
|
|
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS four, polygon(f1)
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM BOX_TBL;
|
|
|
|
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS four, polygon(f1)
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM PATH_TBL WHERE isclosed(f1);
|
|
|
|
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS four, f1 AS open_path, polygon( pclose(f1)) AS polygon
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM PATH_TBL
|
|
|
|
WHERE isopen(f1);
|
1997-05-11 17:42:09 +02:00
|
|
|
|
|
|
|
-- convert circles to polygons using the default number of points
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS six, polygon(f1)
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM CIRCLE_TBL;
|
1997-05-11 17:42:09 +02:00
|
|
|
|
|
|
|
-- convert the circle to an 8-point polygon
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS six, polygon(8, f1)
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM CIRCLE_TBL;
|
1997-05-11 17:42:09 +02:00
|
|
|
|
|
|
|
--
|
|
|
|
-- Circles
|
|
|
|
--
|
|
|
|
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS six, circle(f1, 50.0)
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM POINT_TBL;
|
|
|
|
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS four, circle(f1)
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM BOX_TBL;
|
|
|
|
|
1997-09-01 08:18:45 +02:00
|
|
|
SELECT '' AS two, circle(f1)
|
1997-07-29 18:22:48 +02:00
|
|
|
FROM POLYGON_TBL
|
1997-09-01 08:18:45 +02:00
|
|
|
WHERE (# f1) >= 3;
|
1997-05-11 17:42:09 +02:00
|
|
|
|
1997-07-29 18:22:48 +02:00
|
|
|
SELECT '' AS twentyfour, c1.f1 AS circle, p1.f1 AS point, (p1.f1 <-> c1.f1) AS distance
|
|
|
|
FROM CIRCLE_TBL c1, POINT_TBL p1
|
|
|
|
WHERE (p1.f1 <-> c1.f1) > 0
|
2007-01-09 03:14:16 +01:00
|
|
|
ORDER BY distance, area(c1.f1), p1.f1[0];
|