| <run> |
| <desc>Test cases for PreparedGeometry predicates using polygons as input</desc> |
| <precisionModel type="FLOATING"/> |
| <geometryOperation>org.locationtech.jtstest.geomop.PreparedGeometryOperation</geometryOperation> |
| |
| <case> |
| <desc>A/P - point equal to start point of polygon |
| </desc> |
| <a> |
| POLYGON ((10 10, 60 100, 110 10, 10 10)) |
| </a> |
| <b> |
| POINT (10 10) |
| </b> |
| <test> <op name="contains" arg1="A" arg2="B"> false </op> </test> |
| <test> <op name="covers" arg1="A" arg2="B"> true </op> </test> |
| <test> <op name="intersects" arg1="A" arg2="B"> true </op> </test> |
| </case> |
| |
| <case> |
| <desc>A/P - point equal to start point of polygon |
| </desc> |
| <a> |
| POLYGON ((10 10, 60 100, 110 10, 10 10)) |
| </a> |
| <b> |
| POINT (10 20) |
| </b> |
| <test> <op name="contains" arg1="A" arg2="B"> false </op> </test> |
| <test> <op name="covers" arg1="A" arg2="B"> false </op> </test> |
| <test> <op name="intersects" arg1="A" arg2="B"> false </op> </test> |
| </case> |
| |
| <case> |
| <desc>mA/L |
| A has 2 shells touching at one vertex and one non-vertex. |
| B passes between the shells, but is wholely contained |
| </desc> |
| <a> |
| MULTIPOLYGON (((100 30, 30 110, 150 110, 100 30)), |
| ((90 110, 30 170, 140 170, 90 110))) |
| </a> |
| <b> |
| LINESTRING (90 80, 90 150) |
| </b> |
| <test> <op name="contains" arg1="A" arg2="B"> true </op> </test> |
| <test> <op name="intersects" arg1="A" arg2="B"> true </op> </test> |
| </case> |
| |
| <case> |
| <desc>mA/L |
| A has 2 shells touching at one vertex and one non-vertex |
| B passes between the shells, but is NOT contained (since it is slightly offset) |
| |
| </desc> |
| <a> |
| MULTIPOLYGON (((100 30, 30 110, 150 110, 100 30)), |
| ((90 110, 30 170, 140 170, 90 110))) |
| </a> |
| <b> |
| LINESTRING (90.1 80, 90 150) |
| </b> |
| <test> <op name="contains" arg1="A" arg2="B"> false </op> </test> |
| <test> <op name="intersects" arg1="A" arg2="B"> true </op> </test> |
| </case> |
| |
| <case> |
| <desc>mA/L - 2 disjoint shells with line crossing between them </desc> |
| <a> |
| MULTIPOLYGON (((50 20, 10 70, 80 70, 50 20)), |
| ((10 90, 80 90, 50 140, 10 90))) |
| </a> |
| <b> |
| LINESTRING (50 110, 50 60) |
| </b> |
| <test> <op name="contains" arg1="A" arg2="B"> false </op> </test> |
| <test> <op name="covers" arg1="A" arg2="B"> false </op> </test> |
| <test> <op name="intersects" arg1="A" arg2="B"> true </op> </test> |
| </case> |
| |
| <case> |
| <desc>A/L - proper intersection crossing bdy |
| </desc> |
| <a> |
| POLYGON ((10 10, 10 100, 120 110, 120 30, 10 10)) |
| </a> |
| <b> |
| LINESTRING (60 60, 70 140) |
| </b> |
| <test> <op name="contains" arg1="A" arg2="B"> false </op> </test> |
| <test> <op name="intersects" arg1="A" arg2="B"> true </op> </test> |
| </case> |
| |
| <case> |
| <desc>A/L - non-proper intersection crossing bdy |
| </desc> |
| <a> |
| POLYGON ((10 10, 60 100, 110 10, 10 10)) |
| </a> |
| <b> |
| LINESTRING (60 60, 60 140) |
| </b> |
| <test> <op name="contains" arg1="A" arg2="B"> false </op> </test> |
| <test> <op name="covers" arg1="A" arg2="B"> false </op> </test> |
| <test> <op name="intersects" arg1="A" arg2="B"> true </op> </test> |
| </case> |
| |
| <case> |
| <desc>A/L - wholely contained |
| </desc> |
| <a> POLYGON ((10 10, 60 100, 110 10, 10 10)) |
| </a> |
| <b> LINESTRING (50 30, 70 60) |
| </b> |
| <test> <op name="contains" arg1="A" arg2="B"> true </op> </test> |
| <test> <op name="covers" arg1="A" arg2="B"> true </op> </test> |
| <test> <op name="intersects" arg1="A" arg2="B"> true </op> </test> |
| </case> |
| |
| <case> |
| <desc>A/L - contained but touching bdy at interior point |
| </desc> |
| <a> |
| POLYGON ((10 10, 60 100, 110 10, 10 10)) |
| </a> |
| <b> |
| LINESTRING (60 10, 70 60) |
| </b> |
| <test> <op name="contains" arg1="A" arg2="B"> true </op> </test> |
| <test> <op name="covers" arg1="A" arg2="B"> true </op> </test> |
| <test> <op name="intersects" arg1="A" arg2="B"> true </op> </test> |
| </case> |
| |
| <case> |
| <desc>A/L - line in bdy - covered but not contained |
| </desc> |
| <a> |
| POLYGON ((10 10, 60 100, 110 10, 10 10)) |
| </a> |
| <b> |
| LINESTRING (30 10, 90 10) |
| </b> |
| <test> <op name="contains" arg1="A" arg2="B"> false </op> </test> |
| <test> <op name="covers" arg1="A" arg2="B"> true </op> </test> |
| <test> <op name="intersects" arg1="A" arg2="B"> true </op> </test> |
| </case> |
| |
| <case> |
| <desc>A/A - two equal polygons |
| </desc> |
| <a> |
| POLYGON((20 20, 20 100, 120 100, 140 20, 20 20)) |
| </a> |
| <b> |
| POLYGON((20 20, 20 100, 120 100, 140 20, 20 20)) |
| </b> |
| <test> <op name="contains" arg1="A" arg2="B"> true </op> </test> |
| <test> <op name="covers" arg1="A" arg2="B"> true </op> </test> |
| <test> <op name="intersects" arg1="A" arg2="B"> true </op> </test> |
| </case> |
| |
| <case> |
| <desc>A/L - line with repeated points |
| </desc> |
| <a> |
| POLYGON((20 20, 20 100, 120 100, 140 20, 20 20)) |
| </a> |
| <b> |
| LINESTRING (10 60, 50 60, 60 30, 60 30, 90 80, 90 80, 160 70) |
| </b> |
| <test> <op name="contains" arg1="A" arg2="B"> false </op> </test> |
| <test> <op name="covers" arg1="A" arg2="B"> false </op> </test> |
| <test> <op name="intersects" arg1="A" arg2="B"> true </op> </test> |
| </case> |
| |
| <case> |
| <desc>A/L - polygon and line with repeated points |
| </desc> |
| <a> |
| POLYGON((20 20, 20 100, 120 100, 120 100, 120 100, 140 20, 140 20, 140 20, 20 20)) |
| </a> |
| <b> |
| LINESTRING (10 60, 50 60, 60 30, 60 30, 90 80, 90 80, 160 70) |
| </b> |
| <test> <op name="contains" arg1="A" arg2="B"> false </op> </test> |
| <test> <op name="covers" arg1="A" arg2="B"> false </op> </test> |
| <test> <op name="intersects" arg1="A" arg2="B"> true </op> </test> |
| </case> |
| |
| |
| </run> |