
Boost Users : 
Subject: Re: [Boostusers] Enquiry on boost.geometry and intersection()
From: Zhang Qun (zhangq.rhy_at_[hidden])
Date: 20181119 04:01:35
Thanks Adam. I did use bg::reverse to reverse when necessary.
Sorry that I still encounter a problem with the intesection() function. It
got me weird results when the line just right across the vertices of the
polygon.
Here is what I did, trying to make it clear.
1. In my program, the intersection between line and polygon is zero. So I
print out the polygon and the linestring. (Actually from my visualization,
it should has one intersection at (9.29497, 2.29204))
terminal printout:
Linestring: ((10, 3.43403), (8.4973, 1))
Polygon: (((7, 1.52705), (2.06343, 3.17257), (5.16667, 5.5), (7.69098,
5.5), (9.29497, 2.29204), (7, 1.52705)))
2. I reconstruct polygon and linestring using the above printout value, and
redo the intersection(), weird thing happened, it got me two same
intersection points.
terminal printout:
Intersections: ((9.29497, 2.29204), (9.29497, 2.29204))
3. I compare the polygon/linestring in my program and the reconstructed
polygon/linestring, it says these two are not even equal.
code:
std::cout << "Polygons are spatially " << (boost::geometry::equals(poly1,
poly2) ? "equal" : "not equal") << std::endl;
std::cout << "Lines are spatially " << (boost::geometry::equals(line1,
line2) ? "equal" : "not equal") << std::endl;
terminal printout:
Polygons are spatially not equal
Lines are spatially not equal
It really got me here. How come the geometry I reconstructed from the
printout is not equal to the original? The code I used to reconstruct is
as follows:
bgPolygon poly2{{{7, 1.52705},
{2.06343, 3.17257},
{5.16667, 5.5},
{7.69098, 5.5},
{9.29497, 2.29204},
{7, 1.52705}}}; // C++11 initialization list
support
bg::correct(poly2); // make it clockwise and closed polygon
bgLinestring line2{{10, 3.43403}, {8.4973, 1.0}};
Could you help me on this issue?
Thank you.
On Fri, Nov 16, 2018, 9:25 PM Adam Wulkiewicz <adam.wulkiewicz_at_[hidden]
wrote:
> Please do not toppost.
>
> Zhang Qun wrote:
>
> Hi, Adam thanks for the reply and detailed code and explanation. Yes, it
> worked.
> I implemented as per your instructions but encountered a small problem.
> That is sometimes I realized the intersections points between the
> linestrings and the polygon are not in a "consistent" order, e.g. as shown
> in the below image, lingstring 1 has P1>P2; However, instead of P3>P4,
> linestring 2 is P4>P3. I actually expect linestring 2 is also along P3>P4
> direction. Is this how it is supposed to be? Any workaround to solve this
> problem? Thanks.
>
> [image: Presentation1.png]
>
> I don't know what happens in this case exactly because I don't know the
> data but I would rather assume that Boost.Geometry doesn't care about the
> order of linestring points (both directions represent the same geometry).
> The simplest solution would be to check the direction of the output and if
> needed reverse the linestrings manually or with bg::reverse().
>
> Adam
>
Boostusers list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net