Linestring/polygon intersection
After a long while a blog again, a short one this time. I'm currently implementing intersections linestring/polygon for Boost.Geometry. Well, the basics (calculating intersection points) are already there for a long time, but for this combination the intersection points should be followed in another way and the correct pieces should be outputted.
When I do these things I normally check the results with both PostGIS and SQL Server. However, I'm encountering something weird in both of them.
The testcase
My testcase is looking like this:SQL Server
In SQL Server the intersection is correctly done, but the linestring is reversed! I'm using this query:with viewy as
(
select
geometry::STGeomFromText('POLYGON((1 1,1 3,3 3,3 1,1 1))', 0) as p,
geometry::STGeomFromText('LINESTRING(2 2,1 2,1 3,2 3)', 0) as q
)
select
p.STIntersection(q).STLength() as len,
p.STIntersection(q).STAsText() as wkt
from viewy;
and this is my output:
3 LINESTRING (2 3, 1 3, 1 2, 2 2)
You see, the linestring is reversed! It is not only reversed with this linestring, but with all linestrings. Even if they are, for example, complete inside the polygon. If I reverse the polygon (from clockwise to counter clockwise), the output is still reversed. Mysterious...
PostGIS
Also a surprise in PostGIS.The query is looking there as following:with viewy as
(
select
ST_GeomFromText('POLYGON((1 1,1 3,3 3,3 1,1 1))') as p,
ST_GeomFromText('LINESTRING(2 2,1 2,1 3,2 3)') as q
)
select
ST_Length(ST_Intersection(p, q)) as len,
ST_AsText(ST_Intersection(p, q)) as wkt
from viewy;
and this is here the result:3;"MULTILINESTRING((1 2,1 3),(1 3,2 3),(2 2,1 2))"
I'm getting a multilinestring back! With respect to contents, it is OK. But it is surprising...