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;

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

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}};

{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@gmail.com wrote:

Please do not top-post.

Zhang Qun wrote: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().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.

Adam