|
Boost Users : |
Subject: Re: [Boost-users] Issue with boost::geometry::intersection
From: Heriberto Delgado (heribertod_at_[hidden])
Date: 2019-03-11 21:41:25
Thank you, Barend!
Regarding the changes you mentioned, I found the following:
- Long double precision for the polygons didn't seem to change the results.
- When I added "#define BOOST_GEOMETRY_NO_ROBUSTNESS" to the top of the
program, things DID change: Now the result list is empty (== the function
did not detect any intersections).
Hope this helps.
El lun., 11 mar. 2019 a las 15:12, Barend Gehrels via Boost-users (<
boost-users_at_[hidden]>) escribió:
> Hi Heriberto,
>
> Op 11-3-2019 om 18:42 schreef Heriberto Delgado via Boost-users:
>
> I'm having an issue while using boost::geometry to find the intersection
> of two specific polygons, and looking at the evidence in front of me I
> can't help but think this might be a bug in the library.
>
> The two polygons in question are:
>
> POLYGON((16.8739 0.353458,8.80872e-14 5.50545e-15,0.266003
> -12.6988,17.1399 -12.3454,16.8739 0.353458))
>
> POLYGON((-4.53257e-19 2.16383e-17,9.99781 0.209424,10.1459
> -6.86009,0.148086 -7.06952,-4.53257e-19 2.16383e-17))
>
> Both of them look like two slightly rotated rectangles, first one being
> bigger than the other. They intersect at their upper left corner.
>
> In order to verify that these polygons CAN be intersected, I ran the
> following SQL sentence through SQL Server Management Studio (17.9.1):
>
> SELECT geometry::STGeomFromText('POLYGON((16.8739 0.353458,8.80872e-14
> 5.50545e-15,0.266003 -12.6988,17.1399 -12.3454,16.8739 0.353458))', 0)
> .STIntersection(
> geometry::STGeomFromText('POLYGON((-4.53257e-19 2.16383e-17,9.99781
> 0.209424,10.1459 -6.86009,0.148086 -7.06952,-4.53257e-19 2.16383e-17))', 0)
> ).STAsText()
>
> The resulting WKT is:
>
> POLYGON ((0.1480860710144043 -7.0695199966430664, 10.145899772644043
> -6.8600900173187256, 9.997809886932373 0.20942401885986328, 0 0,
> 0.1480860710144043 -7.0695199966430664))
>
> which looks about right for the requested intersection rectangle. SSMS
> itself displays a nice rectangle when you remove ".STAsText()" from that
> sentence.
>
> However, when I tried to duplicate that result using the following program
> using Visual Studio 2017 (15.9.8) to create an x64 console app, using boost
> 1.69 as a NuGet:
> [snip]
>
> the resulting polygon is:
>
> POLYGON((0 -8.88178e-16,0.148086 -7.06952,0.148086 -7.06952,0
> -8.88178e-16))
>
> which you can easily see it's not a valid polygon, even though
> boost::geometry returns "1" when is_valid() is called upon it.
>
> I was planning to use boost::geometry on a large scale server application
> that processes quite large amounts of geometry in a similar way, and this
> is seriously impairing my ability to do so.
>
> Do you guys know what is going on here, and if there is a solution or
> workaround for it?
>
>
> We're working on it. I didn't try your polygons yet, they look quite
> challenging.
>
> You can try to define BOOST_GEOMETRY_NO_ROBUSTNESS, as this will turn off
> internal rescaling and might help you. In the future, this will be the
> default.
>
> Alternatively, or on top of this, you might try to use long double.
>
> Please let me know your results.
>
> Regards, Barend
>
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> https://lists.boost.org/mailman/listinfo.cgi/boost-users
>
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