Re: [BUGS] postgres 9.2.2 point conversion from polygon doesn't always give accurate center

2013-02-03 Thread Tom Lane
Dean Rasheed  writes:
>>> It looks like what the code is actually computing is the average X
>>> position and average Y position of the points listed in the polygon.

> Although, if that's really how it's being calculated, then that's not
> really the centroid.

Yeah --- according to the wikipedia entry, it's the correct answer if
we consider the polygon vertexes as a disconnected collection of points
... but that's probably not what people really expect.  I think a
"correct" answer in full generality for polygons that are non-convex,
contain duplicate points, etc might be pretty hard.

regards, tom lane


-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] postgres 9.2.2 point conversion from polygon doesn't always give accurate center

2013-02-03 Thread Simon Riggs
On 1 February 2013 17:54, Colin Dunklau  wrote:

> For the below two queries, I expect to get a result of (0.5, 0.5).
>
> cdunklau=# select point( polygon '((0,0),(0,1),(1,1),(0,1))');
> point
> -
>  (0.25,0.75)
> (1 row)
>

I think you just simply mistyped the coordinates...

sriggs=# select point( polygon '((0,0),(0,1),(1,1),(1,0))');
   point
---
 (0.5,0.5)
(1 row)

Your last point is a duplicate of the 2nd point, so you have a
4-pointed triangle and hence a strange centre.

-- 
 Simon Riggs   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services


-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] postgres 9.2.2 point conversion from polygon doesn't always give accurate center

2013-02-03 Thread Dean Rasheed
On 3 February 2013 09:16, Dean Rasheed  wrote:
>> It looks like what the code is actually computing is the average X
>> position and average Y position of the points listed in the polygon.

Although, if that's really how it's being calculated, then that's not
really the centroid.

Consider for example adding an extra redundant point to one side of a square:

polygon '((-1,-1),(-1,0),(-1,1),(1,1),(1,-1))')

that will shift the average X position over to the left, but the
centroid is still at (0,0).

Regards,
Dean


-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] postgres 9.2.2 point conversion from polygon doesn't always give accurate center

2013-02-03 Thread Dean Rasheed
On 1 February 2013 22:16, Tom Lane  wrote:
> Colin Dunklau  writes:
>> Hello! I believe I've found a bug in the type conversion process from
>> polygon to point.
>
>> In the documentation found here
>> http://www.postgresql.org/docs/9.2/interactive/functions-geometry.html,
>
>> Table 9-32 claims that running the point() function on a polygon
>> returns the "center of polygon". This is not the case for some
>> polygons, as shown below.
>
> It looks like what the code is actually computing is the average X
> position and average Y position of the points listed in the polygon.

That's correct. This is the most common definition used for the centre
of a polygon --- formally referred to as the centroid. See for example
http://en.wikipedia.org/wiki/Centroid

cdunklau=# select point( polygon '((0,0),(1,0),(1,1),(1,0))');
point
-
 (0.75,0.25)
(1 row)

That is the correct answer. One way to think about the centroid is as
the centre of gravity of the polygon. In this case the polygon is an
"L" shape, so imagine balancing an "L" shaped object on knife edge ---
it would balance if the edge was aligned at 45 degrees to the sides of
the L, cutting each edge in half. So the centroid is halfway along the
line that connects the midpoints of the L shape.

It's also easy to see that the centroid is definitely not at (0.5,
0.5) because the entire polygon lies to the northwest / southeast of
that point.

Regards,
Dean


-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs