Boost logo

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