Re: postgres 9.2.2 point conversion from polygon doesn't always give accurate center
От | Dean Rasheed |
---|---|
Тема | Re: postgres 9.2.2 point conversion from polygon doesn't always give accurate center |
Дата | |
Msg-id | CAEZATCXPokwKBGEBLkPEyH_kWhoUA6Ua9hJxQgLxiOtjtopDWA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: postgres 9.2.2 point conversion from polygon doesn't always give accurate center (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: postgres 9.2.2 point conversion from polygon doesn't
always give accurate center
|
Список | pgsql-bugs |
On 1 February 2013 22:16, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Colin Dunklau <colin.dunklau@gmail.com> 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
В списке pgsql-bugs по дате отправления: