[postgis-users] GEOS / Predicates Update

Paul Ramsey pramsey at refractions.net
Thu May 22 09:45:15 PDT 2003


PostGIS'ers,
   It has been a while since I told you all that predicates would be 
available in PostGIS "soon", so I think I should provide an update.
   a) the GEOS library supports the spatial predicates and a few of the 
operators (geos.refractions.net) and has been tested against a pretty 
comprehensive test harness. GEOS seems to be ready to go.
   b) the CVS version of PostGIS includes support for building in GEOS 
and a relate() function available in SQL. The current implementation 
does not do very good memory management, so repeated invocations of the 
GEOS functions will leak memory into the postgres instance over time.
   c) we have been unable to implement proper exception handling in 
PostGIS for GEOS exceptions. This is a BIG PROBLEM.  GEOS throws 
exceptions for things it cannot handle topologically, primarily for 
illegal geometries.  Ideally, PostGIS would catch these exceptions and 
translate them into PostgreSQL errors or warnings, depending on 
severity.  This is how Dave designed his implementation.  However, 
there appear to be some low level bugs in C/C++ interaction which cause 
exceptions thrown by GEOS to be interpreted by the parent process 
(postgres) as SIGABORT, which shuts down the backend immediately.  The 
net effect is that any exception GEOS hits causes the backend to 
immediately terminate, instead of handling the exceptions.  No amount 
of repositioning of the exception handling code has fixed this. We have 
put the exception handling right back into the GEOS library, and the 
result is still the same -- as soon as an exception is raise, the 
backend terminates.
   Dave has already posted a detailed technical description of the 
problem to this list.
   We are at a bit of an impasse right now, because there seems to be no 
fast-and-easy way to avoid this problem. Our current options appear to 
be:
   - Try the very latest gcc, glibc, and libstdc++ libraries and see if 
the problem has been resolved. It has been reported to the maintainers 
about a year ago, as far as we can tell.  While this might fix the 
problem, it will make deployment very difficult for people, since 
almost no linux distributions have the very latest versions of these 
libraries.  Commercial UNIX'es will also be terra incognito.
   - Re-write some chunks of GEOS to not throw exceptions. This is bad 
for two reasons.  It is a large amount of work, and it also is bad 
design.  The exceptions are there for a reason, and replacing them with 
large chains of null handling will be unpleasant.  There are some 
"exception emulation" libraries for C which could make the process less 
unpleasant, but it will still not be nice at all.
   - Re-write GEOS entirely, and again, in C. This at least would be a 
clean implementation of the algorithms, but it is even more work, and 
would constitute yet another port of JTS which would have to be kept 
synchronous with the JTS R&D over time.

All the options suck, which is why we have not chosen one yet.
That's the state of things now,
P.


      Paul Ramsey
      Refractions Research
      Email: pramsey at refractions.net
      Phone: (250) 885-0632




More information about the postgis-users mailing list