<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">G'day Sarah<div><br></div><div>I'm afraid I'm no expert on geography types, but yes, in some cases st_area can process invalid geometries (like you have described), but they are after all invalid geometries, so it returns 0 . For example, looking at your second example :</div><div><br></div><div><div><div><font class="Apple-style-span" face="'Courier New'">=# SELECT ST_AREA(the_geom), ST_ISVALID(the_geom), ST_ISVALIDREASON(the_geom), ST_SUMMARY(the_geom) FROM (SELECT ST_GEOMFROMTEXT('POLYGON((15 -5, 16 0, 15 0, 16 -2, 15 -5))') the_geom) as foo;</font></div><div><font class="Apple-style-span" face="'Courier New'"><br></font></div><div><font class="Apple-style-span" face="'Courier New'">NOTICE:  Self-intersection at or near point 15.7143 -1.42857</font></div><div><font class="Apple-style-span" face="'Courier New'"><br></font></div><div><font class="Apple-style-span" face="'Courier New'"> st_area | st_isvalid |                   st_isvalidreason                    |       st_summary        </font></div><div><font class="Apple-style-span" face="'Courier New'">---------+------------+-------------------------------------------------------+-------------------------</font></div><div><font class="Apple-style-span" face="'Courier New'">       0 | f          | Self-intersection[15.7142857142857 -1.42857142857143] |                        +</font></div><div><font class="Apple-style-span" face="'Courier New'">         |            |                                                       | Polygon[B] with 1 rings+</font></div><div><font class="Apple-style-span" face="'Courier New'">         |            |                                                       |    ring 0 has 5 points +</font></div><div><font class="Apple-style-span" face="'Courier New'">         |            |                                                       | </font></div><div><font class="Apple-style-span" face="'Courier New'">(1 row)</font></div></div></div><div><br></div><div><br></div><div>it is not because one side rules is the inverse of the other that the area is 0, it just returns 0 not an error. My guess is that the invalid geography is causing an uncaught error, but there is no st_isvalid(geography), hence using it on geometry type. This would be my approach to finding the invalid geometries. How you repair them...? I guess it would depend on how they were originally collected, how much each one cost to collect or what they meant.</div><div><br></div><div>cheers</div><div><br></div><div>Ben</div><div><br></div><div><br></div><div><br></div><div><br><div><div>On 25/07/2011, at 5:27 AM, Sarah Berke wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">I've figured out a little more detail about my ST_Area problem, perhaps this might help someone give me some advice for troubleshooting. To provide a little more background, I've generated several thousand polygons using 
ST_ConvexHull from collections of points (I've tried both 
ST_ConvexHull(ST_Collect(points)) and ST_ConvexHull(ST_Union(points)) ) 
and when I try to calcuate their areas I get this error: <br><br><pre class="error">ERROR:  ptarray_area_spheroid: cannot handle ptarray that crosses equator
CONTEXT:  SQL function "st_area" statement 1</pre>
<br>The problem seems to be that ST_Area cannot handle some polygons with internal crosses (i.e. bowtie-shaped) that share a border with the equator, even though it can handle them elsewhere. For example:<br><br>SELECT ST_AREA(ST_GEOGFROMTEXT('POLYGON((15 -5, 15 5, 16 0, 16 -5, 15 -5))')) ;<br>

works just fine--this is just a simple polygon that crosses the equator. By the same token, a simple polygon that borders the equator works:<br><br>SELECT ST_AREA(ST_GEOGFROMTEXT('POLYGON((15 -5, 15 0, 16 0, 16 -5, 15 -5))')) ;<br>

<br>Switching the 2nd and 3rd coordinates, however, makes a bowtie-shaped polygon which is valid, but it shares a border with the equator and ST_Area cannot take it:<br><br>SELECT ST_AREA(ST_GEOGFROMTEXT('POLYGON((15 -5, 16 0, 15 0, 16 -5, 15 -5))')) ;<br>

<pre class="error">ERROR:  ptarray_area_spheroid: cannot handle ptarray that crosses equator
CONTEXT:  SQL function "st_area" statement 1</pre>The same kind of formation works fine, however, if it does not share a border with the equator :<br><br>SELECT ST_AREA(ST_GEOGFROMTEXT('POLYGON((15 -5, 16 1, 15 0, 16 -5, 15 -5))')) ;<br>

