mirror of
https://github.com/bjornharrtell/jsts.git
synced 2026-01-25 14:17:37 +00:00
523 lines
15 KiB
XML
523 lines
15 KiB
XML
<run>
|
|
<precisionModel scale="1.0" offsetx="0.0" offsety="0.0"/>
|
|
|
|
<case>
|
|
<desc>LA - A and B simple</desc>
|
|
<a>
|
|
LINESTRING(240 190, 120 120)
|
|
</a>
|
|
<b>
|
|
POLYGON(
|
|
(110 240, 50 80, 240 70, 110 240))
|
|
</b>
|
|
<test>
|
|
<op name="intersection" arg1="A" arg2="B">
|
|
LINESTRING(177 153, 120 120)
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="union" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
LINESTRING(240 190, 177 153),
|
|
POLYGON(
|
|
(177 153, 240 70, 50 80, 110 240, 177 153)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="difference" arg1="A" arg2="B">
|
|
LINESTRING(240 190, 177 153)
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="symdifference" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
LINESTRING(240 190, 177 153),
|
|
POLYGON(
|
|
(177 153, 240 70, 50 80, 110 240, 177 153)))
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>LA - A intersects B-hole</desc>
|
|
<a>
|
|
LINESTRING(0 100, 100 100, 200 200)
|
|
</a>
|
|
<b>
|
|
POLYGON(
|
|
(30 240, 260 30, 30 30, 30 240),
|
|
(80 140, 80 80, 140 80, 80 140))
|
|
</b>
|
|
<test>
|
|
<op name="intersection" arg1="A" arg2="B">
|
|
MULTILINESTRING(
|
|
(30 100, 80 100),
|
|
(110 110, 140 140))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="union" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
LINESTRING(0 100, 30 100),
|
|
LINESTRING(80 100, 100 100, 110 110),
|
|
LINESTRING(140 140, 200 200),
|
|
POLYGON(
|
|
(30 240, 140 140, 260 30, 30 30, 30 100, 30 240),
|
|
(80 140, 80 100, 80 80, 140 80, 110 110, 80 140)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="difference" arg1="A" arg2="B">
|
|
MULTILINESTRING(
|
|
(0 100, 30 100),
|
|
(80 100, 100 100, 110 110),
|
|
(140 140, 200 200))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="symdifference" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
LINESTRING(0 100, 30 100),
|
|
LINESTRING(80 100, 100 100, 110 110),
|
|
LINESTRING(140 140, 200 200),
|
|
POLYGON(
|
|
(30 240, 140 140, 260 30, 30 30, 30 100, 30 240),
|
|
(80 140, 80 100, 80 80, 140 80, 110 110, 80 140)))
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>LA - A intersects B-hole #2</desc>
|
|
<a>
|
|
LINESTRING(40 340, 200 250, 120 180, 160 110, 270 40)
|
|
</a>
|
|
<b>
|
|
POLYGON(
|
|
(160 330, 60 260, 20 150, 60 40, 190 20, 270 130, 260 250, 160 330),
|
|
(140 240, 80 190, 90 100, 160 70, 210 130, 210 210, 140 240))
|
|
</b>
|
|
<test>
|
|
<op name="intersection" arg1="A" arg2="B">
|
|
MULTILINESTRING(
|
|
(114 298, 200 250, 173 226),
|
|
(182 96, 225 68))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="union" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
LINESTRING(40 340, 114 298),
|
|
LINESTRING(173 226, 120 180, 160 110, 182 96),
|
|
LINESTRING(225 68, 270 40),
|
|
POLYGON(
|
|
(114 298, 160 330, 260 250, 270 130, 225 68, 190 20, 60 40, 20 150, 60 260,
|
|
114 298),
|
|
(140 240, 80 190, 90 100, 160 70, 182 96, 210 130, 210 210, 173 226, 140 240)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="difference" arg1="A" arg2="B">
|
|
MULTILINESTRING(
|
|
(40 340, 114 298),
|
|
(173 226, 120 180, 160 110, 182 96),
|
|
(225 68, 270 40))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="symdifference" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
LINESTRING(40 340, 114 298),
|
|
LINESTRING(173 226, 120 180, 160 110, 182 96),
|
|
LINESTRING(225 68, 270 40),
|
|
POLYGON(
|
|
(114 298, 160 330, 260 250, 270 130, 225 68, 190 20, 60 40, 20 150, 60 260,
|
|
114 298),
|
|
(140 240, 80 190, 90 100, 160 70, 182 96, 210 130, 210 210, 173 226, 140 240)))
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>mLmA - A and B complex, disjoint</desc>
|
|
<a>
|
|
MULTIPOLYGON(
|
|
(
|
|
(60 320, 60 80, 300 80, 60 320),
|
|
(80 280, 80 100, 260 100, 80 280)),
|
|
(
|
|
(120 160, 140 160, 140 140, 120 160)))
|
|
</a>
|
|
<b>
|
|
MULTILINESTRING(
|
|
(100 240, 100 180, 160 180, 160 120, 220 120),
|
|
(40 360, 40 60, 340 60, 40 360, 40 20),
|
|
(120 120, 120 140, 100 140, 100 120, 140 120))
|
|
</b>
|
|
<test>
|
|
<op name="convexhull" pattern="FFFFFFFFF" arg1="A">
|
|
POLYGON(
|
|
(60 80, 60 320, 300 80, 60 80))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="getboundary" pattern="FFFFFFFFF" arg1="A">
|
|
MULTILINESTRING(
|
|
(60 320, 60 80, 300 80, 60 320),
|
|
(80 280, 80 100, 260 100, 80 280),
|
|
(120 160, 140 160, 140 140, 120 160))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="symdifference" pattern="FFFFFFFFF" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
LINESTRING(100 240, 100 180, 160 180, 160 120, 220 120),
|
|
LINESTRING(40 360, 40 60),
|
|
LINESTRING(40 60, 340 60, 40 360),
|
|
LINESTRING(40 60, 40 20),
|
|
LINESTRING(120 120, 120 140, 100 140, 100 120, 120 120),
|
|
LINESTRING(120 120, 140 120),
|
|
POLYGON(
|
|
(60 320, 300 80, 60 80, 60 320),
|
|
(80 280, 80 100, 260 100, 80 280)),
|
|
POLYGON(
|
|
(120 160, 140 160, 140 140, 120 160)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="difference" pattern="FFFFFFFFF" arg1="A" arg2="B">
|
|
MULTIPOLYGON(
|
|
(
|
|
(60 320, 300 80, 60 80, 60 320),
|
|
(80 280, 80 100, 260 100, 80 280)),
|
|
(
|
|
(120 160, 140 160, 140 140, 120 160)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="union" pattern="FFFFFFFFF" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
LINESTRING(100 240, 100 180, 160 180, 160 120, 220 120),
|
|
LINESTRING(40 360, 40 60),
|
|
LINESTRING(40 60, 340 60, 40 360),
|
|
LINESTRING(40 60, 40 20),
|
|
LINESTRING(120 120, 120 140, 100 140, 100 120, 120 120),
|
|
LINESTRING(120 120, 140 120),
|
|
POLYGON(
|
|
(60 320, 300 80, 60 80, 60 320),
|
|
(80 280, 80 100, 260 100, 80 280)),
|
|
POLYGON(
|
|
(120 160, 140 160, 140 140, 120 160)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="intersection" pattern="FFFFFFFFF" arg1="A" arg2="B">
|
|
LINESTRING EMPTY
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>mLmA - A and B complex, overlapping and touching #1</desc>
|
|
<a>
|
|
MULTIPOLYGON(
|
|
(
|
|
(60 260, 60 120, 220 120, 220 260, 60 260),
|
|
(80 240, 80 140, 200 140, 200 240, 80 240)),
|
|
(
|
|
(100 220, 100 160, 180 160, 180 220, 100 220),
|
|
(120 200, 120 180, 160 180, 160 200, 120 200)))
|
|
</a>
|
|
<b>
|
|
MULTILINESTRING(
|
|
(40 260, 240 260, 240 240, 40 240, 40 220, 240 220),
|
|
(120 300, 120 80, 140 80, 140 300, 140 80, 120 80, 120 320))
|
|
</b>
|
|
<test>
|
|
<op name="getboundary" arg1="A">
|
|
MULTILINESTRING(
|
|
(60 260, 60 120, 220 120, 220 260, 60 260),
|
|
(80 240, 80 140, 200 140, 200 240, 80 240),
|
|
(100 220, 100 160, 180 160, 180 220, 100 220),
|
|
(120 200, 120 180, 160 180, 160 200, 120 200))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="convexhull" arg1="A">
|
|
POLYGON(
|
|
(60 120, 60 260, 220 260, 220 120, 60 120))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="intersection" arg1="A" arg2="B">
|
|
MULTILINESTRING(
|
|
(220 260, 140 260),
|
|
(140 260, 120 260),
|
|
(120 260, 60 260),
|
|
(200 240, 140 240),
|
|
(140 240, 120 240),
|
|
(120 240, 80 240),
|
|
(180 220, 140 220),
|
|
(140 220, 120 220),
|
|
(120 220, 100 220),
|
|
(120 200, 120 180),
|
|
(220 240, 200 240),
|
|
(80 240, 60 240),
|
|
(60 220, 80 220),
|
|
(200 220, 220 220),
|
|
(120 260, 120 240),
|
|
(120 220, 120 200),
|
|
(120 180, 120 160),
|
|
(120 140, 120 120),
|
|
(140 120, 140 140),
|
|
(140 160, 140 180),
|
|
(140 200, 140 220),
|
|
(140 240, 140 260))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="union" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
LINESTRING(40 260, 60 260),
|
|
LINESTRING(220 260, 240 260, 240 240, 220 240),
|
|
LINESTRING(60 240, 40 240, 40 220, 60 220),
|
|
LINESTRING(80 220, 100 220),
|
|
LINESTRING(180 220, 200 220),
|
|
LINESTRING(220 220, 240 220),
|
|
LINESTRING(120 300, 120 260),
|
|
LINESTRING(120 240, 120 220),
|
|
LINESTRING(120 160, 120 140),
|
|
LINESTRING(120 120, 120 80),
|
|
LINESTRING(120 80, 140 80),
|
|
LINESTRING(140 80, 140 120),
|
|
LINESTRING(140 140, 140 160),
|
|
LINESTRING(140 180, 140 200),
|
|
LINESTRING(140 220, 140 240),
|
|
LINESTRING(140 260, 140 300),
|
|
LINESTRING(120 300, 120 320),
|
|
POLYGON(
|
|
(60 240, 60 260, 120 260, 140 260, 220 260, 220 240, 220 220, 220 120, 140 120,
|
|
120 120, 60 120, 60 220, 60 240),
|
|
(80 240, 80 220, 80 140, 120 140, 140 140, 200 140, 200 220, 200 240, 140 240,
|
|
120 240, 80 240)),
|
|
POLYGON(
|
|
(120 160, 100 160, 100 220, 120 220, 140 220, 180 220, 180 160, 140 160, 120 160),
|
|
(120 200, 120 180, 140 180, 160 180, 160 200, 140 200, 120 200)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="difference" arg1="A" arg2="B">
|
|
MULTIPOLYGON(
|
|
(
|
|
(60 240, 60 260, 120 260, 140 260, 220 260, 220 240, 220 220, 220 120, 140 120,
|
|
120 120, 60 120, 60 220, 60 240),
|
|
(80 240, 80 220, 80 140, 120 140, 140 140, 200 140, 200 220, 200 240, 140 240,
|
|
120 240, 80 240)),
|
|
(
|
|
(120 160, 100 160, 100 220, 120 220, 140 220, 180 220, 180 160, 140 160, 120 160),
|
|
(120 200, 120 180, 140 180, 160 180, 160 200, 140 200, 120 200)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="symdifference" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
LINESTRING(40 260, 60 260),
|
|
LINESTRING(220 260, 240 260, 240 240, 220 240),
|
|
LINESTRING(60 240, 40 240, 40 220, 60 220),
|
|
LINESTRING(80 220, 100 220),
|
|
LINESTRING(180 220, 200 220),
|
|
LINESTRING(220 220, 240 220),
|
|
LINESTRING(120 300, 120 260),
|
|
LINESTRING(120 240, 120 220),
|
|
LINESTRING(120 160, 120 140),
|
|
LINESTRING(120 120, 120 80),
|
|
LINESTRING(120 80, 140 80),
|
|
LINESTRING(140 80, 140 120),
|
|
LINESTRING(140 140, 140 160),
|
|
LINESTRING(140 180, 140 200),
|
|
LINESTRING(140 220, 140 240),
|
|
LINESTRING(140 260, 140 300),
|
|
LINESTRING(120 300, 120 320),
|
|
POLYGON(
|
|
(60 240, 60 260, 120 260, 140 260, 220 260, 220 240, 220 220, 220 120, 140 120,
|
|
120 120, 60 120, 60 220, 60 240),
|
|
(80 240, 80 220, 80 140, 120 140, 140 140, 200 140, 200 220, 200 240, 140 240,
|
|
120 240, 80 240)),
|
|
POLYGON(
|
|
(120 160, 100 160, 100 220, 120 220, 140 220, 180 220, 180 160, 140 160, 120 160),
|
|
(120 200, 120 180, 140 180, 160 180, 160 200, 140 200, 120 200)))
|
|
</op>
|
|
</test>
|
|
</case><case>
|
|
<desc>mLmA - A and B complex, overlapping and touching #2</desc>
|
|
<a>
|
|
MULTIPOLYGON(
|
|
(
|
|
(60 320, 60 120, 280 120, 280 320, 60 320),
|
|
(120 260, 120 180, 240 180, 240 260, 120 260)),
|
|
(
|
|
(280 400, 320 400, 320 360, 280 360, 280 400)),
|
|
(
|
|
(300 240, 300 220, 320 220, 320 240, 300 240)))
|
|
</a>
|
|
<b>
|
|
MULTILINESTRING(
|
|
(80 300, 80 160, 260 160, 260 300, 80 300, 80 140),
|
|
(220 360, 220 240, 300 240, 300 360))
|
|
</b>
|
|
<test>
|
|
<op name="convexhull" pattern="FFFFFFFFF" arg1="A">
|
|
POLYGON(
|
|
(60 120, 60 320, 280 400, 320 400, 320 220, 280 120, 60 120))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="getboundary" pattern="FFFFFFFFF" arg1="A">
|
|
MULTILINESTRING(
|
|
(60 320, 60 120, 280 120, 280 320, 60 320),
|
|
(120 260, 120 180, 240 180, 240 260, 120 260),
|
|
(280 400, 320 400, 320 360, 280 360, 280 400),
|
|
(300 240, 300 220, 320 220, 320 240, 300 240))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="symdifference" pattern="FFFFFFFFF" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
LINESTRING(220 360, 220 320),
|
|
LINESTRING(220 260, 220 240, 240 240),
|
|
LINESTRING(280 240, 300 240),
|
|
LINESTRING(300 240, 300 360),
|
|
POLYGON(
|
|
(280 240, 280 120, 60 120, 60 320, 220 320, 280 320, 280 240),
|
|
(120 260, 120 180, 240 180, 240 240, 240 260, 220 260, 120 260)),
|
|
POLYGON(
|
|
(280 400, 320 400, 320 360, 300 360, 280 360, 280 400)),
|
|
POLYGON(
|
|
(300 240, 320 240, 320 220, 300 220, 300 240)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="difference" pattern="FFFFFFFFF" arg1="A" arg2="B">
|
|
MULTIPOLYGON(
|
|
(
|
|
(280 240, 280 120, 60 120, 60 320, 220 320, 280 320, 280 240),
|
|
(120 260, 120 180, 240 180, 240 240, 240 260, 220 260, 120 260)),
|
|
(
|
|
(280 400, 320 400, 320 360, 300 360, 280 360, 280 400)),
|
|
(
|
|
(300 240, 320 240, 320 220, 300 220, 300 240)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="union" pattern="FFFFFFFFF" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
LINESTRING(220 360, 220 320),
|
|
LINESTRING(220 260, 220 240, 240 240),
|
|
LINESTRING(280 240, 300 240),
|
|
LINESTRING(300 240, 300 360),
|
|
POLYGON(
|
|
(280 240, 280 120, 60 120, 60 320, 220 320, 280 320, 280 240),
|
|
(120 260, 120 180, 240 180, 240 240, 240 260, 220 260, 120 260)),
|
|
POLYGON(
|
|
(280 400, 320 400, 320 360, 300 360, 280 360, 280 400)),
|
|
POLYGON(
|
|
(300 240, 320 240, 320 220, 300 220, 300 240)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="intersection" pattern="FFFFFFFFF" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
POINT(300 240),
|
|
POINT(300 360),
|
|
LINESTRING(80 300, 80 160),
|
|
LINESTRING(80 160, 260 160, 260 240),
|
|
LINESTRING(260 240, 260 300, 220 300),
|
|
LINESTRING(220 300, 80 300),
|
|
LINESTRING(80 160, 80 140),
|
|
LINESTRING(220 320, 220 300),
|
|
LINESTRING(220 300, 220 260),
|
|
LINESTRING(240 240, 260 240),
|
|
LINESTRING(260 240, 280 240))
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>mLmA - A and B complex, overlapping and touching #3</desc>
|
|
<a>
|
|
MULTIPOLYGON(
|
|
(
|
|
(120 180, 60 80, 180 80, 120 180)),
|
|
(
|
|
(100 240, 140 240, 120 220, 100 240)))
|
|
</a>
|
|
<b>
|
|
MULTILINESTRING(
|
|
(180 260, 120 180, 60 260, 180 260),
|
|
(60 300, 60 40),
|
|
(100 100, 140 100))
|
|
</b>
|
|
<test>
|
|
<op name="convexhull" pattern="FFFFFFFFF" arg1="A">
|
|
POLYGON(
|
|
(60 80, 100 240, 140 240, 180 80, 60 80))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="getboundary" pattern="FFFFFFFFF" arg1="A">
|
|
MULTILINESTRING(
|
|
(120 180, 60 80, 180 80, 120 180),
|
|
(100 240, 140 240, 120 220, 100 240))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="symdifference" pattern="FFFFFFFFF" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
LINESTRING(180 260, 120 180),
|
|
LINESTRING(120 180, 60 260),
|
|
LINESTRING(60 260, 180 260),
|
|
LINESTRING(60 300, 60 260),
|
|
LINESTRING(60 260, 60 80),
|
|
LINESTRING(60 80, 60 40),
|
|
POLYGON(
|
|
(60 80, 120 180, 180 80, 60 80)),
|
|
POLYGON(
|
|
(100 240, 140 240, 120 220, 100 240)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="difference" pattern="FFFFFFFFF" arg1="A" arg2="B">
|
|
MULTIPOLYGON(
|
|
(
|
|
(60 80, 120 180, 180 80, 60 80)),
|
|
(
|
|
(100 240, 140 240, 120 220, 100 240)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="union" pattern="FFFFFFFFF" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
LINESTRING(180 260, 120 180),
|
|
LINESTRING(120 180, 60 260),
|
|
LINESTRING(60 260, 180 260),
|
|
LINESTRING(60 300, 60 260),
|
|
LINESTRING(60 260, 60 80),
|
|
LINESTRING(60 80, 60 40),
|
|
POLYGON(
|
|
(60 80, 120 180, 180 80, 60 80)),
|
|
POLYGON(
|
|
(100 240, 140 240, 120 220, 100 240)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="intersection" pattern="FFFFFFFFF" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
POINT(60 80),
|
|
POINT(120 180),
|
|
LINESTRING(100 100, 140 100))
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
</run>
|