mirror of
https://github.com/bjornharrtell/jsts.git
synced 2026-01-25 14:17:37 +00:00
358 lines
6.0 KiB
XML
358 lines
6.0 KiB
XML
<run>
|
|
<precisionModel scale="1.0" offsetx="0.0" offsety="0.0"/>
|
|
|
|
<case>
|
|
<desc>P - point</desc>
|
|
<a>
|
|
POINT(10 10)
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
true
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>mP - multipoint with repeated points</desc>
|
|
<a>
|
|
MULTIPOINT ((80 280), (80 220), (160 220), (80 220))
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
false
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>mP - multipoint with no repeated points</desc>
|
|
<a>
|
|
MULTIPOINT ((80 280), (80 220), (160 220))
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
true
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>mP - empty</desc>
|
|
<a>
|
|
MULTIPOINT EMPTY
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
true
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>L - simple line</desc>
|
|
<a>
|
|
LINESTRING(10 10, 20 20)
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
true
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>L - non-simple, proper interior intersection</desc>
|
|
<a>
|
|
LINESTRING (20 60, 160 60, 80 160, 80 20)
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
false
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>L - non-simple, interior intersection at vertices</desc>
|
|
<a>
|
|
LINESTRING (20 80, 80 20, 80 80, 140 60, 80 20, 160 20)
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
false
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>L - non-simple, interior intersection at Bdy/non-vertex</desc>
|
|
<a>
|
|
LINESTRING (20 60, 100 60, 60 100, 60 60)
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
false
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>L - non-simple, interior intersection at Bdy/vertex</desc>
|
|
<a>
|
|
LINESTRING (20 60, 60 60, 100 60, 60 100, 60 60)
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
false
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>L - simple, intersection at Bdy/Bdy (ring)</desc>
|
|
<a>
|
|
LINESTRING (20 20, 80 20, 80 80, 20 20)
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
true
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>L - simple, intersection at Bdy/Bdy + non-vertex</desc>
|
|
<a>
|
|
LINESTRING (80 80, 20 20, 20 80, 140 80, 140 140, 80 80)
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
false
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>L - empty</desc>
|
|
<a>
|
|
LINESTRING EMPTY
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
true
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
|
|
<case>
|
|
<desc>mL - intersection between elements at non-vertex</desc>
|
|
<a>
|
|
MULTILINESTRING(
|
|
(40 140, 160 40),
|
|
(160 140, 40 40))
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
false
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>mL - no intersection between elements</desc>
|
|
<a>
|
|
MULTILINESTRING(
|
|
(20 160, 20 20),
|
|
(100 160, 100 20))
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
true
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>mL - mutual intersection at endpoints only</desc>
|
|
<a>
|
|
MULTILINESTRING ((60 140, 20 80, 60 40),
|
|
(60 40, 100 80, 60 140))
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
true
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>mL - one element is non-simple</desc>
|
|
<a>
|
|
MULTILINESTRING ((60 40, 140 40, 100 120, 100 0),
|
|
(100 200, 200 120))
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
false
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>mL - proper intersection between elements at vertex</desc>
|
|
<a>
|
|
MULTILINESTRING ((40 120, 100 60),
|
|
(160 120, 100 60),
|
|
(40 60, 160 60))
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
false
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>mL - intersection between closed lines</desc>
|
|
<a>
|
|
MULTILINESTRING ((80 160, 40 220, 40 100, 80 160),
|
|
(80 160, 120 220, 120 100, 80 160))
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
false
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>mL - intersection between closed and open lines</desc>
|
|
<a>
|
|
MULTILINESTRING ((80 160, 40 220),
|
|
(80 160, 120 220, 120 100, 80 160),
|
|
(40 100, 80 160))
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
false
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>LR - valid ring</desc>
|
|
<a>
|
|
LINEARRING (100 300, 200 300, 200 200, 100 200, 100 300)
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
true
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>LR - ring with self-intersection</desc>
|
|
<a>
|
|
LINEARRING (100 300, 200 300, 100 200, 200 200, 100 300)
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A">
|
|
false
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>A - valid polygon</desc>
|
|
<a>
|
|
POLYGON ((180 260, 80 300, 40 180, 160 120, 180 260))
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A"> true </op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>A - invalid bowtie polygon</desc>
|
|
<a>
|
|
POLYGON ((100 100, 100 200, 200 100, 200 200, 100 100))
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A"> false </op>
|
|
</test>
|
|
</case>
|
|
|
|
|
|
<case>
|
|
<desc>A - empty</desc>
|
|
<a>
|
|
POLYGON EMPTY
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A"> true </op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>mA - valid polygon</desc>
|
|
<a>
|
|
MULTIPOLYGON (((240 160, 140 220, 80 60, 220 40, 240 160)),
|
|
((160 380, 100 240, 20 380, 160 380),
|
|
(120 340, 60 360, 80 320, 120 340)))
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A"> true </op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>mA - with touching elements</desc>
|
|
<a>
|
|
MULTIPOLYGON (((240 160, 100 240, 80 60, 220 40, 240 160)),
|
|
((160 380, 100 240, 20 380, 160 380),
|
|
(120 340, 60 360, 80 320, 120 340)))
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A"> true </op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>mA - with an invalid bowtie element</desc>
|
|
<a>
|
|
MULTIPOLYGON (((100 100, 100 200, 200 100, 200 200, 100 100)), ((100 400, 200 400, 200 300, 100 300, 100 400)))
|
|
</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A"> false </op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>GC - all components simple</desc>
|
|
<a>
|
|
GEOMETRYCOLLECTION (POLYGON ((100 200, 200 200, 200 100, 100 100, 100 200)),
|
|
LINESTRING (100 300, 200 250),
|
|
POINT (250 250),
|
|
POINT (250 150))</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A"> true </op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>GC - one non-simple component</desc>
|
|
<a>
|
|
GEOMETRYCOLLECTION (POLYGON ((100 100, 100 200, 200 100, 200 200, 100 100)),
|
|
LINESTRING (100 300, 200 250),
|
|
POINT (250 250),
|
|
POINT (250 150))</a>
|
|
<test>
|
|
<op name="isSimple" arg1="A"> false </op>
|
|
</test>
|
|
</case>
|
|
|
|
</run>
|