Boost logo

Boost Users :

Subject: Re: [Boost-users] Enquiry on boost.geometry and intersection()
From: Zhang Qun (zhangq.rhy_at_[hidden])
Date: 2018-11-19 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 re-constructed from the
printout is not equal to the original? The code I used to re-construct 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 top-post.
>
> 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
>




Presentation1.png

Boost-users 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