On 2024-11-21 19:18 +0100, Thomas Simpson wrote: > Looking through the archives, around 20 years ago someone asked about > getting a list of points from a polygon [15 AUG 2004] and the reply was this > was not available but something like point(polygon, n) could be added > relatively easily as a new feature to extract points. > > I'm hitting an issue trying to check if a box is entirely contained within a > circle and I had thought since that comparison is not directly supported to > cast the box to a polygon and then check each of the points in the polygon > since that is what the circle containing a box is essentially going to do. > > However, there does not seem to be an easy way to access the polygon > elements either (unnest failed, indexing doesn't work and the point(poly,n) > is not there). > > Can anyone point me to an approach to do what I need or is this going to be > best by adding the box comparison in the mainline code? I'm happy to take a > go if someone points [no pun intended] me to where in the code to go.
You can treat point and box as arrays to access their components. See the very last paragraph on [1]. That requires extra parenthesis, though: regress=# select ((box '(1,2),(3,4)')[0])[0]; box ----- 3 (1 row) But you'd have to calculate the remaining two points. I think your specific use case (Is box in a circle?) can be also be answered by considering the smallest enclosing circle of that box and test if that circle is contained in your input circle. For example: regress=# select circle(box '(1,2),(3,4)') <@ circle '(0,0),10'; ?column? ---------- t (1 row) PostGIS may also be worth looking at. [1] https://www.postgresql.org/docs/current/functions-geometry.html