mirror of
https://github.com/bjornharrtell/jsts.git
synced 2026-01-25 14:17:37 +00:00
634 lines
17 KiB
XML
634 lines
17 KiB
XML
<run>
|
|
<precisionModel scale="1.0" offsetx="0.0" offsety="0.0"/>
|
|
|
|
<case>
|
|
<desc>AA - simple polygons</desc>
|
|
<a>
|
|
POLYGON(
|
|
(10 10, 100 10, 100 100, 10 100, 10 10))
|
|
</a>
|
|
<b>
|
|
POLYGON(
|
|
(50 50, 200 50, 200 200, 50 200, 50 50))
|
|
</b>
|
|
<test>
|
|
<op name="intersection" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(50 50, 50 100, 100 100, 100 50, 50 50))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="union" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(10 10, 10 100, 50 100, 50 200, 200 200, 200 50, 100 50, 100 10, 10 10))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="difference" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(10 10, 10 100, 50 100, 50 50, 100 50, 100 10, 10 10))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="symdifference" arg1="A" arg2="B">
|
|
MULTIPOLYGON(
|
|
(
|
|
(10 10, 10 100, 50 100, 50 50, 100 50, 100 10, 10 10)),
|
|
(
|
|
(50 100, 50 200, 200 200, 200 50, 100 50, 100 100, 50 100)))
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>AA - A with hole intersecting B</desc>
|
|
<a>
|
|
POLYGON(
|
|
(20 20, 20 160, 160 160, 160 20, 20 20),
|
|
(140 140, 40 140, 40 40, 140 40, 140 140))
|
|
</a>
|
|
<b>
|
|
POLYGON(
|
|
(80 100, 220 100, 220 240, 80 240, 80 100))
|
|
</b>
|
|
<test>
|
|
<op name="intersection" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(80 140, 80 160, 160 160, 160 100, 140 100, 140 140, 80 140))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="union" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(20 20, 20 160, 80 160, 80 240, 220 240, 220 100, 160 100, 160 20, 20 20),
|
|
(80 100, 80 140, 40 140, 40 40, 140 40, 140 100, 80 100))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="difference" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(20 20, 20 160, 80 160, 80 140, 40 140, 40 40, 140 40, 140 100, 160 100,
|
|
160 20, 20 20))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="symdifference" arg1="A" arg2="B">
|
|
MULTIPOLYGON(
|
|
(
|
|
(20 20, 20 160, 80 160, 80 140, 40 140, 40 40, 140 40, 140 100, 160 100,
|
|
160 20, 20 20)),
|
|
(
|
|
(80 100, 80 140, 140 140, 140 100, 80 100)),
|
|
(
|
|
(80 160, 80 240, 220 240, 220 100, 160 100, 160 160, 80 160)))
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>AA - simple polygons #2</desc>
|
|
<a>
|
|
POLYGON(
|
|
(20 340, 330 380, 50 40, 20 340))
|
|
</a>
|
|
<b>
|
|
POLYGON(
|
|
(210 320, 140 270, 0 270, 140 220, 210 320))
|
|
</b>
|
|
<test>
|
|
<op name="intersection" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(27 270, 140 270, 210 320, 140 220, 28 260, 27 270))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="union" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(20 340, 330 380, 50 40, 28 260, 0 270, 27 270, 20 340))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="difference" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(20 340, 330 380, 50 40, 28 260, 140 220, 210 320, 140 270, 27 270, 20 340))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="symdifference" arg1="A" arg2="B">
|
|
MULTIPOLYGON(
|
|
(
|
|
(20 340, 330 380, 50 40, 28 260, 140 220, 210 320, 140 270, 27 270, 20 340)),
|
|
(
|
|
(27 270, 28 260, 0 270, 27 270)))
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>AA - simple polygons intersecting in P, L and A</desc>
|
|
<a>
|
|
POLYGON((0 0, 110 0, 110 60, 40 60, 180 140, 40 220, 110 260, 0 260, 0 0))
|
|
</a>
|
|
<b>
|
|
POLYGON((220 0, 110 0, 110 60, 180 60, 40 140, 180 220, 110 260, 220 260, 220 0))
|
|
</b>
|
|
<test>
|
|
<op name="intersection" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
POINT(110 260),
|
|
LINESTRING(110 0, 110 60),
|
|
POLYGON(
|
|
(110 100, 40 140, 110 180, 180 140, 110 100)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="union" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(110 0, 0 0, 0 260, 110 260, 220 260, 220 0, 110 0),
|
|
(110 260, 40 220, 110 180, 180 220, 110 260),
|
|
(110 100, 40 60, 110 60, 180 60, 110 100))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="difference" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(110 0, 0 0, 0 260, 110 260, 40 220, 110 180, 40 140, 110 100, 40 60,
|
|
110 60, 110 0))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="symdifference" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(110 0, 0 0, 0 260, 110 260, 220 260, 220 0, 110 0),
|
|
(110 260, 40 220, 110 180, 180 220, 110 260),
|
|
(110 180, 40 140, 110 100, 180 140, 110 180),
|
|
(110 100, 40 60, 110 60, 180 60, 110 100))
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>AA - simple polygons with two touching holes in their symDifference</desc>
|
|
<a>
|
|
POLYGON(
|
|
(0 0, 120 0, 120 50, 50 50, 120 100, 50 150, 120 150, 120 190, 0 190,
|
|
0 0))
|
|
</a>
|
|
<b>
|
|
POLYGON(
|
|
(230 0, 120 0, 120 50, 190 50, 120 100, 190 150, 120 150, 120 190, 230 190,
|
|
230 0))
|
|
</b>
|
|
<test>
|
|
<op name="symdifference" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(120 0, 0 0, 0 190, 120 190, 230 190, 230 0, 120 0),
|
|
(120 100, 50 50, 120 50, 190 50, 120 100),
|
|
(120 100, 190 150, 120 150, 50 150, 120 100))
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>AmA - A simple, symDiff contains inversion</desc>
|
|
<a>
|
|
POLYGON(
|
|
(0 0, 210 0, 210 230, 0 230, 0 0))
|
|
</a>
|
|
<b>
|
|
MULTIPOLYGON(
|
|
(
|
|
(40 20, 0 0, 20 40, 60 60, 40 20)),
|
|
(
|
|
(60 90, 60 60, 90 60, 90 90, 60 90)),
|
|
(
|
|
(70 120, 90 90, 100 120, 70 120)),
|
|
(
|
|
(120 70, 90 90, 120 100, 120 70)))
|
|
</b>
|
|
<test>
|
|
<op name="symdifference" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(0 0, 0 230, 210 230, 210 0, 0 0),
|
|
(0 0, 40 20, 60 60, 20 40, 0 0),
|
|
(60 60, 90 60, 90 90, 60 90, 60 60),
|
|
(90 90, 120 70, 120 100, 90 90),
|
|
(90 90, 100 120, 70 120, 90 90))
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>AmA - A simple, B connected multiPolygon touching A at vertex</desc>
|
|
<a>
|
|
POLYGON(
|
|
(0 0, 340 0, 340 300, 0 300, 0 0))
|
|
</a>
|
|
<b>
|
|
MULTIPOLYGON(
|
|
(
|
|
(40 20, 0 0, 20 40, 60 60, 40 20)),
|
|
(
|
|
(60 100, 60 60, 100 60, 100 100, 60 100)))
|
|
</b>
|
|
<test>
|
|
<op name="intersection" arg1="A" arg2="B">
|
|
MULTIPOLYGON(
|
|
(
|
|
(40 20, 0 0, 20 40, 60 60, 40 20)),
|
|
(
|
|
(60 60, 60 100, 100 100, 100 60, 60 60)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="symdifference" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(0 0, 0 300, 340 300, 340 0, 0 0),
|
|
(0 0, 40 20, 60 60, 20 40, 0 0),
|
|
(60 60, 100 60, 100 100, 60 100, 60 60))
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>AmA - A simple, B connected multiPolygon touching A at interior of edge</desc>
|
|
<a>
|
|
POLYGON(
|
|
(0 0, 120 0, 120 120, 0 120, 0 0))
|
|
</a>
|
|
<b>
|
|
MULTIPOLYGON(
|
|
(
|
|
(60 20, 0 20, 60 60, 60 20)),
|
|
(
|
|
(60 100, 60 60, 100 60, 100 100, 60 100)))
|
|
</b>
|
|
<test>
|
|
<op name="intersection" arg1="A" arg2="B">
|
|
MULTIPOLYGON(
|
|
(
|
|
(60 20, 0 20, 60 60, 60 20)),
|
|
(
|
|
(60 60, 60 100, 100 100, 100 60, 60 60)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="union" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(0 20, 0 120, 120 120, 120 0, 0 0, 0 20))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="difference" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(0 20, 0 120, 120 120, 120 0, 0 0, 0 20),
|
|
(0 20, 60 20, 60 60, 0 20),
|
|
(60 60, 100 60, 100 100, 60 100, 60 60))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="symdifference" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(0 20, 0 120, 120 120, 120 0, 0 0, 0 20),
|
|
(0 20, 60 20, 60 60, 0 20),
|
|
(60 60, 100 60, 100 100, 60 100, 60 60))
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>AA - simple polygons with holes</desc>
|
|
<a>
|
|
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))
|
|
</a>
|
|
<b>
|
|
POLYGON(
|
|
(300 330, 190 270, 150 170, 150 110, 250 30, 380 50, 380 250, 300 330),
|
|
(290 240, 240 200, 240 110, 290 80, 330 170, 290 240))
|
|
</b>
|
|
<test>
|
|
<op name="intersection" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(251 104, 217 57, 176 89, 210 130, 210 210, 172 226, 190 270, 217 285, 260 250,
|
|
263 218, 240 200, 240 110, 251 104))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="symdifference" arg1="A" arg2="B">
|
|
MULTIPOLYGON(
|
|
(
|
|
(217 57, 190 20, 60 40, 20 150, 60 260, 160 330, 217 285, 190 270, 172 226,
|
|
140 240, 80 190, 90 100, 160 70, 176 89, 217 57)),
|
|
(
|
|
(217 57, 251 104, 290 80, 330 170, 290 240, 263 218, 260 250, 217 285, 300 330,
|
|
380 250, 380 50, 250 30, 217 57)),
|
|
(
|
|
(263 218, 270 130, 251 104, 240 110, 240 200, 263 218)),
|
|
(
|
|
(172 226, 210 210, 210 130, 176 89, 150 110, 150 170, 172 226)))
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>AA - simple polygons with hole touching shell</desc>
|
|
<a>
|
|
POLYGON ((20 0, 20 160, 200 160, 200 0, 20 0))
|
|
</a>
|
|
<b>
|
|
POLYGON ((220 80, 0 80, 0 240, 220 240, 220 80),
|
|
(100 80, 120 120, 80 120, 100 80))
|
|
</b>
|
|
<test>
|
|
<op name="intersection" arg1="A" arg2="B">
|
|
POLYGON ((20 80, 20 160, 200 160, 200 80, 100 80, 20 80),
|
|
(100 80, 120 120, 80 120, 100 80))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="union" arg1="A" arg2="B">
|
|
POLYGON ((20 0, 20 80, 0 80, 0 240, 220 240, 220 80, 200 80, 200 0, 20 0))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="difference" arg1="A" arg2="B">
|
|
MULTIPOLYGON (((20 0, 20 80, 100 80, 200 80, 200 0, 20 0)),
|
|
((100 80, 80 120, 120 120, 100 80)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="symdifference" arg1="A" arg2="B">
|
|
MULTIPOLYGON (((20 0, 20 80, 100 80, 200 80, 200 0, 20 0)),
|
|
((200 80, 200 160, 20 160, 20 80, 0 80, 0 240, 220 240, 220 80, 200 80)),
|
|
((100 80, 80 120, 120 120, 100 80)))
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>mAmA - complex polygons touching and overlapping</desc>
|
|
<a>
|
|
MULTIPOLYGON(
|
|
(
|
|
(120 340, 120 200, 140 200, 140 280, 160 280, 160 200, 180 200, 180 280, 200 280,
|
|
200 200, 220 200, 220 340, 120 340)),
|
|
(
|
|
(360 200, 220 200, 220 180, 300 180, 300 160, 220 160, 220 140, 300 140, 300 120,
|
|
220 120, 220 100, 360 100, 360 200)))
|
|
</a>
|
|
<b>
|
|
MULTIPOLYGON(
|
|
(
|
|
(100 220, 100 200, 300 200, 300 220, 100 220)),
|
|
(
|
|
(280 180, 280 160, 300 160, 300 180, 280 180)),
|
|
(
|
|
(220 140, 220 120, 240 120, 240 140, 220 140)),
|
|
(
|
|
(180 220, 160 240, 200 240, 180 220)))
|
|
</b>
|
|
<test>
|
|
<op name="getboundary" arg1="A">
|
|
MULTILINESTRING(
|
|
(120 340, 120 200, 140 200, 140 280, 160 280, 160 200, 180 200, 180 280, 200 280,
|
|
200 200, 220 200, 220 340, 120 340),
|
|
(360 200, 220 200, 220 180, 300 180, 300 160, 220 160, 220 140, 300 140, 300 120,
|
|
220 120, 220 100, 360 100, 360 200))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="convexhull" arg1="A">
|
|
POLYGON(
|
|
(220 100, 120 200, 120 340, 220 340, 360 200, 360 100, 220 100))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="intersection" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
POINT(200 240),
|
|
LINESTRING(300 200, 220 200),
|
|
LINESTRING(280 180, 300 180),
|
|
LINESTRING(300 180, 300 160),
|
|
LINESTRING(300 160, 280 160),
|
|
LINESTRING(220 140, 240 140),
|
|
LINESTRING(240 120, 220 120),
|
|
POLYGON(
|
|
(120 200, 120 220, 140 220, 140 200, 120 200)),
|
|
POLYGON(
|
|
(160 200, 160 220, 180 220, 180 200, 160 200)),
|
|
POLYGON(
|
|
(180 240, 180 220, 160 240, 180 240)),
|
|
POLYGON(
|
|
(200 200, 200 220, 220 220, 220 200, 200 200)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="union" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(120 220, 120 340, 220 340, 220 220, 300 220, 300 200, 360 200, 360 100, 220 100,
|
|
220 120, 220 140, 220 160, 280 160, 280 180, 220 180, 220 200, 200 200, 180 200, 160 200,
|
|
140 200, 120 200, 100 200, 100 220, 120 220),
|
|
(200 240, 200 280, 180 280, 180 240, 200 240),
|
|
(200 240, 180 220, 200 220, 200 240),
|
|
(160 240, 160 280, 140 280, 140 220, 160 220, 160 240),
|
|
(240 120, 300 120, 300 140, 240 140, 240 120))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="difference" arg1="A" arg2="B">
|
|
MULTIPOLYGON(
|
|
(
|
|
(120 220, 120 340, 220 340, 220 220, 200 220, 200 240, 200 280, 180 280, 180 240,
|
|
160 240, 160 280, 140 280, 140 220, 120 220)),
|
|
(
|
|
(160 220, 160 240, 180 220, 160 220)),
|
|
(
|
|
(300 200, 360 200, 360 100, 220 100, 220 120, 240 120, 300 120, 300 140, 240 140,
|
|
220 140, 220 160, 280 160, 300 160, 300 180, 280 180, 220 180, 220 200, 300 200)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="symdifference" arg1="A" arg2="B">
|
|
MULTIPOLYGON(
|
|
(
|
|
(120 220, 120 340, 220 340, 220 220, 200 220, 200 240, 200 280, 180 280, 180 240,
|
|
160 240, 160 280, 140 280, 140 220, 120 220)),
|
|
(
|
|
(120 220, 120 200, 100 200, 100 220, 120 220)),
|
|
(
|
|
(140 200, 140 220, 160 220, 160 200, 140 200)),
|
|
(
|
|
(160 220, 160 240, 180 220, 160 220)),
|
|
(
|
|
(180 200, 180 220, 200 220, 200 200, 180 200)),
|
|
(
|
|
(180 220, 180 240, 200 240, 180 220)),
|
|
(
|
|
(220 200, 220 220, 300 220, 300 200, 360 200, 360 100, 220 100, 220 120, 220 140,
|
|
220 160, 280 160, 280 180, 220 180, 220 200),
|
|
(240 120, 300 120, 300 140, 240 140, 240 120)))
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>mAmA - complex polygons touching</desc>
|
|
<a>
|
|
MULTIPOLYGON(
|
|
(
|
|
(100 200, 100 180, 120 180, 120 200, 100 200)),
|
|
(
|
|
(60 240, 60 140, 220 140, 220 160, 160 160, 160 180, 200 180, 200 200, 160 200,
|
|
160 220, 220 220, 220 240, 60 240),
|
|
(80 220, 80 160, 140 160, 140 220, 80 220)),
|
|
(
|
|
(280 220, 240 180, 260 160, 300 200, 280 220)))
|
|
</a>
|
|
<b>
|
|
MULTIPOLYGON(
|
|
(
|
|
(80 220, 80 160, 140 160, 140 220, 80 220),
|
|
(100 200, 100 180, 120 180, 120 200, 100 200)),
|
|
(
|
|
(220 240, 220 220, 160 220, 160 200, 220 200, 220 180, 160 180, 160 160, 220 160,
|
|
220 140, 320 140, 320 240, 220 240),
|
|
(240 220, 240 160, 300 160, 300 220, 240 220)))
|
|
</b>
|
|
<test>
|
|
<op name="getboundary" arg1="A">
|
|
MULTILINESTRING(
|
|
(100 200, 100 180, 120 180, 120 200, 100 200),
|
|
(60 240, 60 140, 220 140, 220 160, 160 160, 160 180, 200 180, 200 200, 160 200,
|
|
160 220, 220 220, 220 240, 60 240),
|
|
(80 220, 80 160, 140 160, 140 220, 80 220),
|
|
(280 220, 240 180, 260 160, 300 200, 280 220))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="convexhull" arg1="A">
|
|
POLYGON(
|
|
(60 140, 60 240, 220 240, 280 220, 300 200, 260 160, 220 140, 60 140))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="intersection" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
POINT(240 180),
|
|
POINT(260 160),
|
|
POINT(280 220),
|
|
POINT(300 200),
|
|
LINESTRING(100 200, 100 180),
|
|
LINESTRING(100 180, 120 180),
|
|
LINESTRING(120 180, 120 200),
|
|
LINESTRING(120 200, 100 200),
|
|
LINESTRING(220 140, 220 160),
|
|
LINESTRING(220 160, 160 160),
|
|
LINESTRING(160 160, 160 180),
|
|
LINESTRING(160 180, 200 180),
|
|
LINESTRING(200 200, 160 200),
|
|
LINESTRING(160 200, 160 220),
|
|
LINESTRING(160 220, 220 220),
|
|
LINESTRING(220 220, 220 240),
|
|
LINESTRING(80 220, 80 160),
|
|
LINESTRING(80 160, 140 160),
|
|
LINESTRING(140 160, 140 220),
|
|
LINESTRING(140 220, 80 220))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="union" arg1="A" arg2="B">
|
|
MULTIPOLYGON(
|
|
(
|
|
(220 140, 60 140, 60 240, 220 240, 320 240, 320 140, 220 140),
|
|
(200 200, 200 180, 220 180, 220 200, 200 200),
|
|
(240 220, 240 180, 240 160, 260 160, 300 160, 300 200, 300 220, 280 220, 240 220)),
|
|
(
|
|
(240 180, 280 220, 300 200, 260 160, 240 180)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="difference" arg1="A" arg2="B">
|
|
MULTIPOLYGON(
|
|
(
|
|
(100 180, 100 200, 120 200, 120 180, 100 180)),
|
|
(
|
|
(220 140, 60 140, 60 240, 220 240, 220 220, 160 220, 160 200, 200 200, 200 180,
|
|
160 180, 160 160, 220 160, 220 140),
|
|
(80 220, 80 160, 140 160, 140 220, 80 220)),
|
|
(
|
|
(240 180, 280 220, 300 200, 260 160, 240 180)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="symdifference" arg1="A" arg2="B">
|
|
MULTIPOLYGON(
|
|
(
|
|
(220 140, 60 140, 60 240, 220 240, 320 240, 320 140, 220 140),
|
|
(200 200, 200 180, 220 180, 220 200, 200 200),
|
|
(240 220, 240 180, 240 160, 260 160, 300 160, 300 200, 300 220, 280 220, 240 220)),
|
|
(
|
|
(240 180, 280 220, 300 200, 260 160, 240 180)))
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
<case>
|
|
<desc>AA - hole intersecting boundary to produce line</desc>
|
|
<a>
|
|
POLYGON(
|
|
(60 160, 140 160, 140 60, 60 60, 60 160))
|
|
</a>
|
|
<b>
|
|
POLYGON(
|
|
(160 160, 100 160, 100 100, 160 100, 160 160),
|
|
(140 140, 120 140, 120 120, 140 120, 140 140))
|
|
</b>
|
|
<test>
|
|
<op name="getboundary" arg1="A">
|
|
LINESTRING(60 160, 140 160, 140 60, 60 60, 60 160)
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="convexhull" arg1="A">
|
|
POLYGON(
|
|
(60 60, 60 160, 140 160, 140 60, 60 60))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="intersection" arg1="A" arg2="B">
|
|
GEOMETRYCOLLECTION(
|
|
LINESTRING(140 140, 140 120),
|
|
POLYGON(
|
|
(100 160, 140 160, 140 140, 120 140, 120 120, 140 120, 140 100, 100 100, 100 160)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="union" arg1="A" arg2="B">
|
|
POLYGON(
|
|
(60 160, 100 160, 140 160, 160 160, 160 100, 140 100, 140 60, 60 60, 60 160))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="difference" arg1="A" arg2="B">
|
|
MULTIPOLYGON(
|
|
(
|
|
(60 160, 100 160, 100 100, 140 100, 140 60, 60 60, 60 160)),
|
|
(
|
|
(140 140, 140 120, 120 120, 120 140, 140 140)))
|
|
</op>
|
|
</test>
|
|
<test>
|
|
<op name="symdifference" arg1="A" arg2="B">
|
|
MULTIPOLYGON(
|
|
(
|
|
(60 160, 100 160, 100 100, 140 100, 140 60, 60 60, 60 160)),
|
|
(
|
|
(140 140, 140 160, 160 160, 160 100, 140 100, 140 120, 120 120, 120 140, 140 140)))
|
|
</op>
|
|
</test>
|
|
</case>
|
|
|
|
</run>
|