Subject: [ggl] "touches" in boost.geometry?
From: Mateusz Åoskot (mateusz)
Date: 2011-10-20 21:04:53
2011/10/20 Adam Wulkiewicz <adam.wulkiewicz_at_[hidden]>:
> Mateusz ?oskot wrote:
>> 2011/10/20 Adam Wulkiewicz<adam.wulkiewicz_at_[hidden]>:
>>> I've forgotten about one function - disjoint_with_boundry().
>> It's unclear to me what you mean here.
>> If you mean geometries A and B are disjoint but with possible intersection
>> their boundaries, then it is OGC touches()
>>> Of course names I've used are just examples. Ideally we would have one
>>> and template/function parameters would describe the relationship. I
>>> recall that we talked about it earlier and that the first template
>>> parameter can't be used to achieve this goal:
>>> intersects<without_boundry>(A, B); // impossible
>> I'm a GIS boy, so forgive me if I'm biased, but it is easier for me to
>> speak my language.
>> I sense you mean this (note, it is not OGC contains, but a distinct
>> Do we agree?
> Unfortunately I'm not ;) If I understand correctly ST_ContainsProperly()
> works like GGL's within().
Perhaps. Means, I might have missed something that makes our within()
!= OGC within
> I have something else in mind. If we have two
> objects in space they intersects each other. If we move them in opposite
> directions they will finally be in the point where only boundries touches themselves.
> Existing implementation of intersects will return true in this border case.
According to world of axioms I live in, this is correct :-)
> It would be nice to have function that returns false.
> The same with disjoint.
If we agree that
intersects(A, B) != disjoint(A, B)
> ? ___ ___
> ?| ? | ? |
> ?_|_A | B |
> | |_|_ |__|
> | C |
> intersects(A, B) -> true
> intersects(A, C) -> true
> alternative_intersects(A, B) -> false
identical to touches(A, B) -> true
> alternative_intersects(A, C) -> true
identical to intersects(A, C) -> true
> disjoint(A, B) -> false
> disjoint(A, C) -> false
> alternative_disjoint(A, B) -> true
Assumption: intersects(A, B) -> true
alternative_disjoint(A, B) -> true
is identical to
intersects(A, B) -> true && touches(A, B) -> true
which reduces to:
touches(A, B) -> true
because touches implies intersection (of interiors only), though
intersection does not imply touches.
> alternative_disjoint(A, C) -> false
identical to disjoint(A, C) -> false
> touches(A, B) -> true
> touches(A, C) -> false
Correct, because intersects(interior(A), interior(C)) -> true,
so A and C don't only touch, but relate more "deeply".
What I'm trying to say is that I can't see why special types of
predicates are needed
as we can solve this situation with the tools based on DE-9IM concept.
-- Mateusz Loskot, http://mateusz.loskot.net Charter Member of OSGeo, http://osgeo.org Member of ACCU, http://accu.org
Geometry list run by mateusz at loskot.net