[postgis-devel] assumptions of &&& operator for missing dimensions

Paul Ramsey pramsey at cleverelephant.ca
Tue Feb 24 05:09:26 PST 2015


Well, the old semantic has been there since 2.0, which is a very long time.
A further question for it would be: what do the next functions do? What does a distance calculation between a 2d and 3d object return? does it also respect that semantic? 

P

-- 
Paul Ramsey
http://cleverelephant.ca
http://postgis.net

On February 24, 2015 at 7:44:23 AM, Sandro Santilli (strk at keybit.net) wrote:

For the record, I've committed code ensuring the stated semantic  
(missing dimensions have infinite range).  

BUT, I found a document of yours that expects differently-dimensioned  
geometries to not overlap:  
http://workshops.boundlessgeo.com/postgis-intro/3d.html  

Snippet:  

-- Returns false (one 2-D one 3-D)  
SELECT 'POINT Z (1 1 1)'::geometry &&&  
'POLYGON ((0 0, 0 2, 2 2, 2 0, 0 0))'::geometry;  

That query returns TRUE now, for the 2-D polygon having an  
infinite Z range.  

Is that enough exposure to require a mention in the NEWS as a  
backward incompatible change ?  

REF: http://trac.osgeo.org/postgis/ticket/3045  

--strk;  

On Thu, Feb 19, 2015 at 06:44:38PM +0100, Sandro Santilli wrote:  
> On Thu, Feb 19, 2015 at 09:04:16AM -0800, Paul Ramsey wrote:  
> > My preference was always to allow, for example, a 2d query box to extract a 3d column of data from a volume of points, and I would have implemented that way if I could. Now, what i cannot tell you, is why I felt I couldn’t…  
>  
> So your preference here is for number 2:  
>  
> 1. Missing dimension is unknown, return NULL  
> -> 2. Missing dimension is infinite, contains everything <-  
> 3. Missing dimension is empty, contains nothing  
> 4. An impossible comparison was requested, raise exception  
>  
> That is a 2d query box is infinitely tall and 2d points are found  
> in 3d boxes at any height. Sounds good to me, as long as documented  
> as such and consistently enforced.  
>  
> For example, in the query reported in  
> http://trac.osgeo.org/postgis/ticket/3045  
> rows 2,3,4 and 5 should be reported to overlap the query box, right ?  
>  
> --strk;  
>  
> > On February 19, 2015 at 8:46:22 AM, Sandro Santilli (strk at keybit.net) wrote:  
> > > The current &&& operator assumes 0 as the value of dimensions that are  
> > > missing from one of the operands.  
> > >  
> > > This results in confusing behavior, like this:  
> > >  
> > > select 'POINT(0 0)'::geometry &&& 'POINT(0 0 1)'::geometry; -- false  
> > > select 'POINT(0 0)'::geometry &&& 'POINT(0 0 0)'::geometry; -- true  
> > >  
> > > I think the above two selects should give the same answer instead.  
> > > Possibilities are:  
> > >  
> > > 1. Missing dimension is unknown, return NULL  
> > > 2. Missing dimension is infinite, return true  
> > > 3. Missing dimension is empty, return false  
> > > 4. An impossible comparison was requested, raise exception  
> > >  
> > > Which one would you prefer ?  
> > > And what constraints do we have being the operator used by index scan ?  
> > >  
> > > --strk;  
> > >  
> > > () Free GIS & Flash consultant/developer  
> > > /\ http://strk.keybit.net/services.html  
> > >  
> >  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-devel/attachments/20150224/adceebc5/attachment.html>


More information about the postgis-devel mailing list