SELECT ST_AREA(ST_GEOGFROMTEXT('POLYGON((15 -4, 16 1, 15 1, 16 -4, 15 -4))')) ;<br><br><br>Again, here are my system details:<br>PostgreSQL 8.4.8 on x86_64-pc-linux-gnu, compiled by GCC gcc-4.4.real<br>
(Ubuntu 4.4.3-4ubuntu5) 4.4.3, 64-bit<br>
POSTGIS="1.5.2" GEOS="3.3.0-CAPI-1.7.0" PROJ="Rel. 4.7.1, 23 September<br>
2009" LIBXML="2.7.6" USE_STATS<br><br>I assume that one or more of the polygons I made with ConvexHull is a bowtie-shape sharing a border with the equator, but why would ST_ConvexHull generate a shape like that? How can I avoid this problem? Short of visually examining the map of every one of these several thousand polygons, how do I even figure out which one is the culprit? Is there a better way to go from points or multipoints to polygons?<br>

<br>Any insight would be really great! Thanks!<br><br clear="all">_________________________________<br>Sarah K Berke<br>Postdoctoral Scholar<br>Department of the Geophysical Sciences<br>University of Chicago<br>5734 S. Ellis Ave<br>

Chicago, IL 60637<br>
<br><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Date: Fri, 22 Jul 2011 14:39:52 -0500<br>
From: Sarah Berke <<a href="mailto:skberke@uchicago.edu">skberke@uchicago.edu</a>><br>
Subject: [postgis-users] ERROR: ptarray_area_spheroid: cannot handle<br>
        ptarraythat crosses equator<br>
To: <a href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br>
Message-ID:<br>
        <<a href="mailto:CAJUPZDEPTyKHb4LoG1szea0mSpRGikpFHM70Fh_AtBBuxSoYJA@mail.gmail.com">CAJUPZDEPTyKHb4LoG1szea0mSpRGikpFHM70Fh_AtBBuxSoYJA@mail.gmail.com</a>><br>
Content-Type: text/plain; charset="iso-8859-1"<br>
<br>
Hello,<br>
<br>
I found a short thread on this subject from February 2011--I am now having<br>
the same problem that Marcello had, and I wonder if anyone has found a fix<br>
or workaround for this problem? Using the same example code that Marcello<br>
provided:<br>
<br>
SELECT 161109 polygon ,ST_AREA(ST_GEOGFROMTEXT('POLYGON((15.8327132977611<br>
0.25,16 0.25,16 0,15.8566682147637 0,15.8566112518311<br>
0.00356000009924173,15.8485898971558 0.124770000576973,15.8327132977611<br>
0.25))')) gsareageo;<br>
<br>
I get<br>
<br>
ERROR:  ptarray_area_spheroid: cannot handle ptarray that crosses equator<br>
CONTEXT:  SQL function "st_area" statement 1<br>
<br>
I am using:<br>
<br>
PostgreSQL 8.4.8 on x86_64-pc-linux-gnu, compiled by GCC gcc-4.4.real<br>
(Ubuntu 4.4.3-4ubuntu5) 4.4.3, 64-bit<br>
POSTGIS="1.5.2" GEOS="3.3.0-CAPI-1.7.0" PROJ="Rel. 4.7.1, 23 September<br>
2009" LIBXML="2.7.6" USE_STATS<br>
<br>
>From the earlier thread, it sounds as if this version of postgis should run<br>
the code just fine? I saw that Marcello was able to work around the problem<br>
by changing 0 lats to being very near-0; but this of course affected the<br>
calculated areas. Can anyone guess why this is a problem, or has anyone<br>
figured out a better solution?<br>
<br>
Thanks very much!<br>
_________________________________<br>
Sarah K Berke<br>
Postdoctoral Scholar<br>
Department of the Geophysical Sciences<br>
University of Chicago<br>
5734 S. Ellis Ave<br>
Chicago, IL 60637<br>
-------------- next part --------------<br>
An HTML attachment was scrubbed...<br>
URL: <<a href="http://postgis.refractions.net/pipermail/postgis-users/attachments/20110722/ec2f1ed8/attachment.html" target="_blank">http://postgis.refractions.net/pipermail/postgis-users/attachments/20110722/ec2f1ed8/attachment.html</a>><br>

<br></blockquote></div>
_______________________________________________<br>postgis-users mailing list<br><a href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br>http://postgis.refractions.net/mailman/listinfo/postgis-users<br></blockquote></div><br></div></body></html>