ST_pointonsurface() will return a point that is guaranteed to be on the polygon.  I believe that this point is the point that is at a maximum distance from any edge.  This may be more useful for your case than a centroid.   There is no such thing as a logically correct "centroid", there is only what a centroid *is* and what it is may not be on the surface of a polygon. 
<br><br><div class="gmail_quote">On Jan 9, 2008 3:45 PM, Dylan Beaudette <<a href="mailto:dylan.beaudette@gmail.com">dylan.beaudette@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi,<br><br>I have noticed that the ST_centroid() function will compute _geometrically_<br>correct centroids, but will not always compute _logically_ correct centroids.<br><br>For example, given two polygons defining hillslope position such that one
<br>polygon defines the "ridge" and another defines the "slope". These two<br>polygons are roughly concentric and therefore the geometric centroid of the<br>outermost polygon is computed to exist somewhere in the innermost polygon.
<br><br>Are there any known ways to make postgis return a logically correct centroid:<br>i.e. in the presence of concentric polygons force the position the centroid<br>to be within the correct polygon.<br><br>Thanks!<br><br>
Dylan<br><br>--<br>Dylan Beaudette<br>Soil Resource Laboratory<br><a href="http://casoilresource.lawr.ucdavis.edu/" target="_blank">http://casoilresource.lawr.ucdavis.edu/</a><br>University of California at Davis<br>530.754.7341
<br>_______________________________________________<br>postgis-users mailing list<br><a href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br><a href="http://postgis.refractions.net/mailman/listinfo/postgis-users" target="_blank">
http://postgis.refractions.net/mailman/listinfo/postgis-users</a><br></blockquote></div><br><br clear="all"><br>-- <br>************************************<br>David William Bitner