ST_DFullyWithin

Paul Ramsey pramsey at cleverelephant.ca
Thu Jan 25 16:52:27 PST 2024


If you pull master you should find the answers correspond to your thoughts.

P

> On Jan 25, 2024, at 4:51 PM, Bruce Rindahl <bruce.rindahl at gmail.com> wrote:
> 
> No its old:
> 
> POSTGIS="3.3.2 3.3.2" [EXTENSION] PGSQL="140" GEOS="3.11.1-CAPI-1.17.1" PROJ="7.2.1" LIBXML="2.9.9" LIBJSON="0.12" LIBPROTOBUF="1.2.1" WAGYU="0.5.0 (Internal)"
> 
> On Thu, Jan 25, 2024 at 5:03 PM Paul Ramsey <pramsey at cleverelephant.ca <mailto:pramsey at cleverelephant.ca>> wrote:
>> Is built fresh off master?
>> 
>>> On Jan 25, 2024, at 3:45 PM, Bruce Rindahl <bruce.rindahl at gmail.com <mailto:bruce.rindahl at gmail.com>> wrote:
>>> 
>>> " I don't think that word means what you think it means"
>>> 
>>> Say A is a point at 0.1,1
>>> B is a line from 0,0 to 0,2 
>>> 
>>> Then using the following code:
>>> --------------------------------------------------------------
>>> with a as (select st_makepoint(0.1,1) as geom),
>>> b as (select st_makeline(st_makepoint(0,0),st_makepoint(0,2)) as geom)
>>> 
>>> select 'ST_Covers(ST_Buffer(A,Dist),B)',  ST_Covers(ST_Buffer(a.geom, 0.2), b.geom) from a,b
>>> union all
>>> select  'ST_DFullyWithin(A,B,Dist)',  ST_DFullyWithin(a.geom,b.geom,0.2) from a,b
>>> union all
>>> select 'ST_Covers(ST_Buffer(B,Dist),A)',  ST_Covers(ST_Buffer(b.geom, 0.2), b.geom) from a,b
>>> union all
>>> select  'ST_DFullyWithin(B,A,Dist)',  ST_DFullyWithin(b.geom,a.geom,0.2) from a,b
>>> -------------------------------------------------------------
>>> 
>>> 
>>> Yields:
>>> QUERY                                                RESULT
>>> "ST_Covers(ST_Buffer(A,Dist),B)"      false
>>> "ST_DFullyWithin(A,B,Dist)"                false
>>> "ST_Covers(ST_Buffer(B,Dist),A)"      true
>>> "ST_DFullyWithin(B,A,Dist)"                false
>>> 
>>> I think the last row should also be true.
>>> 
>>> 
>>> 
>>> On Thu, Jan 25, 2024 at 1:14 PM Paul Ramsey <pramsey at cleverelephant.ca <mailto:pramsey at cleverelephant.ca>> wrote:
>>>> 
>>>> 
>>>>> On Jan 25, 2024, at 11:57 AM, Martin Davis <mtnclimb at gmail.com <mailto:mtnclimb at gmail.com>> wrote:
>>>>> 
>>>>> Another reason for keeping the meaning "ST_DFullyWithin(A, B) = ST_Covers(ST_Buffer(A, Dist), B)":
>>>>> 
>>>>> I see the main use of this function in queries to be "find all the B features which are fully within distance D of an A feature".  So the A feature is the *constant* "query item", and it is evaluated against a set of B features.  It seems more intuitive for the constant feature to be the first argument in functions.
>>>> 
>>>> Concur, this is also my intuition, which is why it’s coded the way it is…
>>>> 
>>>> P
>>>> 
>>>>> 
>>>>> PS note the definition needs to use Covers rather than Contains, due to that ol' quirky definition of Contains! 
>>>>> 
>>>>> On Thu, Jan 25, 2024 at 10:57 AM Paul Ramsey <pramsey at cleverelephant.ca <mailto:pramsey at cleverelephant.ca>> wrote:
>>>>>> 
>>>>>> 
>>>>>>> On Jan 25, 2024, at 10:19 AM, Bruce Rindahl <bruce.rindahl at gmail.com <mailto:bruce.rindahl at gmail.com>> wrote:
>>>>>>> 
>>>>>>> I agree with Regina.  Also why are we coding this as a function in C when it can be done either of two ways in SQL:
>>>>>> 
>>>>>> In general functions in SQL are less fun to upgrade. Will eventually do this via Hausdorf.
>>>>>> 
>>>>>> I don’t know that I agree about the parameter ordering, and I do not think the name of the function provides any guidance when I re-write it in object form, 
>>>>>> 
>>>>>> A.DFullyWithin(B,R)
>>>>>> 
>>>>>> at least not in the same way that
>>>>>> 
>>>>>> A.contains(B) 
>>>>>> 
>>>>>> makes parameter meaning clear.
>>>>>> 
>>>>>> It’s the “D” that wrecks it.
>>>> 
>> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-devel/attachments/20240125/4f39a3af/attachment.htm>


More information about the postgis-devel mailing list