[postgis-tickets] [PostGIS] #3393: ST_Area NaN on some polygons

PostGIS trac at osgeo.org
Fri Dec 11 06:13:02 PST 2015


#3393: ST_Area NaN on some polygons
---------------------+---------------------------
 Reporter:  rfc2616  |      Owner:  pramsey
     Type:  defect   |     Status:  new
 Priority:  medium   |  Milestone:  PostGIS 2.2.1
Component:  postgis  |    Version:  2.2.x
 Keywords:           |
---------------------+---------------------------
 In one of our African datasets, we need to calculate ST_Area on the sphere
 for all polygons. ST_Area is returning NaN for some, but not all,
 polygons. The affected polygons appear to be equator crossing but
 otherwise there is no obvious connection and not all equator crossing
 polygons are affected.

 We're confirming the issue on running PostGIS instances as far back as
 2.1.2, but chronologically this only surfaced recently for us -- at some
 point in the past year or two these calculations used to pass without any
 NaN.

 The failing polygons vary depending on the exact system and PostGIS
 version and seem somewhat bizarre and random.

 The results below come from 2 systems, my Mac laptop and a Linux server
 and are slightly different but both broken.

 Laptop:

 PostgreSQL 9.4.5 on x86_64-apple-darwin15.0.0, compiled by Apple LLVM
 version 7.0.0 (clang-700.1.76), 64-bit, POSTGIS="2.2.0 !r14208"
 GEOS="3.5.0-CAPI-1.9.0 !r4084" PROJ="Rel. 4.9.2, 08 September 2015"
 GDAL="GDAL 1.11.3, released 2015/09/16" LIBXML="2.9.3" LIBJSON="0.12"
 RASTER

 Server:

 PostgreSQL 9.3.10 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu
 4.8.2-19ubuntu1) 4.8.2, 64-bit, POSTGIS="2.1.2 !r12389"
 GEOS="3.4.2-CAPI-1.8.2 !r3921" PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL
 1.10.1, released 2013/08/26" LIBXML="2.9.1" LIBJSON="UNKNOWN" RASTER

 This test polygon is taken from #2918 and still yields NaN on both
 systems:

 {{{
   #!sql
   select ST_Area('POLYGON((0 78.703946026663,0 0,179.999997913235
 0,179.999997913235 -33.0888306884702,0
 78.703946026663))'::geography,false);
 }}}

 Here I made 1 digit difference in the starting point (...662 vs ...663)

 {{{
   #!sql
   select ST_Area('POLYGON((0 78.703946026662,0 0,179.999997913235
 0,179.999997913235 -33.0888306884702,0
 78.703946026662))'::geography,false);
 }}}

 This gets a result, 127516467322130, on the server ... but NaN on the
 laptop.

 A different one digit change, ...664:

 {{{
   #!sql
   select ST_Area('POLYGON((0 78.703946026664,0 0,179.999997913235
 0,179.999997913235 -33.0888306884702,0
 78.703946026664))'::geography,false);
 }}}

 yields 127516467322130 on the *laptop* ... but NaN on the *server*.

 I have no idea how to even go about troubleshooting this, but it's causing
 us a major headache. Happy to step up with whatever support we can offer
 to help isolate it! Thanks in advance for any help.

--
Ticket URL: <https://trac.osgeo.org/postgis/ticket/3393>
PostGIS <http://trac.osgeo.org/postgis/>
The PostGIS Trac is used for bug, enhancement & task tracking, a user and developer wiki, and a view into the subversion code repository of PostGIS project.


More information about the postgis-tickets mailing list