|
Geometry : |
Subject: Re: [geometry] within(Poly, Poly)
From: Mateusz Loskot (mateusz_at_[hidden])
Date: 2013-09-24 08:54:52
On 24 September 2013 13:44, Barend Gehrels <barend_at_[hidden]> wrote:
> On 24-9-2013 1:22, Adam Wulkiewicz wrote:
>>
>> I'm playing with the implementation of missing boolean operations.
>> Currently I'm implementing within(Poly, Poly).
>
>
> Great!
Indeed!
>> I figured out that I'll check if there is some point of the first polygon
>> within the second one using detail::within::point_in_polygon and then check
>> if the first polygon's exterior ring doesn't overlap the second polygon
>> rings. I can't use detail::disjoint::disjoint_linear because this will
>> return false for polygons which boundries overlap. And within() should
>> return true also for those cases. I thought I'll use
>> boost::geometry::get_turns, the same like it's used in the implementation of
>> the touches() algorithm. Basically I need to detect if the boundries crosses
>> or just touches itself. Is it possible to use get_turns this way?
>
>
> Yes. One detail, in case you are not aware of this: within should return
> false even if the whole polygon is more or less inside, touching only the
> border from the inside. So there should be no intersections at all.
I'd also point to PostGIS documentation (OGC specification may be a
bit tricky to grasp it all),
where the within/contains relations is well explained and visualised
http://postgis.net/docs/manual-2.0/ST_Within.html
http://postgis.net/docs/manual-2.0/ST_Contains.html
See important notes about boundary.
Best regards,
-- Mateusz Loskot, http://mateusz.loskot.net "Participation in this whole process is a form of torture" ~~ Szalony
Geometry list run by mateusz at loskot.net