[postgis-devel] Controlling GEOS PrecisionModel

Carl Anderson carl.anderson at vadose.org
Wed Nov 9 17:37:25 PST 2005


strk at refractions.net wrote:

>[ included postgis-devel ]
>
>On Wed, Nov 09, 2005 at 11:35:59AM +0000, David Orme wrote:
>...
>  
>
>>Of course, I hadn't considered that I need to SnapToGrid the  
>>geometries from the sequential unions rather than just the original  
>>inputs so I'll try that.
>>    
>>
>
>This won't be easy, maybe we should add a function to control
>precision of GEOS operations as a whole. Check out
>lwgeom_geos_wrapper.cpp and try to change the PrecisionModel
>constructor in initGEOS from the default to something like:
>
>	PrecisionModel(0.00001);
>
>This would teoretically *grid* every GEOS geometry
>(input and output)
>
>--strk;
>  
>

If the objective of precision control is to keep precision "entropy" 
from building up,  you could write a stub function that consumes 
precision on the left of the decimal point thereby limiting available 
precision to the right of the decimal point.  To really work the stub 
would need to examine the incoming geometries to predict a sensible 
value to shift so that real info was not lost.  This is not an exact 
precision limit but would not require
a global setting for the GEOS wrapper.

such a thing might look like, in a simple form ....

create function intersection ( geometry, geometry ) return geometry as
'
BEGIN
  return (translate(
           intersection(
                  translate($1, 1024*1000, 1024*1000, 1024*1000),
                  translate($2, 1024*1000, 1024*1000, 1024*1000)
                             ),
                      -1024*1000, -1024*1000, -1024*1000)
      );

END;'   language 'plpgsql';

better translating, a rescaling of the geometries would work better.

just my 2 cents.

C.



More information about the postgis-devel mailing list