Opened 12 years ago

Closed 12 years ago

#2039 closed defect (fixed)

ST_Area(geography) returning wrong answer

Reported by: pramsey Owned by: pramsey
Priority: medium Milestone: PostGIS 2.1.0
Component: postgis Version: 2.0.x
Keywords: Cc: pclark@…

Description

Reported in the mailing list

WITH shapes as (
  select 1 as rownum, 
    ST_GeogFromText('POLYGON((-144 -63,-144 -54,-126 -54,-126 -63,-144 -63))') as shape
  union
  select 2 as rownum, 
    ST_GeogFromText('POLYGON((-90 -63,-90 -54,-72 -54,-72 -63,-90 -63))') as shape
)
select 
  rownum, 
  ST_Area(shape) as spheroid, 
  ST_Area(shape, false) as sphere,
  ST_Area(shape) - ST_Area(shape, false) as delta
from shapes;

The meridian crossing code of the current implementation is tripping.

Change History (3)

comment:1 by pramsey, 12 years ago

Try trunk at r10407

comment:2 by pclark, 12 years ago

This works for me using r10420; hadn't tried r10407. The results aren't identical, but they're close enough for what I care about - the discrepancy between the two polygons is on the order of 500 square cm, as opposed to twice the area of California like they were in postgis 2.0.1. :-)

 WITH shapes as (
  select 1 as rownum, ST_GeogFromText('POLYGON((-144 -63,-144 -54,-126 -54,-126 -63,-144 -63))') as shape
  union
  select 2 as rownum, ST_GeogFromText('POLYGON((-90 -63,-90 -54,-72 -54,-72 -63,-90 -63))') as shape
  )
  select rownum, ST_Area(shape) as spheroid, ST_Area(shape, false) as sphere,
        ST_Area(shape) - ST_Area(shape, false) as delta
  from shapes;

returns

  rownum |     spheroid     |      sphere      |      delta       
 --------+------------------+------------------+------------------
       1 | 1040833443426.79 |  1035406049943.1 | 5427393483.68726
       2 | 1040833443426.79 | 1035406049943.05 | 5427393483.73877
 (2 rows)

comment:3 by pramsey, 12 years ago

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.