{
  "cases": [
    {
      "group": "TestRelatePP",
      "category": "relate",
      "title": "P/P: same point [dim(0){A.P.Int = B.P.Int}]",
      "id": "01-001",
      "a": {
        "wkt": "POINT (20 20)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            20,
            20
          ]
        }
      },
      "b": {
        "wkt": "POINT (20 20)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            20,
            20
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "0FFFFFFF2"
      }
    },
    {
      "group": "TestRelatePP",
      "category": "relate",
      "title": "P/P: different point [dim(0){A.P.Int = B.P.Ext}]",
      "id": "01-002",
      "a": {
        "wkt": "POINT (20 20)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            20,
            20
          ]
        }
      },
      "b": {
        "wkt": "POINT (40 60)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            40,
            60
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF0F2"
      }
    },
    {
      "group": "TestRelatePP",
      "category": "relate",
      "title": "P/mP: different points [dim(0){A.P.Int = B.3P.Ext}]",
      "id": "01-003",
      "a": {
        "wkt": "POINT (40 40)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            40,
            40
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOINT (20 20, 80 80, 20 120)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              20,
              20
            ],
            [
              80,
              80
            ],
            [
              20,
              120
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF0F2"
      }
    },
    {
      "group": "TestRelatePP",
      "category": "relate",
      "title": "P/mP: point A within one of B points [dim(0){A.P.Int = B.3P1.Int}]",
      "id": "01-004",
      "a": {
        "wkt": "POINT (20 20)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            20,
            20
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOINT (20 20, 80 80, 20 120)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              20,
              20
            ],
            [
              80,
              80
            ],
            [
              20,
              120
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF0F2"
      }
    },
    {
      "group": "TestRelatePP",
      "category": "relate",
      "title": "mP/mP-1-1: same points [dim(0){A.3P1.Int = B.3P1.Int}, dim(0){A.3P2.Int = B.3P2.Int}, dim(0){A.3P3.Int = B.3P3.Int}]",
      "id": "01-005",
      "a": {
        "wkt": "MULTIPOINT (40 40, 80 60, 120 100)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              40,
              40
            ],
            [
              80,
              60
            ],
            [
              120,
              100
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOINT (40 40, 80 60, 120 100)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              40,
              40
            ],
            [
              80,
              60
            ],
            [
              120,
              100
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "0FFFFFFF2"
      }
    },
    {
      "group": "TestRelatePP",
      "category": "relate",
      "title": "mP/mP-1-2: same but different sequence of points [dim(0){A.3P1.Int = B.3P1.Int}, dim(0){A.3P1.Int = B.3P3.Int}, dim(0){A.3P3.Int = B.3P2.Int}]",
      "id": "01-006",
      "a": {
        "wkt": "MULTIPOINT (40 40, 80 60, 120 100)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              40,
              40
            ],
            [
              80,
              60
            ],
            [
              120,
              100
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOINT (40 40, 120 100, 80 60)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              40,
              40
            ],
            [
              120,
              100
            ],
            [
              80,
              60
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "0FFFFFFF2"
      }
    },
    {
      "group": "TestRelatePP",
      "category": "relate",
      "title": "mP/mP-2: different points [dim(0){A.4P.Int = B.4P.Ext}]",
      "id": "01-007",
      "a": {
        "wkt": "MULTIPOINT (40 40, 60 100, 100 60, 120 120)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              40,
              40
            ],
            [
              60,
              100
            ],
            [
              100,
              60
            ],
            [
              120,
              120
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOINT (20 120, 60 60, 100 100, 140 40)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              20,
              120
            ],
            [
              60,
              60
            ],
            [
              100,
              100
            ],
            [
              140,
              40
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF0F2"
      }
    },
    {
      "group": "TestRelatePP",
      "category": "relate",
      "title": "mP/mP-5-1: same points [dim(0){A.4P.Int = B.4P.Int}]",
      "id": "01-008",
      "a": {
        "wkt": "MULTIPOINT (20 20, 80 70, 140 120, 200 170)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              20,
              20
            ],
            [
              80,
              70
            ],
            [
              140,
              120
            ],
            [
              200,
              170
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOINT (20 20, 80 70, 140 120, 200 170)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              20,
              20
            ],
            [
              80,
              70
            ],
            [
              140,
              120
            ],
            [
              200,
              170
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "0FFFFFFF2"
      }
    },
    {
      "group": "TestRelatePP",
      "category": "relate",
      "title": "mP/mP-5-2: same points but different sequence [dim(0){A.4P.Int = B.4P.Int}]",
      "id": "01-009",
      "a": {
        "wkt": "MULTIPOINT (20 20, 140 120, 80 70, 200 170)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              20,
              20
            ],
            [
              140,
              120
            ],
            [
              80,
              70
            ],
            [
              200,
              170
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOINT (80 70, 20 20, 200 170, 140 120)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              80,
              70
            ],
            [
              20,
              20
            ],
            [
              200,
              170
            ],
            [
              140,
              120
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "0FFFFFFF2"
      }
    },
    {
      "group": "TestRelatePP",
      "category": "relate",
      "title": "mP/mP-5-3: some points same [dim(0){A.4P2.Int = B.2P1.Int}, dim(0){A.4P3.Int = B.2P2.Int}]",
      "id": "01-010",
      "a": {
        "wkt": "MULTIPOINT (20 20, 80 70, 140 120, 200 170)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              20,
              20
            ],
            [
              80,
              70
            ],
            [
              140,
              120
            ],
            [
              200,
              170
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOINT (80 70, 140 120)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              80,
              70
            ],
            [
              140,
              120
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "0F0FFFFF2"
      }
    },
    {
      "group": "TestRelatePP",
      "category": "relate",
      "title": "mP/mP-5-4: some points same, in a different sequence [dim(0){A.4P1.Int = B.2P2.Int}, dim(0){A.4P4.Int = B.2P1.Int}]",
      "id": "01-011",
      "a": {
        "wkt": "MULTIPOINT (80 70, 20 20, 200 170, 140 120)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              80,
              70
            ],
            [
              20,
              20
            ],
            [
              200,
              170
            ],
            [
              140,
              120
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOINT (140 120, 80 70)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              140,
              120
            ],
            [
              80,
              70
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "0F0FFFFF2"
      }
    },
    {
      "group": "TestRelatePP",
      "category": "relate",
      "title": "mP/mP-6-1: some points same, some different [dim(0){A.4P4.Int = B.3P2.Int}]",
      "id": "01-012",
      "a": {
        "wkt": "MULTIPOINT (80 70, 20 20, 200 170, 140 120)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              80,
              70
            ],
            [
              20,
              20
            ],
            [
              200,
              170
            ],
            [
              140,
              120
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOINT (80 170, 140 120, 200 80)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              80,
              170
            ],
            [
              140,
              120
            ],
            [
              200,
              80
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "0F0FFF0F2"
      }
    },
    {
      "group": "TestRelatePP",
      "category": "relate",
      "title": "mP/mP-6-2: dim(0){A.4P1.Int = B.4P4.Int}, dim(0){A.4P4.Int = B.4P2.Int}",
      "id": "01-013",
      "a": {
        "wkt": "MULTIPOINT (80 70, 20 20, 200 170, 140 120)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              80,
              70
            ],
            [
              20,
              20
            ],
            [
              200,
              170
            ],
            [
              140,
              120
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOINT (80 170, 140 120, 200 80, 80 70)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              80,
              170
            ],
            [
              140,
              120
            ],
            [
              200,
              80
            ],
            [
              80,
              70
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "0F0FFF0F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/L-2: a point and a line disjoint [dim(0){A.P.Int = B.L.Ext}]",
      "id": "02-001",
      "a": {
        "wkt": "POINT (110 200)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            200
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/L-3-1: a point touching the start point of a line [dim(0){A.P.Int = B.L.Bdy.SP}]",
      "id": "02-002",
      "a": {
        "wkt": "POINT (90 80)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            90,
            80
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/L-3-2: a point touching the end point of a line [dim(0){A.P.Int = B.L.Bdy.EP}]",
      "id": "02-003",
      "a": {
        "wkt": "POINT (340 240)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            340,
            240
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/L-5-1: a point on the line at a non-vertex [dim(0){A.P.Int = B.L.Int.NV}]",
      "id": "02-004",
      "a": {
        "wkt": "POINT (230 150)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            230,
            150
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/L-5-2: a point on the line at a vertex [dim(0){A.P.Int = B.L.Int.V}]",
      "id": "02-005",
      "a": {
        "wkt": "POINT (160 150)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            160,
            150
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/LR-2-1: a point outside a LinearRing [dim(0){A.P.Int = B.LR.Ext}]",
      "id": "02-006",
      "a": {
        "wkt": "POINT (90 150)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            90,
            150
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (150 150, 20 20, 280 20, 150 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              150,
              150
            ],
            [
              20,
              20
            ],
            [
              280,
              20
            ],
            [
              150,
              150
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/LR-2-2: a point inside a LinearRing [dim(0){A.P.Int = B.LR.Ext}]",
      "id": "02-007",
      "a": {
        "wkt": "POINT (150 80)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            150,
            80
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (150 150, 20 20, 280 20, 150 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              150,
              150
            ],
            [
              20,
              20
            ],
            [
              280,
              20
            ],
            [
              150,
              150
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/LR-5-1: a point on the closing point of a LinearRing [dim(0){A.P.Int = B.LR.Int.CP}]",
      "id": "02-008",
      "a": {
        "wkt": "POINT (150 150)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            150,
            150
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (150 150, 20 20, 280 20, 150 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              150,
              150
            ],
            [
              20,
              20
            ],
            [
              280,
              20
            ],
            [
              150,
              150
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/LR-5-2: a point on a LinearRing at a non-vertex [dim(0){A.P.Int = B.L.Int.NV}]",
      "id": "02-009",
      "a": {
        "wkt": "POINT (100 20)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            100,
            20
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (150 150, 20 20, 280 20, 150 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              150,
              150
            ],
            [
              20,
              20
            ],
            [
              280,
              20
            ],
            [
              150,
              150
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/LR-5-3: a point on a LinearRing at a vertex [dim(0){A.P.Int = B.L.Int.V}]",
      "id": "02-010",
      "a": {
        "wkt": "POINT (20 20)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            20,
            20
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (150 150, 20 20, 280 20, 150 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              150,
              150
            ],
            [
              20,
              20
            ],
            [
              280,
              20
            ],
            [
              150,
              150
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.1-3-1: a point on a non-simple LineString's end point [dim(0){A.P.Int = B.nsL.Bdy.EP}]",
      "id": "02-011",
      "a": {
        "wkt": "POINT (220 220)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            220,
            220
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 220 20, 20 20, 110 110, 220 220)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              220,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ],
            [
              220,
              220
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.1-5-1: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}]",
      "id": "02-012",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 220 20, 20 20, 110 110, 220 220)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              220,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ],
            [
              220,
              220
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.1-5-2: a point a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}]",
      "id": "02-013",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 220 20, 20 20, 220 220)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              220,
              20
            ],
            [
              20,
              20
            ],
            [
              220,
              220
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.1-5-3: a point on a non-simple LineString's interior at a non-vertex [dim(0){A.P.Int = B.nsL.Int.NV}]",
      "id": "02-014",
      "a": {
        "wkt": "POINT (110 20)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            20
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 220 20, 20 20, 220 220)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              220,
              20
            ],
            [
              20,
              20
            ],
            [
              220,
              220
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.1-5-4: a point on a non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.V}]",
      "id": "02-015",
      "a": {
        "wkt": "POINT (220 20)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            220,
            20
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 220 20, 20 20, 220 220)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              220,
              20
            ],
            [
              20,
              20
            ],
            [
              220,
              220
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.2-5-2: a point on a non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.NV}]",
      "id": "02-016",
      "a": {
        "wkt": "POINT (110 20)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            20
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (220 220, 20 20, 220 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              220,
              220
            ],
            [
              20,
              20
            ],
            [
              220,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.2-5-3: a point on a non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.V}]",
      "id": "02-017",
      "a": {
        "wkt": "POINT (20 20)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            20,
            20
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (220 220, 20 20, 220 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              220,
              220
            ],
            [
              20,
              20
            ],
            [
              220,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.2-5-4: a point on a non-simple LineString's interior at a vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}]",
      "id": "02-018",
      "a": {
        "wkt": "POINT (20 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            20,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 200, 20 20, 110 20, 20 110, 110 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              200
            ],
            [
              20,
              20
            ],
            [
              110,
              20
            ],
            [
              20,
              110
            ],
            [
              110,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.3-3-1: a point on a non-simple LineString's start point [dim(0){A.P.Int = B.nsL.Bdy.SP}]",
      "id": "02-019",
      "a": {
        "wkt": "POINT (20 200)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            20,
            200
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 200, 200 20, 20 20, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              200
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.3-5-1: a point on a non-simple LineString's interior at a non-vertex with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.NVo}]",
      "id": "02-020",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 200, 200 20, 140 20, 140 80, 80 140, 20 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              200
            ],
            [
              200,
              20
            ],
            [
              140,
              20
            ],
            [
              140,
              80
            ],
            [
              80,
              140
            ],
            [
              20,
              140
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.3-5-2: a point on a non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}]",
      "id": "02-021",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 200, 200 20, 20 20, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              200
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.3-5-3: a point on a non-simple LineString's interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}]",
      "id": "02-022",
      "a": {
        "wkt": "POINT (80 140)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            80,
            140
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              200
            ],
            [
              110,
              110
            ],
            [
              200,
              20
            ],
            [
              140,
              20
            ],
            [
              140,
              80
            ],
            [
              110,
              110
            ],
            [
              80,
              140
            ],
            [
              20,
              140
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.3-5-4: a point on a non-simple LineString's interior at a two-vertex point with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vo}]",
      "id": "02-023",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              200
            ],
            [
              110,
              110
            ],
            [
              200,
              20
            ],
            [
              140,
              20
            ],
            [
              140,
              80
            ],
            [
              110,
              110
            ],
            [
              80,
              140
            ],
            [
              20,
              140
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.3-5-5: a point on a non-simple LineString's interior at a vertex with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vo}]",
      "id": "02-024",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 200, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              200
            ],
            [
              200,
              20
            ],
            [
              140,
              20
            ],
            [
              140,
              80
            ],
            [
              110,
              110
            ],
            [
              80,
              140
            ],
            [
              20,
              140
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.3-5-6: a point on a non-simple LineString's interior at a two-vertex point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}]",
      "id": "02-025",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 200, 110 110, 200 20, 20 20, 110 110, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              200
            ],
            [
              110,
              110
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.3-5-7: a point on a non-simple LineString's interior at a vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}]",
      "id": "02-026",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 200, 200 20, 20 20, 110 110, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              200
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.3-5-8: a point on a non-simple LineString's interior at a two-vertex point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}]",
      "id": "02-027",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 200, 110 110, 20 20, 200 20, 110 110, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              200
            ],
            [
              110,
              110
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.4-3-1: a point on a non-simple LineString's start point with crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Bdy.SPb}]",
      "id": "02-028",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 110 200, 20 200, 110 110, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              110,
              200
            ],
            [
              20,
              200
            ],
            [
              110,
              110
            ],
            [
              200,
              20
            ],
            [
              140,
              20
            ],
            [
              140,
              80
            ],
            [
              110,
              110
            ],
            [
              80,
              140
            ],
            [
              20,
              140
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.4-3-2: a point on a non-simple LineString's start point with crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Bdy.SPb}]",
      "id": "02-029",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 110 200, 20 200, 200 20, 140 20, 140 80, 110 110, 80 140, 20 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              110,
              200
            ],
            [
              20,
              200
            ],
            [
              200,
              20
            ],
            [
              140,
              20
            ],
            [
              140,
              80
            ],
            [
              110,
              110
            ],
            [
              80,
              140
            ],
            [
              20,
              140
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.4-3-3:a point on a non-simple LineString's start point with crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Bdy.SPb}]",
      "id": "02-030",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 110 200, 20 200, 200 20, 140 20, 140 80, 80 140, 20 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              110,
              200
            ],
            [
              20,
              200
            ],
            [
              200,
              20
            ],
            [
              140,
              20
            ],
            [
              140,
              80
            ],
            [
              80,
              140
            ],
            [
              20,
              140
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.4-3-4: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}]",
      "id": "02-031",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 110 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              110,
              200
            ],
            [
              20,
              200
            ],
            [
              110,
              110
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.4-3-5: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}]",
      "id": "02-032",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 110 200, 20 200, 200 20, 20 20, 110 110, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              110,
              200
            ],
            [
              20,
              200
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.4-3-6: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}]",
      "id": "02-033",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 110 200, 20 200, 200 20, 20 20, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              110,
              200
            ],
            [
              20,
              200
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.4-3-7: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}]",
      "id": "02-034",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 110 200, 20 200, 110 110, 20 20, 200 20, 110 110, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              110,
              200
            ],
            [
              20,
              200
            ],
            [
              110,
              110
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.4-3-8: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}]",
      "id": "02-035",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 110 200, 20 200, 200 20, 200 110, 110 110, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              110,
              200
            ],
            [
              20,
              200
            ],
            [
              200,
              20
            ],
            [
              200,
              110
            ],
            [
              110,
              110
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.5-3-1: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}]",
      "id": "02-036",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 200, 110 110, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              110,
              110
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              20,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.5-3-2: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}]",
      "id": "02-037",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              20,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.5-3-3: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}]",
      "id": "02-038",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 200, 20 20, 200 20, 20 200, 110 200, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              20,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.5-3-4: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}]",
      "id": "02-039",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 200, 110 110, 200 20, 20 20, 110 110, 20 200, 110 200, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              110,
              110
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ],
            [
              20,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.5-3-5: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}]",
      "id": "02-040",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 200, 20 20, 20 110, 110 110, 20 200, 110 200, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              20,
              20
            ],
            [
              20,
              110
            ],
            [
              110,
              110
            ],
            [
              20,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.6-3-1: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}]",
      "id": "02-041",
      "a": {
        "wkt": "POINT (110 160)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            160
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 160, 200 250, 110 250, 110 160, 110 110, 110 20, 20 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              160
            ],
            [
              200,
              250
            ],
            [
              110,
              250
            ],
            [
              110,
              160
            ],
            [
              110,
              110
            ],
            [
              110,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.6-3-2: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}]",
      "id": "02-042",
      "a": {
        "wkt": "POINT (110 160)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            160
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 160, 200 250, 110 250, 110 110, 110 20, 20 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              160
            ],
            [
              200,
              250
            ],
            [
              110,
              250
            ],
            [
              110,
              110
            ],
            [
              110,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.6-3-3: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}]",
      "id": "02-043",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 160, 200 250, 110 250, 110 160, 110 110, 110 20, 20 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              160
            ],
            [
              200,
              250
            ],
            [
              110,
              250
            ],
            [
              110,
              160
            ],
            [
              110,
              110
            ],
            [
              110,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.6-3-4: a point on a non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}]",
      "id": "02-044",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 160, 200 250, 110 250, 110 160, 110 20, 20 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              160
            ],
            [
              200,
              250
            ],
            [
              110,
              250
            ],
            [
              110,
              160
            ],
            [
              110,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.7-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}]",
      "id": "02-045",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 200 200, 110 200, 110 110, 110 20, 20 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              200,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ],
            [
              110,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.7-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}]",
      "id": "02-046",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 200 200, 110 200, 110 20, 20 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              200,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.7-5-3: a point on a closed non-simple LineString's interior at a non-vertex [dim(0){A.P.Int = B.nsL.Int.NV}]",
      "id": "02-047",
      "a": {
        "wkt": "POINT (140 200)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            140,
            200
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 200 200, 110 200, 110 110, 110 20, 20 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              200,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ],
            [
              110,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.7-5-4: a point on a closed non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.V}]",
      "id": "02-048",
      "a": {
        "wkt": "POINT (110 200)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            200
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 200 200, 110 200, 110 110, 110 20, 20 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              200,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ],
            [
              110,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.8-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}]",
      "id": "02-049",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 200 200, 110 200, 110 110, 110 20, 200 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              200,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ],
            [
              110,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.8-5-2: a point on the interior (at a non-vertex) of a closed non-simple LineString [dim(0){A.P.Int = B.nsL.Int.NV}]",
      "id": "02-050",
      "a": {
        "wkt": "POINT (140 200)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            140,
            200
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 200 200, 110 200, 110 110, 110 20, 200 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              200,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ],
            [
              110,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.8-5-3: a point on a closed non-simple LineString's interior at a vertex [dim(0){A.P.Int = B.nsL.Int.V}]",
      "id": "02-051",
      "a": {
        "wkt": "POINT (110 200)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            200
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 200 200, 110 200, 110 110, 110 20, 200 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              200,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ],
            [
              110,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.9-3-1: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}]",
      "id": "02-052",
      "a": {
        "wkt": "POINT (90 130)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            90,
            130
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 130, 20 130, 20 200, 90 130, 200 20, 20 20, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              130
            ],
            [
              20,
              130
            ],
            [
              20,
              200
            ],
            [
              90,
              130
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.9-5-1: a point on a non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}]",
      "id": "02-053",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 130, 20 130, 20 200, 90 130, 200 20, 20 20, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              130
            ],
            [
              20,
              130
            ],
            [
              20,
              200
            ],
            [
              90,
              130
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.10-3-1: a point on a non-simple LineString's start point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}]",
      "id": "02-054",
      "a": {
        "wkt": "POINT (90 130)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            90,
            130
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 130, 20 130, 20 200, 200 20, 20 20, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              130
            ],
            [
              20,
              130
            ],
            [
              20,
              200
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.10-5-1: a point on a non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}]",
      "id": "02-055",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 130, 20 130, 20 200, 200 20, 20 20, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              130
            ],
            [
              20,
              130
            ],
            [
              20,
              200
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.11-3-1: a point on a closed non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.EPx}]",
      "id": "02-056",
      "a": {
        "wkt": "POINT (90 130)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            90,
            130
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 200, 20 20, 200 20, 90 130, 20 200, 20 130, 90 130)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              90,
              130
            ],
            [
              20,
              200
            ],
            [
              20,
              130
            ],
            [
              90,
              130
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.11-5-1: a point on a closed non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}]",
      "id": "02-057",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 200, 20 20, 200 20, 90 130, 20 200, 20 130, 90 130)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              90,
              130
            ],
            [
              20,
              200
            ],
            [
              20,
              130
            ],
            [
              90,
              130
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.12-3-1: a point on a closed non-simple LineString's end point with crossing line segments [dim(0){A.P.Int = B.nsL.Bdy.SPx}]",
      "id": "02-058",
      "a": {
        "wkt": "POINT (90 130)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            90,
            130
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 200, 20 20, 200 20, 20 200, 20 130, 90 130)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              20,
              200
            ],
            [
              20,
              130
            ],
            [
              90,
              130
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.12-5-1: a point on a closed non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}]",
      "id": "02-059",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 200, 20 20, 200 20, 20 200, 20 130, 90 130)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              20,
              200
            ],
            [
              20,
              130
            ],
            [
              90,
              130
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.13-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}]",
      "id": "02-060",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 20 130, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 200 130, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              20,
              130
            ],
            [
              20,
              200
            ],
            [
              110,
              110
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ],
            [
              200,
              200
            ],
            [
              200,
              130
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.13-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}]",
      "id": "02-061",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 20 130, 20 200, 200 20, 20 20, 200 200, 200 130, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              20,
              130
            ],
            [
              20,
              200
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              200,
              200
            ],
            [
              200,
              130
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.14-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}]",
      "id": "02-062",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 80 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 140 200, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              80,
              200
            ],
            [
              20,
              200
            ],
            [
              110,
              110
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ],
            [
              200,
              200
            ],
            [
              140,
              200
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.14-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}]",
      "id": "02-063",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 80 200, 20 200, 200 20, 20 20, 200 200, 140 200, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              80,
              200
            ],
            [
              20,
              200
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              200,
              200
            ],
            [
              140,
              200
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.15-5-1: a point on a closed non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}]",
      "id": "02-064",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 200, 20 20, 200 20, 20 200, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              20,
              200
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.15-5-2: a point on a closed non-simple LineString's interior at a vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}]",
      "id": "02-065",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 200, 110 110, 20 20, 200 20, 110 110, 20 200, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              110,
              110
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              20,
              200
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.15-5-3: a point on a closed non-simple LineString's interior at a vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.Vx}]",
      "id": "02-066",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 200, 110 110, 200 20, 20 20, 110 110, 20 200, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              110,
              110
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ],
            [
              20,
              200
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.16-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}]",
      "id": "02-067",
      "a": {
        "wkt": "POINT (90 130)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            90,
            130
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 130, 20 130, 20 200, 90 130, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              130
            ],
            [
              20,
              130
            ],
            [
              20,
              200
            ],
            [
              90,
              130
            ],
            [
              110,
              110
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ],
            [
              200,
              200
            ],
            [
              90,
              130
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.16-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}]",
      "id": "02-068",
      "a": {
        "wkt": "POINT (90 130)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            90,
            130
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 130, 20 130, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              130
            ],
            [
              20,
              130
            ],
            [
              20,
              200
            ],
            [
              110,
              110
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ],
            [
              200,
              200
            ],
            [
              90,
              130
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.17-5-1: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}]",
      "id": "02-069",
      "a": {
        "wkt": "POINT (90 130)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            90,
            130
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 130, 90 200, 20 200, 90 130, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              130
            ],
            [
              90,
              200
            ],
            [
              20,
              200
            ],
            [
              90,
              130
            ],
            [
              110,
              110
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ],
            [
              200,
              200
            ],
            [
              90,
              130
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.17-5-2: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}]",
      "id": "02-070",
      "a": {
        "wkt": "POINT (90 130)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            90,
            130
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 130, 90 200, 20 200, 200 20, 20 20, 200 200, 90 130)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              130
            ],
            [
              90,
              200
            ],
            [
              20,
              200
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              200,
              200
            ],
            [
              90,
              130
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.17-5-3: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}]",
      "id": "02-071",
      "a": {
        "wkt": "POINT (90 130)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            90,
            130
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 130, 90 200, 20 200, 110 110, 200 20, 20 20, 110 110, 200 200, 90 130)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              130
            ],
            [
              90,
              200
            ],
            [
              20,
              200
            ],
            [
              110,
              110
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ],
            [
              200,
              200
            ],
            [
              90,
              130
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.17-5-4: a point on a closed non-simple LineString's closing point with crossing line segments [dim(0){A.P.Int = B.nsL.Int.CPx}]",
      "id": "02-072",
      "a": {
        "wkt": "POINT (90 130)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            90,
            130
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 130, 90 200, 20 200, 200 20, 20 20, 200 200, 90 130)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              130
            ],
            [
              90,
              200
            ],
            [
              20,
              200
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              200,
              200
            ],
            [
              90,
              130
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.17-5-5: a point on a closed non-simple LineString's interior at a non-vertex with crossing line segments [dim(0){A.P.Int = B.nsL.Int.NVx}]",
      "id": "02-073",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 130, 90 200, 20 200, 200 20, 20 20, 200 200, 90 130)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              130
            ],
            [
              90,
              200
            ],
            [
              20,
              200
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              200,
              200
            ],
            [
              90,
              130
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.18-5-1: a point on a non-simple LineString's start point with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Bdy.SPb)}]",
      "id": "02-074",
      "a": {
        "wkt": "POINT (110 200)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            200
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              200
            ],
            [
              110,
              110
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              110,
              200
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.18-5-2: a point on a non-simple LineString's interior at a non-vertex with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.NVo}]",
      "id": "02-075",
      "a": {
        "wkt": "POINT (110 150)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            150
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              200
            ],
            [
              110,
              110
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              110,
              200
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.18-5-3: a point on a non-simple LineString's interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}]",
      "id": "02-076",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              200
            ],
            [
              110,
              110
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              110,
              200
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.19-5-1: a point on a non-simple LineString's closing point with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.CPo}]",
      "id": "02-077",
      "a": {
        "wkt": "POINT (110 200)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            200
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 200, 110 110, 20 20, 200 20, 110 110, 110 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              200
            ],
            [
              110,
              110
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              110,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.19-5-2: a point on a non-simple LineString's interior at a non-vertex overlapping line segments [dim(0){A.P.Int = B.nsL.Int.NVo}]",
      "id": "02-078",
      "a": {
        "wkt": "POINT (110 150)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            150
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 200, 110 110, 20 20, 200 20, 110 110, 110 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              200
            ],
            [
              110,
              110
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              110,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.19-5-3: a point on a non-simple LineString interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}]",
      "id": "02-079",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 200, 110 110, 20 20, 200 20, 110 110, 110 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              200
            ],
            [
              110,
              110
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              110,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.20-5-1: a point on a non-simple LineString's interior at a non-vertex with overlapping line segments [dim(0){A.P.Int = B.nsL.Int.NVo}]",
      "id": "02-080",
      "a": {
        "wkt": "POINT (110 150)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            150
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 200, 110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              110,
              200
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsL.20-5-2: a point on a non-simple LineString's interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}]",
      "id": "02-081",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 200, 110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              110,
              200
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "P/nsl.20-5-3: a point on a non-simple LineString's interior at a vertex with both crossing and overlapping line segments [dim(0){A.P.Int = B.nsL.Int.Vb}]",
      "id": "02-082",
      "a": {
        "wkt": "POINT (110 200)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            200
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 200, 110 200, 110 110, 20 20, 200 20, 110 110, 110 200, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              110,
              200
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "mP/L-2-1: MultiPoint and a line disjoint (points on one side of the line) [dim(0){A.3P.Int = B.L.Ext}]",
      "id": "02-083",
      "a": {
        "wkt": "MULTIPOINT (50 250, 90 220, 130 190)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              50,
              250
            ],
            [
              90,
              220
            ],
            [
              130,
              190
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "mP/L-2-2: MultiPoint and a line disjoint (points over the line but no intersection) [dim(0){A.3P.Int = B.L.Ext}]",
      "id": "02-084",
      "a": {
        "wkt": "MULTIPOINT (180 180, 230 130, 280 80)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              180,
              180
            ],
            [
              230,
              130
            ],
            [
              280,
              80
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "mP/L-3-1: one of the points intersecting the start point of a line [dim(0){A.3P2.Int = B.L.Bdy.SP}]",
      "id": "02-085",
      "a": {
        "wkt": "MULTIPOINT (50 120, 90 80, 130 40)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              50,
              120
            ],
            [
              90,
              80
            ],
            [
              130,
              40
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F00FFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "mP/L-3-2: one of the points intersecting the end point of a line [dim(0){A.3P2 = B.L.Bdy.EP}]",
      "id": "02-086",
      "a": {
        "wkt": "MULTIPOINT (300 280, 340 240, 380 200)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              300,
              280
            ],
            [
              340,
              240
            ],
            [
              380,
              200
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F00FFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "mP/L-4-1: one of the points intersecting the interior of a line at a non-vertex (points on one side of the line) [dim(0){A.3P1.Int = B.L.Int.NV]",
      "id": "02-087",
      "a": {
        "wkt": "MULTIPOINT (230 150, 260 120, 290 90)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              230,
              150
            ],
            [
              260,
              120
            ],
            [
              290,
              90
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F0FFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "mP/L-4-2: one of the points intersecting the interior of a line at a non-vertex (points over the line) [dim(0){A.3P2.Int = B.L.Int.NV]",
      "id": "02-088",
      "a": {
        "wkt": "MULTIPOINT (200 190, 240 150, 270 110)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              200,
              190
            ],
            [
              240,
              150
            ],
            [
              270,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F0FFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "mP/L-4-3: one of the points intersecting the interior of a line at a vertex (points on one side of the line) [dim(0){A.3P1.Int = B.L.Int.V]",
      "id": "02-089",
      "a": {
        "wkt": "MULTIPOINT (160 150, 190 120, 220 90)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              160,
              150
            ],
            [
              190,
              120
            ],
            [
              220,
              90
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F0FFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "mP/L-4-4: one of the points intersecting the interior of a line at a vertex (points over the line) [dim(0){A.3P2.Int = B.L.Int.V]",
      "id": "02-090",
      "a": {
        "wkt": "MULTIPOINT (120 190, 160 150, 200 110)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              120,
              190
            ],
            [
              160,
              150
            ],
            [
              200,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F0FFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "mP/L-5-1: all the points on a line [dim(0){A.3P1.Int = B.L.Bdy.SP}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Bdy.EP}]",
      "id": "02-091",
      "a": {
        "wkt": "MULTIPOINT (90 80, 160 150, 340 240)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "00FFFF1F2"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "mP/L-5-2: all the points on a line [dim(0){A.3P1.Int = B.L.Bdy.SP}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Int.V}]",
      "id": "02-092",
      "a": {
        "wkt": "MULTIPOINT (90 80, 160 150, 300 150)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "00FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "mP/L-5-3: all the points on a line [dim(0){A.3P1.Int = B.L.Bdy.SP}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Int.NV}]",
      "id": "02-093",
      "a": {
        "wkt": "MULTIPOINT (90 80, 160 150, 240 150)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              240,
              150
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "00FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "mP/L-5-4: all the points on a line [dim(0){A.3P1.Int = B.L.Bdy.SP}, dim(0){A.3P2.Int = B.L.Int.NV}, dim(0){A.3P3.Int = B.Int.NV}]",
      "id": "02-094",
      "a": {
        "wkt": "MULTIPOINT (90 80, 130 120, 210 150)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              90,
              80
            ],
            [
              130,
              120
            ],
            [
              210,
              150
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "00FFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "mP/L-5-5: all the points on a line [dim(0){A.3P1.Int = B.L.Int.NV}, dim(0){A.3P2.Int = B.L.Int.NV}, dim(0){A.3P3.Int = B.Int.NV}]",
      "id": "02-095",
      "a": {
        "wkt": "MULTIPOINT (130 120, 210 150, 340 200)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              130,
              120
            ],
            [
              210,
              150
            ],
            [
              340,
              200
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "mP/L-5-6: all the points on a line [dim(0){A.3P1.Int = B.L.Int.V}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Int.NV}]",
      "id": "02-096",
      "a": {
        "wkt": "MULTIPOINT (160 150, 240 150, 340 210)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              160,
              150
            ],
            [
              240,
              150
            ],
            [
              340,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "mP/L-5-7: all the points on a line [dim(0){A.3P1.Int = B.L.Int.V}, dim(0){A.3P2.Int = B.L.Int.V}, dim(0){A.3P3.Int = B.Int.V}]",
      "id": "02-097",
      "a": {
        "wkt": "MULTIPOINT (160 150, 300 150, 340 150)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF102"
      }
    },
    {
      "group": "TestRelatePL",
      "category": "relate",
      "title": "mP/L-5-8: all the points on a line [dim(0){A.3P1.Int = B.L.Int.V}, dim(0){A.3P2.Int = B.L.Int.NV}, dim(0){A.3P3.Int = B.Bdy.EP}]",
      "id": "02-098",
      "a": {
        "wkt": "MULTIPOINT (160 150, 240 150, 340 240)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              160,
              150
            ],
            [
              240,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (90 80, 160 150, 300 150, 340 150, 340 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              80
            ],
            [
              160,
              150
            ],
            [
              300,
              150
            ],
            [
              340,
              150
            ],
            [
              340,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "00FFFF102"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/A-2-1: a point outside a polygon [dim(0){A.P.Int = B.A.Ext}]",
      "id": "03-001",
      "a": {
        "wkt": "POINT (20 20)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            20,
            20
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/A-2-2: a point outside a converx polygon [dim(0){A.P.Int = B.A.Ext}]",
      "id": "03-002",
      "a": {
        "wkt": "POINT (70 170)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            70,
            170
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 230, 80 160, 20 160, 20 20, 200 20, 200 160, 140 160, 110 230))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                230
              ],
              [
                80,
                160
              ],
              [
                20,
                160
              ],
              [
                20,
                20
              ],
              [
                200,
                20
              ],
              [
                200,
                160
              ],
              [
                140,
                160
              ],
              [
                110,
                230
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/A-2-3: a point outside a concave polygon [dim(0){A.P.Int = B.A.Ext}]",
      "id": "03-003",
      "a": {
        "wkt": "POINT (110 130)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            130
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 160, 80 160, 110 100, 140 160, 200 160, 200 20, 20 20, 20 160))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                160
              ],
              [
                80,
                160
              ],
              [
                110,
                100
              ],
              [
                140,
                160
              ],
              [
                200,
                160
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                160
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/A-2-4: dim(0){A.P.Int = B.A.Ext}",
      "id": "03-004",
      "a": {
        "wkt": "POINT (100 70)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            100,
            70
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 150, 100 150, 40 50, 170 50, 110 150, 190 150, 190 20, 20 20, 20 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                150
              ],
              [
                100,
                150
              ],
              [
                40,
                50
              ],
              [
                170,
                50
              ],
              [
                110,
                150
              ],
              [
                190,
                150
              ],
              [
                190,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/A-2-5: a point outside a concave polygon [dim(0){A.P.Int = B.A.Ext}]",
      "id": "03-005",
      "a": {
        "wkt": "POINT (100 70)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            100,
            70
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 150, 100 150, 40 50, 160 50, 100 150, 180 150, 180 20, 20 20, 20 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                150
              ],
              [
                100,
                150
              ],
              [
                40,
                50
              ],
              [
                160,
                50
              ],
              [
                100,
                150
              ],
              [
                180,
                150
              ],
              [
                180,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/A-3-1: a point on the closing point of a polygon [dim(0){A.P.Int = B.A.Bdy.CP}]",
      "id": "03-006",
      "a": {
        "wkt": "POINT (60 120)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            60,
            120
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/A-3-2: a point on the boudary of a polygon at a non-vertex [dim(0){A.P.Int = B.A.Bdy.NV}]",
      "id": "03-007",
      "a": {
        "wkt": "POINT (110 120)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            120
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/A-3-3: a point on the boundary of a polygon at a vertex [dim(0){A.P.Int = B.A.Bdy.V]",
      "id": "03-008",
      "a": {
        "wkt": "POINT (160 120)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            160,
            120
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/A-3-4: a point on the touching point of boudary [dim(0){A.P.Int = B.A.Bdy.TP}]",
      "id": "03-009",
      "a": {
        "wkt": "POINT (100 150)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            100,
            150
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 150, 100 150, 40 50, 160 50, 100 150, 180 150, 180 20, 20 20, 20 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                150
              ],
              [
                100,
                150
              ],
              [
                40,
                50
              ],
              [
                160,
                50
              ],
              [
                100,
                150
              ],
              [
                180,
                150
              ],
              [
                180,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/A-5: a point on the interior of a polygon [dim(0){A.P.Int = B.A.Int}]",
      "id": "03-010",
      "a": {
        "wkt": "POINT (100 80)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            100,
            80
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/Ah-2-1: a point outside of polygon with a hole [dim(0){A.P.Int = B.A.Ext}]",
      "id": "03-011",
      "a": {
        "wkt": "POINT (60 160)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            60,
            160
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 360 20, 20 20, 190 190),(280 50, 100 50, 190 140, 280 50))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                360,
                20
              ],
              [
                20,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                280,
                50
              ],
              [
                100,
                50
              ],
              [
                190,
                140
              ],
              [
                280,
                50
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/Ah-2-2: a point inside the hole of the polygon [dim(0){A.P.Int = B.A.Ext.h}]",
      "id": "03-012",
      "a": {
        "wkt": "POINT (190 90)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            190,
            90
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 360 20, 20 20, 190 190),(280 50, 100 50, 190 140, 280 50))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                360,
                20
              ],
              [
                20,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                280,
                50
              ],
              [
                100,
                50
              ],
              [
                190,
                140
              ],
              [
                280,
                50
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/Ah-3-1: a point on the closing point of the outer boundary of a polygon with a hole [dim(0){A.P.Int = B.A.oBdy.CP}]",
      "id": "03-013",
      "a": {
        "wkt": "POINT (190 190)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            190,
            190
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 360 20, 20 20, 190 190),(280 50, 100 50, 190 140, 280 50))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                360,
                20
              ],
              [
                20,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                280,
                50
              ],
              [
                100,
                50
              ],
              [
                190,
                140
              ],
              [
                280,
                50
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/Ah-3-2: a point on the outer boundary of a polygon at a vertex [dim(0){A.P.Int = B.A.oBdy.V}]",
      "id": "03-014",
      "a": {
        "wkt": "POINT (360 20)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            360,
            20
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 360 20, 20 20, 190 190),(280 50, 100 50, 190 140, 280 50))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                360,
                20
              ],
              [
                20,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                280,
                50
              ],
              [
                100,
                50
              ],
              [
                190,
                140
              ],
              [
                280,
                50
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/Ah-3-3: a point on the outer boundary of a polygon at a non-vertex [dim(0){A.P.Int = B.A.oBdy.NV}]",
      "id": "03-015",
      "a": {
        "wkt": "POINT (130 130)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            130,
            130
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 360 20, 20 20, 190 190),(280 50, 100 50, 190 140, 280 50))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                360,
                20
              ],
              [
                20,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                280,
                50
              ],
              [
                100,
                50
              ],
              [
                190,
                140
              ],
              [
                280,
                50
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/Ah-3-4: a point on the closing point of the inner boundary of a polygon [dim(0){A.P.Int = B.A.iBdy.CP}]",
      "id": "03-016",
      "a": {
        "wkt": "POINT (280 50)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            280,
            50
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 360 20, 20 20, 190 190),(280 50, 100 50, 190 140, 280 50))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                360,
                20
              ],
              [
                20,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                280,
                50
              ],
              [
                100,
                50
              ],
              [
                190,
                140
              ],
              [
                280,
                50
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/Ah-3-5: a point on the inner boundary of a polygon at a non-vertex [dim(0){A.P.Int = B.A.iBdy.NV}]",
      "id": "03-017",
      "a": {
        "wkt": "POINT (150 100)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            150,
            100
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 360 20, 20 20, 190 190),(280 50, 100 50, 190 140, 280 50))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                360,
                20
              ],
              [
                20,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                280,
                50
              ],
              [
                100,
                50
              ],
              [
                190,
                140
              ],
              [
                280,
                50
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/Ah-3-6: a point on the inner boundary of a polygon at a vertex [dim(0){A.P.Int = B.A.iBdy.V}]",
      "id": "03-018",
      "a": {
        "wkt": "POINT (100 50)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            100,
            50
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 360 20, 20 20, 190 190),(280 50, 100 50, 190 140, 280 50))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                360,
                20
              ],
              [
                20,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                280,
                50
              ],
              [
                100,
                50
              ],
              [
                190,
                140
              ],
              [
                280,
                50
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/Ah-5: a point inside the interior of a polygon with a hole [dim(0){A.P.Int = B.A.Int}]",
      "id": "03-019",
      "a": {
        "wkt": "POINT (140 120)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            140,
            120
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 360 20, 20 20, 190 190),(280 50, 100 50, 190 140, 280 50))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                360,
                20
              ],
              [
                20,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                280,
                50
              ],
              [
                100,
                50
              ],
              [
                190,
                140
              ],
              [
                280,
                50
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/A2h-3-1: a point on the touching point of two holes in a polygon [dim(0){A.P.Int = B.A.iBdy.TP}]",
      "id": "03-020",
      "a": {
        "wkt": "POINT (190 50)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            190,
            50
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 360 20, 20 20, 190 190),(90 50, 150 110, 190 50, 90 50),(190 50, 230 110, 290 50, 190 50))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                360,
                20
              ],
              [
                20,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                90,
                50
              ],
              [
                150,
                110
              ],
              [
                190,
                50
              ],
              [
                90,
                50
              ]
            ],
            [
              [
                190,
                50
              ],
              [
                230,
                110
              ],
              [
                290,
                50
              ],
              [
                190,
                50
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/A2h-3-2: a point on the touching point of two holes in a polygon [dim(0){A.P.Int = B.A.iBdy.TP}]",
      "id": "03-021",
      "a": {
        "wkt": "POINT (180 90)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            180,
            90
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 360 20, 20 20, 190 190),(180 140, 180 40, 80 40, 180 140),(180 90, 210 140, 310 40, 230 40, 180 90))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                360,
                20
              ],
              [
                20,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                180,
                140
              ],
              [
                180,
                40
              ],
              [
                80,
                40
              ],
              [
                180,
                140
              ]
            ],
            [
              [
                180,
                90
              ],
              [
                210,
                140
              ],
              [
                310,
                40
              ],
              [
                230,
                40
              ],
              [
                180,
                90
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "mP/A-2: 3 points outside a polygon [dim(0){A.2P.Int = B.A.Ext}]",
      "id": "03-022",
      "a": {
        "wkt": "MULTIPOINT (20 80, 110 160, 20 160)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              20,
              80
            ],
            [
              110,
              160
            ],
            [
              20,
              160
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "mP/A-3-1: one of 3 points on the closing point of the boundary of a polygon [dim(0){A.3P1.Int = B.A.Bdy.CP}]",
      "id": "03-023",
      "a": {
        "wkt": "MULTIPOINT (20 80, 60 120, 20 160)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              20,
              80
            ],
            [
              60,
              120
            ],
            [
              20,
              160
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F00FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "mP/A-3-2: one of 3 points on the boundary of a polygon at a non-vertex [dim(0){A.3P3 = B.A.Bdy.NV}]",
      "id": "03-024",
      "a": {
        "wkt": "MULTIPOINT (10 80, 110 170, 110 120)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              10,
              80
            ],
            [
              110,
              170
            ],
            [
              110,
              120
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F00FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "mP/A-3-3: one of 3 points on the boundary of a polygon at a vertex [dim(0){A.3P1.Int = B.A.Bdy.V}]",
      "id": "03-025",
      "a": {
        "wkt": "MULTIPOINT (10 80, 110 170, 160 120)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              10,
              80
            ],
            [
              110,
              170
            ],
            [
              160,
              120
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F00FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "mP/A-3-4: 3 of the 5 points on the boundary of a polygon [dim(0){A.5P2.Int = B.A.Bdy.CP}, dim(0){A.5P3.Int = B.A.Bdy.NV}, dim(0){A.5P4.Int = B.A.Bdy.V}]",
      "id": "03-026",
      "a": {
        "wkt": "MULTIPOINT (20 120, 60 120, 110 120, 160 120, 200 120)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              20,
              120
            ],
            [
              60,
              120
            ],
            [
              110,
              120
            ],
            [
              160,
              120
            ],
            [
              200,
              120
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F00FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "mP/A-3-5: all 3 points on the boundary of a polygon [dim(0){A.3P1.Int = B.A.Bdy.CP}, dim(0){A.3P2.Int = B.A.Bdy.NV}, dim(0){A.3P3.Int = B.A.Bdy.V}]",
      "id": "03-027",
      "a": {
        "wkt": "MULTIPOINT (60 120, 110 120, 160 120)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              60,
              120
            ],
            [
              110,
              120
            ],
            [
              160,
              120
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "mP/A-3-6: all 4 points on the boundary of a polygon [dim(0){A.4P = B.A.Bdy}]",
      "id": "03-028",
      "a": {
        "wkt": "MULTIPOINT (60 120, 160 120, 160 40, 60 40)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              60,
              120
            ],
            [
              160,
              120
            ],
            [
              160,
              40
            ],
            [
              60,
              40
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "mP/A-4-1: 1 point outside a polygon, 1 point on the boundary and 1 point inside [dim(0){A.3P1.Int = B.A.Ext}, dim(0){A.3P2.Int = B.A.Bdy.CP}, dim(0){A.3P3.Int = B.A.Int}]",
      "id": "03-029",
      "a": {
        "wkt": "MULTIPOINT (20 150, 60 120, 110 80)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              20,
              150
            ],
            [
              60,
              120
            ],
            [
              110,
              80
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "000FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "mP/A-4-2: 1 point outside a polygon, 1 point on the boundary and 1 point inside [dim(0){A.3P1.Int = B.A.Ext}, dim(0){A.3P2.Int = B.A.Bdy.V}, dim(0){A.3P3.Int = B.A.Int}]",
      "id": "03-030",
      "a": {
        "wkt": "MULTIPOINT (110 80, 160 120, 200 160)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              110,
              80
            ],
            [
              160,
              120
            ],
            [
              200,
              160
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "000FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "mP/A-4-3: 1 point outside a polygon, 1 point on the boundary and 1 point inside [dim(0){A.3P1.Int = B.A.Ext}, dim(0){A.3P2.Int = B.A.Bdy.NV}, dim(0){A.3P3.Int = B.A.Int}]",
      "id": "03-031",
      "a": {
        "wkt": "MULTIPOINT (110 80, 110 120, 110 160)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              110,
              80
            ],
            [
              110,
              120
            ],
            [
              110,
              160
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "000FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "mP/A-4-4: 1 point outside a polygon, 1 point inside [dim(0){A.2P1.Int = B.A.Ext}, dim(0){A.2P2.Int = B.A.Int}]",
      "id": "03-032",
      "a": {
        "wkt": "MULTIPOINT (110 170, 110 80)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              110,
              170
            ],
            [
              110,
              80
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F0FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "mP/A-4-5: 1 point outside a polygon, 2 points on the boundary and 1 point inside [dim(0){A.4P1.Int = B.A.Ext}, dim(0){A.4P2.Int = B.A.Bdy.CP}, dim(0){A.4P3.Int = B.A.Bdy.V}, dim(0){A.4P4.Int = B.A.Int}]",
      "id": "03-033",
      "a": {
        "wkt": "MULTIPOINT (60 120, 160 120, 110 80, 110 170)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              60,
              120
            ],
            [
              160,
              120
            ],
            [
              110,
              80
            ],
            [
              110,
              170
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "000FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "mP/A-5-1: 2 points within a polygon [dim(0){A.2P.Int = B.A.Int]",
      "id": "03-034",
      "a": {
        "wkt": "MULTIPOINT (90 80, 130 80)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              90,
              80
            ],
            [
              130,
              80
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "mP/A-5-2: 1 point on the boundary and 1 point inside a polygon [dim(0){A.2P1.Int = B.A.Bdy.CP}, dim(0){A.2P2.Int = B.A.Int}]",
      "id": "03-035",
      "a": {
        "wkt": "MULTIPOINT (60 120, 160 120, 110 80)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              60,
              120
            ],
            [
              160,
              120
            ],
            [
              110,
              80
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 120, 60 40, 160 40, 160 120, 60 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                120
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                160,
                120
              ],
              [
                60,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "00FFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "mP/Ah-2-1: 3 points outside a polygon [dim(0){A.3P.Int = B.Ah.Ext}]",
      "id": "03-036",
      "a": {
        "wkt": "MULTIPOINT (40 170, 40 90, 130 170)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              40,
              170
            ],
            [
              40,
              90
            ],
            [
              130,
              170
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 360 20, 20 20, 190 190),(280 50, 100 50, 190 140, 280 50))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                360,
                20
              ],
              [
                20,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                280,
                50
              ],
              [
                100,
                50
              ],
              [
                190,
                140
              ],
              [
                280,
                50
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "mP/Ah-2-2: 2 points outside a polygon and 1 point inside the hole of the polygon [dim(0){A.3P1.Int = B.Ah.Ext}, dim(0){A.3P2.Int = B.Ah.Ext}, dim(0){A.3P3.Int = B.Ah.Ext.h}]",
      "id": "03-037",
      "a": {
        "wkt": "MULTIPOINT (90 170, 280 170, 190 90)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              90,
              170
            ],
            [
              280,
              170
            ],
            [
              190,
              90
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 360 20, 20 20, 190 190),(280 50, 100 50, 190 140, 280 50))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                360,
                20
              ],
              [
                20,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                280,
                50
              ],
              [
                100,
                50
              ],
              [
                190,
                140
              ],
              [
                280,
                50
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "mP/Ah-2-3: all 3 points in polygon's hole [dim(0){A.3P.Int = B.Ah.Ext.h}]",
      "id": "03-038",
      "a": {
        "wkt": "MULTIPOINT (190 110, 150 70, 230 70)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              190,
              110
            ],
            [
              150,
              70
            ],
            [
              230,
              70
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 360 20, 20 20, 190 190),(280 50, 100 50, 190 140, 280 50))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                360,
                20
              ],
              [
                20,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                280,
                50
              ],
              [
                100,
                50
              ],
              [
                190,
                140
              ],
              [
                280,
                50
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/mA-3-1: a point on the touching point of two polygons [dim(0){A.P.Int = B.2A.Bdy}]",
      "id": "03-039",
      "a": {
        "wkt": "POINT (100 100)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            100,
            100
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((20 100, 20 20, 100 20, 100 100, 20 100)),((100 180, 100 100, 180 100, 180 180, 100 180)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  20,
                  100
                ],
                [
                  20,
                  20
                ],
                [
                  100,
                  20
                ],
                [
                  100,
                  100
                ],
                [
                  20,
                  100
                ]
              ]
            ],
            [
              [
                [
                  100,
                  180
                ],
                [
                  100,
                  100
                ],
                [
                  180,
                  100
                ],
                [
                  180,
                  180
                ],
                [
                  100,
                  180
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/mA-3-2: a point on the boundary of one of the 2 polygons [dim(0){A.P.Int = B.2A1.Bdy.CP}]",
      "id": "03-040",
      "a": {
        "wkt": "POINT (20 100)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            20,
            100
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((20 100, 20 20, 100 20, 100 100, 20 100)),((100 180, 100 100, 180 100, 180 180, 100 180)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  20,
                  100
                ],
                [
                  20,
                  20
                ],
                [
                  100,
                  20
                ],
                [
                  100,
                  100
                ],
                [
                  20,
                  100
                ]
              ]
            ],
            [
              [
                [
                  100,
                  180
                ],
                [
                  100,
                  100
                ],
                [
                  180,
                  100
                ],
                [
                  180,
                  180
                ],
                [
                  100,
                  180
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/mA-3-3: a point on the boundary of one of the 2 polygons [dim(0){A.P.Int = B.2A1.Bdy.V}]",
      "id": "03-041",
      "a": {
        "wkt": "POINT (60 100)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            60,
            100
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((20 100, 20 20, 100 20, 100 100, 20 100)),((100 180, 100 100, 180 100, 180 180, 100 180)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  20,
                  100
                ],
                [
                  20,
                  20
                ],
                [
                  100,
                  20
                ],
                [
                  100,
                  100
                ],
                [
                  20,
                  100
                ]
              ]
            ],
            [
              [
                [
                  100,
                  180
                ],
                [
                  100,
                  100
                ],
                [
                  180,
                  100
                ],
                [
                  180,
                  180
                ],
                [
                  100,
                  180
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF212"
      }
    },
    {
      "group": "TestRelatePA",
      "category": "relate",
      "title": "P/mA-3-4: a point touching a polygon's boundary where the boundaries touch at a point [dim(0){A.P.Int = B.2A.Bdy.TP}]",
      "id": "03-042",
      "a": {
        "wkt": "POINT (110 110)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            110,
            110
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((110 110, 20 200, 200 200, 110 110),(110 110, 80 180, 140 180, 110 110)),((110 110, 20 20, 200 20, 110 110),(110 110, 80 40, 140 40, 110 110)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  110,
                  110
                ],
                [
                  20,
                  200
                ],
                [
                  200,
                  200
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  80,
                  180
                ],
                [
                  140,
                  180
                ],
                [
                  110,
                  110
                ]
              ]
            ],
            [
              [
                [
                  110,
                  110
                ],
                [
                  20,
                  20
                ],
                [
                  200,
                  20
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  80,
                  40
                ],
                [
                  140,
                  40
                ],
                [
                  110,
                  110
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F0FFFF212"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.1-3-1: touching at the start points of two lines [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}]",
      "id": "04-001",
      "a": {
        "wkt": "LINESTRING (40 40, 120 120)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              120,
              120
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (40 40, 60 120)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              60,
              120
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.1-3-2: start point of one line touching end point of another line [dim(0){A.L.Bdy.SP = B.L.Bdy.EP}]",
      "id": "04-002",
      "a": {
        "wkt": "LINESTRING (40 40, 120 120)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              120,
              120
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 240, 40 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              240
            ],
            [
              40,
              40
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.1-3-3: start point of a line touching the interior of another line at a non-vertex [dim(0){A.L.Bdy.SP = B.L.Int.NV}]",
      "id": "04-003",
      "a": {
        "wkt": "LINESTRING (40 40, 180 180)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              180,
              180
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (120 120, 20 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              120,
              120
            ],
            [
              20,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.1-3-4: touching at the end points of two lines [dim(0){A.L.Bdy.EP = B.L.Bdy.EP}]",
      "id": "04-004",
      "a": {
        "wkt": "LINESTRING (40 40, 120 120)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              120,
              120
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 240, 120 120)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              240
            ],
            [
              120,
              120
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.1-3-5: end point of a line touching the interior of another line at a non-vertex [dim(0){A.L.Bdy.EP = B.L.Int.NV}]",
      "id": "04-005",
      "a": {
        "wkt": "LINESTRING (40 40, 180 180)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              180,
              180
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 180, 140 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              180
            ],
            [
              140,
              140
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.1-4-1: two lines crossing at non-vertex [dim(0){A.L.Int.NV = B.L.Int.NV}]",
      "id": "04-006",
      "a": {
        "wkt": "LINESTRING (40 40, 120 120)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              120,
              120
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (40 120, 120 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              120
            ],
            [
              120,
              40
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.1-1-1: equal pointwise [dim(1){A.L.Int.SP-EP = B.L.Int.SP-EP}]",
      "id": "04-007",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (40 40, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "1FFF0FFF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.1-1-2: equal lines but points in reverse sequence [dim(1){A.L.Int.SP-EP = B.L.Int.EP-SP}]",
      "id": "04-008",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (100 100, 40 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              40,
              40
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "1FFF0FFF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.1-2-1: dim(1){A.L.Int.SP-EP = B.L.Ext}",
      "id": "04-009",
      "a": {
        "wkt": "LINESTRING (40 40, 120 120)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              120,
              120
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (40 120, 120 160)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              120
            ],
            [
              120,
              160
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.1-5-1: line A containing line B [dim(1){A.L.Int.SP-EP = B.L.Int.SP-EP}]",
      "id": "04-010",
      "a": {
        "wkt": "LINESTRING (20 20, 180 180)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              180,
              180
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 20, 180 180)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              180,
              180
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "1FFF0FFF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.1-5-2: line B is part of line A [dim(1){A.L.Int.SP-NV) = B.L.Int.SP-EP}]",
      "id": "04-011",
      "a": {
        "wkt": "LINESTRING (20 20, 180 180)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              180,
              180
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "101F00FF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.1-5-3: Line B is part of line A (in the middle portion) [dim(1){A.L.Int.NV-NV = B.L.Int.SP-EP}]",
      "id": "04-012",
      "a": {
        "wkt": "LINESTRING (20 20, 180 180)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              180,
              180
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (50 50, 140 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              50,
              50
            ],
            [
              140,
              140
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "101FF0FF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.1-6-1: start portions of two lines overlapping [dim(1){A.L.Int.SP-NV = B.L.Int.SP-NV]",
      "id": "04-013",
      "a": {
        "wkt": "LINESTRING (180 180, 40 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              180,
              180
            ],
            [
              40,
              40
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (120 120, 260 260)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              120,
              120
            ],
            [
              260,
              260
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1010F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.1-6-2: end portions of two lines overlapping [dim(1){A.L.Int.NV-EP = B.L.Int.NV-EP]",
      "id": "04-014",
      "a": {
        "wkt": "LINESTRING (40 40, 180 180)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              180,
              180
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (260 260, 120 120)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              260,
              260
            ],
            [
              120,
              120
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1010F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.1-6-3: end portion of line A overlapping the start portion of line B [dim(1){A.L.Int.NV-EP = B.L.Int.SP-NV]",
      "id": "04-015",
      "a": {
        "wkt": "LINESTRING (40 40, 180 180)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              180,
              180
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (120 120, 260 260)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              120,
              120
            ],
            [
              260,
              260
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1010F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-3-1: two LineStrings touching at start points [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}]",
      "id": "04-016",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (40 40, 20 100, 40 160, 20 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              20,
              100
            ],
            [
              40,
              160
            ],
            [
              20,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-3-2: start point of LineStrings A touching the end point of LineString B [dim(0){A.L.Bdy.SP = B.L.Bdy.EP}]",
      "id": "04-017",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 200, 40 160, 20 100, 40 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              200
            ],
            [
              40,
              160
            ],
            [
              20,
              100
            ],
            [
              40,
              40
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-3-3: two LineStrings touching at end points [dim(0){A.L.Bdy.EP = B.L.Bdy.EP}]",
      "id": "04-018",
      "a": {
        "wkt": "LINESTRING (80 240, 200 120, 100 100, 40 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              240
            ],
            [
              200,
              120
            ],
            [
              100,
              100
            ],
            [
              40,
              40
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 200, 40 160, 20 100, 40 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              200
            ],
            [
              40,
              160
            ],
            [
              20,
              100
            ],
            [
              40,
              40
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-3-4: both the start and end points of LineString A touching the interior of LineString B at two vertices [dim(0){A.L.Bdy.SP = B.L.Int.V}, dim(0){A.L.Bdy.EP = B.L.Int.V}]",
      "id": "04-019",
      "a": {
        "wkt": "LINESTRING (60 60, 60 230, 140 230, 250 160)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              60
            ],
            [
              60,
              230
            ],
            [
              140,
              230
            ],
            [
              250,
              160
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 20, 60 60, 250 160, 310 230)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              60,
              60
            ],
            [
              250,
              160
            ],
            [
              310,
              230
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF10FF102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-3-5: both the start and end points of LineString A touching the interior of LineString B at two non-vertices [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Bdy.EP = B.L.Int.NV}]",
      "id": "04-020",
      "a": {
        "wkt": "LINESTRING (60 60, 60 230, 140 230, 250 160)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              60
            ],
            [
              60,
              230
            ],
            [
              140,
              230
            ],
            [
              250,
              160
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 20, 110 110, 200 110, 320 230)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              110,
              110
            ],
            [
              200,
              110
            ],
            [
              320,
              230
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF10FF102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-3-6: the start and end points of two LineStrings touching each other [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}, dim(0){A.L.Bdy.EP = B.L.Bdy.EP}]",
      "id": "04-021",
      "a": {
        "wkt": "LINESTRING (60 110, 60 250, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              60,
              250
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F0F1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-3-7: the start and end points of two LineStrings touching each other [dim(0){A.L.Bdy.SP = B.L.Bdy.EP}, dim(0){A.L.Bdy.EP = B.L.Bdy.SP}]",
      "id": "04-022",
      "a": {
        "wkt": "LINESTRING (60 110, 60 250, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              60,
              250
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (360 210, 310 160, 110 160, 60 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              360,
              210
            ],
            [
              310,
              160
            ],
            [
              110,
              160
            ],
            [
              60,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F0F1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-3-8: start point of LineString B touching LineString A at a non-vertex [dim(0){A.L.Int.NV = B.L.Bdy.SP}]",
      "id": "04-023",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (160 160, 240 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              160,
              160
            ],
            [
              240,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-3-9: end point of LineString B touching LineString A at a non-vertex [dim(0){A.L.Int.NV = B.L.Bdy.EP}]",
      "id": "04-024",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (240 240, 160 160)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              240,
              240
            ],
            [
              160,
              160
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-3-10: both the start and end points of LineString B touching the interior of LineString A at two non-vertices [dim(0){A.L.Int.NV = B.L.Bdy.SP}, dim(0){A.L.Int.NV = B.L.Bdy.EP}]",
      "id": "04-025",
      "a": {
        "wkt": "LINESTRING (60 60, 60 230, 140 230, 250 160)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              60
            ],
            [
              60,
              230
            ],
            [
              140,
              230
            ],
            [
              250,
              160
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 150, 110 100, 170 100, 110 230)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              150
            ],
            [
              110,
              100
            ],
            [
              170,
              100
            ],
            [
              110,
              230
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF01F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-3-11: the start point of LineString B touching the interior of LineString A at a non-vertex and the end point of LineString A touching the interior of LineString B at a vertex [dim(0){A.L.Int.NV = B.L.Bdy.SP}, dim(0){A.L.Bdy.EP = B.L.Int.V}]",
      "id": "04-026",
      "a": {
        "wkt": "LINESTRING (60 60, 60 230, 140 230, 250 160)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              60
            ],
            [
              60,
              230
            ],
            [
              140,
              230
            ],
            [
              250,
              160
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F010F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-3-12: start point of LineString B touching LineString A at a vertex [dim(0){A.L.Int.V = B.L.Bdy.SP}]",
      "id": "04-027",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 120, 200 190, 150 240, 200 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              120
            ],
            [
              200,
              190
            ],
            [
              150,
              240
            ],
            [
              200,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-3-13: end point of LineString B touching LineString A at a vertex [dim(0){A.L.Int.V = B.L.Bdy.EP}]",
      "id": "04-028",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 240, 150 240, 200 200, 200 120)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              240
            ],
            [
              150,
              240
            ],
            [
              200,
              200
            ],
            [
              200,
              120
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-3-14: both the start and end points of LineString B touching the interior of LineString A at two vertices [dim(0){A.L.Int.V = B.L.Bdy.SP}, dim(0){A.L.Int.V = B.L.Bdy.EP}]",
      "id": "04-029",
      "a": {
        "wkt": "LINESTRING (60 60, 60 230, 140 230, 250 160)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              60
            ],
            [
              60,
              230
            ],
            [
              140,
              230
            ],
            [
              250,
              160
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 230, 80 140, 120 140, 140 230)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              230
            ],
            [
              80,
              140
            ],
            [
              120,
              140
            ],
            [
              140,
              230
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF01F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-1: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}, dim(0){A.L.Int.V = B.L.Int.V}]",
      "id": "04-030",
      "a": {
        "wkt": "LINESTRING (60 110, 200 110, 250 160, 300 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              200,
              110
            ],
            [
              250,
              160
            ],
            [
              300,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1F00102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-2: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.SP}, dim(0){A.L.Int.V = B.L.Int.V}, dim(0){A.L.Bdy.EP = B.L.Int.EP}]",
      "id": "04-031",
      "a": {
        "wkt": "LINESTRING (60 110, 200 110, 250 160, 300 210, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              200,
              110
            ],
            [
              250,
              160
            ],
            [
              300,
              210
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1F0F1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-3: two LineStrings crossing on one side [dim(0){A.L.Bdy.SP = B.L.Bdy.SP}, dim(0){A.L.Int.V = B.L.Int.V}]",
      "id": "04-032",
      "a": {
        "wkt": "LINESTRING (60 110, 220 110, 250 160, 280 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              220,
              110
            ],
            [
              250,
              160
            ],
            [
              280,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1F00102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-4: two LineStrings crossing on one side [dim(0){A.L.Bdy.SP = B.L.Int.SP}, dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Bdy.EP = B.L.Int.EP}]",
      "id": "04-033",
      "a": {
        "wkt": "LINESTRING (60 110, 150 110, 200 160, 250 110, 360 110, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              150,
              110
            ],
            [
              200,
              160
            ],
            [
              250,
              110
            ],
            [
              360,
              110
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1F0F1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-5: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.V}]",
      "id": "04-034",
      "a": {
        "wkt": "LINESTRING (130 160, 160 110, 220 110, 250 160, 250 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              130,
              160
            ],
            [
              160,
              110
            ],
            [
              220,
              110
            ],
            [
              250,
              160
            ],
            [
              250,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F10F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-6: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.NV = B.L.Int.NV}]",
      "id": "04-035",
      "a": {
        "wkt": "LINESTRING (130 160, 160 110, 190 110, 230 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              130,
              160
            ],
            [
              160,
              110
            ],
            [
              190,
              110
            ],
            [
              230,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F10F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-7: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Bdy.SP = B.L.Bdy.EP}]",
      "id": "04-036",
      "a": {
        "wkt": "LINESTRING (130 160, 160 110, 200 110, 230 160, 260 210, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              130,
              160
            ],
            [
              160,
              110
            ],
            [
              200,
              110
            ],
            [
              230,
              160
            ],
            [
              260,
              210
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F100F102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-8: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Bdy.EP}]",
      "id": "04-037",
      "a": {
        "wkt": "LINESTRING (130 160, 160 110, 200 110, 230 160, 260 210, 360 210, 380 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              130,
              160
            ],
            [
              160,
              110
            ],
            [
              200,
              110
            ],
            [
              230,
              160
            ],
            [
              260,
              210
            ],
            [
              360,
              210
            ],
            [
              380,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0010F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-9: two LineStrings crossing at three points [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Int.NV = B.L.Bdy.EP}]",
      "id": "04-038",
      "a": {
        "wkt": "LINESTRING (130 160, 160 110, 200 110, 230 160, 260 210, 380 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              130,
              160
            ],
            [
              160,
              110
            ],
            [
              200,
              110
            ],
            [
              230,
              160
            ],
            [
              260,
              210
            ],
            [
              380,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0010F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-10: two LineStrings crossing at two points [dim(0){A.L.Bdy.SP = B.L.Int.V}, dim(0){A.L.Int.V = B.L.Int.V}]",
      "id": "04-039",
      "a": {
        "wkt": "LINESTRING (110 160, 160 110, 200 110, 250 160, 250 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              160
            ],
            [
              160,
              110
            ],
            [
              200,
              110
            ],
            [
              250,
              160
            ],
            [
              250,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F10F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-11: two LineStrings crossing on one side [dim(0){A.L.Bdy.SP = B.L.Int.V}, dim(0){A.L.Int.V = B.L.Int.V}]",
      "id": "04-040",
      "a": {
        "wkt": "LINESTRING (110 160, 180 110, 250 160, 320 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              160
            ],
            [
              180,
              110
            ],
            [
              250,
              160
            ],
            [
              320,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F10F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-12: two LineStrings crossing on one side [dim(0){A.L.Bdy.SP = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}]",
      "id": "04-041",
      "a": {
        "wkt": "LINESTRING (140 160, 180 80, 220 160, 250 80)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              140,
              160
            ],
            [
              180,
              80
            ],
            [
              220,
              160
            ],
            [
              250,
              80
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F10F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-13: two LineStrings crossing at a vertex for one of the LineStrings [dim(0){A.L.Int.V = B.L.Int.NV}]",
      "id": "04-042",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 130 190)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              130,
              190
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 130, 70 130, 160 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              130
            ],
            [
              70,
              130
            ],
            [
              160,
              40
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-14: two LineStrings crossing at non-vertices for both of the LineStrings [dim(0){A.L.Int.NV = B.L.Int.NV}]",
      "id": "04-043",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 130 190)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              130,
              190
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (40 160, 40 100, 110 40, 170 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              160
            ],
            [
              40,
              100
            ],
            [
              110,
              40
            ],
            [
              170,
              40
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-15: two LineStrings crossing on one side [dim(0){A.L.Int.V = B.L.Int.NV}, dim(0){A.L.Int.V = B.L.Int.NV}]",
      "id": "04-044",
      "a": {
        "wkt": "LINESTRING (130 110, 180 160, 230 110, 280 160, 330 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              130,
              110
            ],
            [
              180,
              160
            ],
            [
              230,
              110
            ],
            [
              280,
              160
            ],
            [
              330,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-16: two LineStrings crossing at vertices for both LineString [dim(0){A.L.Int.V = B.L.Int.V}]",
      "id": "04-045",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 130 190)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              130,
              190
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (30 140, 80 140, 100 100, 200 30)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              30,
              140
            ],
            [
              80,
              140
            ],
            [
              100,
              100
            ],
            [
              200,
              30
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-17: two LineStrings crossing on one side [dim(0){A.L.Int.V = B.L.Int.V}, dim(0){A.L.Int.V = B.L.Int.V}]",
      "id": "04-046",
      "a": {
        "wkt": "LINESTRING (110 110, 110 160, 180 110, 250 160, 250 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              110,
              160
            ],
            [
              180,
              110
            ],
            [
              250,
              160
            ],
            [
              250,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-18: multiple crossings [dim(0){A.L.Int.V = B.L.Int.V}, dim(0){A.L.Int.NV = B.L.Int.NV}]",
      "id": "04-047",
      "a": {
        "wkt": "LINESTRING (20 20, 80 80, 160 80, 240 80, 300 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              80,
              80
            ],
            [
              160,
              80
            ],
            [
              240,
              80
            ],
            [
              300,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 60, 60 60, 60 140, 80 80, 100 20, 140 140, 180 20, 200 80, 220 20, 240 80, 300 80, 270 110, 200 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              60
            ],
            [
              60,
              60
            ],
            [
              60,
              140
            ],
            [
              80,
              80
            ],
            [
              100,
              20
            ],
            [
              140,
              140
            ],
            [
              180,
              20
            ],
            [
              200,
              80
            ],
            [
              220,
              20
            ],
            [
              240,
              80
            ],
            [
              300,
              80
            ],
            [
              270,
              110
            ],
            [
              200,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-4-19: spiky LineStrings with multiple crossing [dim(0){A.L.Int.V = B.L.Int.V}]",
      "id": "04-048",
      "a": {
        "wkt": "LINESTRING (20 20, 230 20, 20 30, 170 30, 20 40, 230 40, 20 50, 230 60, 60 60, 230 70, 20 70, 180 80, 60 80, 230 90, 20 90, 230 100, 30 100, 210 110, 20 110, 80 120, 20 130, 170 130, 90 120, 230 130, 170 140, 230 140, 80 150, 160 140, 20 140, 70 150, 20 150, 230 160, 80 160, 230 170, 20 160, 180 170, 20 170, 230 180, 20 180, 40 190, 230 190, 20 200, 230 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              230,
              20
            ],
            [
              20,
              30
            ],
            [
              170,
              30
            ],
            [
              20,
              40
            ],
            [
              230,
              40
            ],
            [
              20,
              50
            ],
            [
              230,
              60
            ],
            [
              60,
              60
            ],
            [
              230,
              70
            ],
            [
              20,
              70
            ],
            [
              180,
              80
            ],
            [
              60,
              80
            ],
            [
              230,
              90
            ],
            [
              20,
              90
            ],
            [
              230,
              100
            ],
            [
              30,
              100
            ],
            [
              210,
              110
            ],
            [
              20,
              110
            ],
            [
              80,
              120
            ],
            [
              20,
              130
            ],
            [
              170,
              130
            ],
            [
              90,
              120
            ],
            [
              230,
              130
            ],
            [
              170,
              140
            ],
            [
              230,
              140
            ],
            [
              80,
              150
            ],
            [
              160,
              140
            ],
            [
              20,
              140
            ],
            [
              70,
              150
            ],
            [
              20,
              150
            ],
            [
              230,
              160
            ],
            [
              80,
              160
            ],
            [
              230,
              170
            ],
            [
              20,
              160
            ],
            [
              180,
              170
            ],
            [
              20,
              170
            ],
            [
              230,
              180
            ],
            [
              20,
              180
            ],
            [
              40,
              190
            ],
            [
              230,
              190
            ],
            [
              20,
              200
            ],
            [
              230,
              200
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (30 210, 30 60, 40 210, 40 30, 50 190, 50 20, 60 160, 60 50, 70 220, 70 50, 80 20, 80 210, 90 50, 90 150, 100 30, 100 210, 110 20, 110 190, 120 50, 120 180, 130 210, 120 20, 140 210, 130 50, 150 210, 130 20, 160 210, 140 30, 170 210, 150 20, 180 210, 160 20, 190 210, 180 80, 170 50, 170 20, 180 70, 180 20, 190 190, 190 30, 200 210, 200 30, 210 210, 210 20, 220 150, 220 20)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              30,
              210
            ],
            [
              30,
              60
            ],
            [
              40,
              210
            ],
            [
              40,
              30
            ],
            [
              50,
              190
            ],
            [
              50,
              20
            ],
            [
              60,
              160
            ],
            [
              60,
              50
            ],
            [
              70,
              220
            ],
            [
              70,
              50
            ],
            [
              80,
              20
            ],
            [
              80,
              210
            ],
            [
              90,
              50
            ],
            [
              90,
              150
            ],
            [
              100,
              30
            ],
            [
              100,
              210
            ],
            [
              110,
              20
            ],
            [
              110,
              190
            ],
            [
              120,
              50
            ],
            [
              120,
              180
            ],
            [
              130,
              210
            ],
            [
              120,
              20
            ],
            [
              140,
              210
            ],
            [
              130,
              50
            ],
            [
              150,
              210
            ],
            [
              130,
              20
            ],
            [
              160,
              210
            ],
            [
              140,
              30
            ],
            [
              170,
              210
            ],
            [
              150,
              20
            ],
            [
              180,
              210
            ],
            [
              160,
              20
            ],
            [
              190,
              210
            ],
            [
              180,
              80
            ],
            [
              170,
              50
            ],
            [
              170,
              20
            ],
            [
              180,
              70
            ],
            [
              180,
              20
            ],
            [
              190,
              190
            ],
            [
              190,
              30
            ],
            [
              200,
              210
            ],
            [
              200,
              30
            ],
            [
              210,
              210
            ],
            [
              210,
              20
            ],
            [
              220,
              150
            ],
            [
              220,
              20
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "001FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-1-1: two equal LineStrings with equal pointwise [dim(1){A.L.Int.SP-EP = B.L.Int.SP-EP}]",
      "id": "04-049",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "1FFF0FFF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-1-2: two equal LineStrings with points in reverse sequence [dim(1){A.L.Int.SP-EP = B.L.Int.EP-SP}]",
      "id": "04-050",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (80 240, 200 120, 100 100, 40 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              240
            ],
            [
              200,
              120
            ],
            [
              100,
              100
            ],
            [
              40,
              40
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "1FFF0FFF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-1-3: two equal LineStrings with different number of points [dim(1){A.L.Int.SP-EP = B.L.Int.EP-SP}]",
      "id": "04-051",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (80 240, 120 200, 200 120, 100 100, 80 80, 40 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              240
            ],
            [
              120,
              200
            ],
            [
              200,
              120
            ],
            [
              100,
              100
            ],
            [
              80,
              80
            ],
            [
              40,
              40
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "1FFF0FFF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-2-1: disjoint [dim(1){A.L.Int.SP-EP = B.L.Ext}]",
      "id": "04-052",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (260 210, 240 130, 280 120, 260 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              260,
              210
            ],
            [
              240,
              130
            ],
            [
              280,
              120
            ],
            [
              260,
              40
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-2-2: wrapping around but still disjoint [dim(1){A.L.Int.SP-EP = B.L.Ext}]",
      "id": "04-053",
      "a": {
        "wkt": "LINESTRING (100 20, 20 20, 20 160, 210 160, 210 20, 110 20, 50 120, 120 150, 200 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              20
            ],
            [
              20,
              20
            ],
            [
              20,
              160
            ],
            [
              210,
              160
            ],
            [
              210,
              20
            ],
            [
              110,
              20
            ],
            [
              50,
              120
            ],
            [
              120,
              150
            ],
            [
              200,
              150
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (140 130, 100 110, 120 60, 170 60)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              140,
              130
            ],
            [
              100,
              110
            ],
            [
              120,
              60
            ],
            [
              170,
              60
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-5-1: LineString A containing LineString B, same pointwise [dim(1){A.L.Int.SP-EP = B.L.Int.SP-EP}]",
      "id": "04-054",
      "a": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "1FFF0FFF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-5-2: LineString A containing LineString B, LineString A with less points [dim(1){A.L.Int.SP-V = B.L.Int.SP-EP}]",
      "id": "04-055",
      "a": {
        "wkt": "LINESTRING (60 110, 110 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "1FFF0FFF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-5-3: LineString A containing LineString B [dim(1){A.L.Int.SP-V = B.L.Int.SP-EP}]",
      "id": "04-056",
      "a": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "101F00FF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-5-4: LineString A containing LineString B [dim(1){A.L.Int.NV-NV = B.L.Int.SP-EP}]",
      "id": "04-057",
      "a": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 160, 310 160, 340 190)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              160
            ],
            [
              310,
              160
            ],
            [
              340,
              190
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "101FF0FF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-5-5: LineString A containing LineString B [dim(1){A.L.Int.V-NV = B.L.Int.SP-EP}]",
      "id": "04-058",
      "a": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (140 160, 250 160, 310 160, 340 190)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              140,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              340,
              190
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "101FF0FF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-5-6: LineString A containing LineString B [dim(1){A.L.Int.V-V = B.L.Int.SP-EP}]",
      "id": "04-059",
      "a": {
        "wkt": "LINESTRING (60 110, 110 160, 250 160, 310 160, 360 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              110
            ],
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ],
            [
              360,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 160, 250 160, 310 160)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              160
            ],
            [
              250,
              160
            ],
            [
              310,
              160
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "101FF0FF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-6-1: start portions of two LineStrings overlapping [dim(1){A.L.Int.SP-V = B.L.Int.SP-V}]",
      "id": "04-060",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 120, 100 100, 40 40, 140 80, 200 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              120
            ],
            [
              100,
              100
            ],
            [
              40,
              40
            ],
            [
              140,
              80
            ],
            [
              200,
              40
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1010F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-6-2: start portion of LineString A overlapping end portion of LineString B, intersecting at the middle of LineString A [dim(1){A.L.Int.SP-V = B.L.Int.V-EP}]",
      "id": "04-061",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (280 240, 240 140, 200 120, 100 100, 40 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              280,
              240
            ],
            [
              240,
              140
            ],
            [
              200,
              120
            ],
            [
              100,
              100
            ],
            [
              40,
              40
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1F1F00102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-6-3: start portion of LineString A overlapping end portion of LineString B, intersecting at the middle of LineString A [dim(1){A.L.Int.SP-V = B.L.Int.NV-EP}]",
      "id": "04-062",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (80 190, 140 140, 40 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              190
            ],
            [
              140,
              140
            ],
            [
              40,
              40
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1F1F00102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-6-4: end portions of two LineStrings overlapping [dim(1){A.L.Int.NV-EP = B.L.Int.V-EP}]",
      "id": "04-063",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (240 200, 200 260, 80 240, 140 180)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              240,
              200
            ],
            [
              200,
              260
            ],
            [
              80,
              240
            ],
            [
              140,
              180
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1010F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-6-5: end portion of LineString A overlapping start portion of LineString B [dim(1){A.L.Int.NV-EP = B.L.Int.SP-V}]",
      "id": "04-064",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (140 180, 80 240, 200 260, 240 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              140,
              180
            ],
            [
              80,
              240
            ],
            [
              200,
              260
            ],
            [
              240,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1010F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-6-6: end portion of LineString A overlapping end portion of LineString B, intersecting at the middle of LineString A [dim(1){A.L.Int.V-EP = B.L.Int.V-EP}]",
      "id": "04-065",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (280 240, 240 140, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              280,
              240
            ],
            [
              240,
              140
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1F1F00102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-6-7: middle portions of two LineStrings overlapping [dim(1){A.L.Int.V-NV = B.L.Int.NV-V}]",
      "id": "04-066",
      "a": {
        "wkt": "LINESTRING (20 20, 80 80, 160 80, 240 80, 300 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              80,
              80
            ],
            [
              160,
              80
            ],
            [
              240,
              80
            ],
            [
              300,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 80, 120 80, 200 80, 260 20)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              80
            ],
            [
              120,
              80
            ],
            [
              200,
              80
            ],
            [
              260,
              20
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-6-8: middle portion of LineString A overlapping start portion of LineString B [dim(1){A.L.Int.V-V = B.L.Int.SP-V}]",
      "id": "04-067",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (100 100, 200 120, 240 140, 280 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              240,
              140
            ],
            [
              280,
              240
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "101FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-6-9: middle portion of LineString A overlapping end portion of LineString B [dim(1){A.L.Int.V-V = B.L.Int.V-EP}]",
      "id": "04-068",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 200 120, 80 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              200,
              120
            ],
            [
              80,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (280 240, 240 140, 200 120, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              280,
              240
            ],
            [
              240,
              140
            ],
            [
              200,
              120
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "101FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-6-10: middle portions of two LineStrings overlapping [dim(1){A.L.Int.V-V = B.L.Int.V-V}]",
      "id": "04-069",
      "a": {
        "wkt": "LINESTRING (20 20, 80 80, 160 80, 240 80, 300 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              80,
              80
            ],
            [
              160,
              80
            ],
            [
              240,
              80
            ],
            [
              300,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (80 20, 80 80, 240 80, 300 20)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              20
            ],
            [
              80,
              80
            ],
            [
              240,
              80
            ],
            [
              300,
              20
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/L.2-6-11: middle portions of two LineStrings overlapping, multiple intersects [dim(1){A.L.Int.V-V = B.L.Int.V-NV}, dim(1){A.L.Int.V-V = B.L.Int.V-NV}, dim(1){A.L.Int.V-V = B.L.Int.V-NV}]",
      "id": "04-070",
      "a": {
        "wkt": "LINESTRING (20 20, 80 80, 160 80, 240 80, 300 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              80,
              80
            ],
            [
              160,
              80
            ],
            [
              240,
              80
            ],
            [
              300,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 80, 80 80, 120 80, 140 140, 160 80, 200 80, 220 20, 240 80, 270 110, 300 80)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              80
            ],
            [
              80,
              80
            ],
            [
              120,
              80
            ],
            [
              140,
              140
            ],
            [
              160,
              80
            ],
            [
              200,
              80
            ],
            [
              220,
              20
            ],
            [
              240,
              80
            ],
            [
              270,
              110
            ],
            [
              300,
              80
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/LR-3-1: a LineString touching a LinearRing [dim(0){A.L.Bdy.SP = B.LR.Int.CP}]",
      "id": "04-071",
      "a": {
        "wkt": "LINESTRING (100 100, 20 180, 180 180)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              20,
              180
            ],
            [
              180,
              180
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (100 100, 180 20, 20 20, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              180,
              20
            ],
            [
              20,
              20
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF10F01F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/LR-4-1: a LineString crossing a LinearRing [dim(0){A.L.Int.NV = B.LR.Int.CP}]",
      "id": "04-072",
      "a": {
        "wkt": "LINESTRING (20 100, 180 100, 100 180)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              100
            ],
            [
              180,
              100
            ],
            [
              100,
              180
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (100 100, 180 20, 20 20, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              180,
              20
            ],
            [
              20,
              20
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF01F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/LR-4-2: a LineString crossing a LinearRing [dim(0){A.L.Int.NV = B.LR.Int.CP}]",
      "id": "04-073",
      "a": {
        "wkt": "LINESTRING (100 40, 100 160, 180 160)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              40
            ],
            [
              100,
              160
            ],
            [
              180,
              160
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (100 100, 180 20, 20 20, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              180,
              20
            ],
            [
              20,
              20
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF01F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/LR-4-3: a LineString crossing a LinearRing [dim(0){A.L.Int.V = B.LR.Int.CP}]",
      "id": "04-074",
      "a": {
        "wkt": "LINESTRING (20 100, 100 100, 180 100, 100 180)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              100
            ],
            [
              100,
              100
            ],
            [
              180,
              100
            ],
            [
              100,
              180
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (100 100, 180 20, 20 20, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              180,
              20
            ],
            [
              20,
              20
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF01F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/LR-5-1: a LineString within a LinearRing [dim(1){A.L.Int.SP-EP = B.LR.Int.SP-NV}]",
      "id": "04-075",
      "a": {
        "wkt": "LINESTRING (100 100, 160 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              160,
              40
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (100 100, 180 20, 20 20, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              180,
              20
            ],
            [
              20,
              20
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "1FF0FF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/LR-5-2: a LineString within a LinearRing [dim(1){A.L.Int.SP-EP = B.LR.Int.SP-NV}]",
      "id": "04-076",
      "a": {
        "wkt": "LINESTRING (100 100, 180 20)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              180,
              20
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (100 100, 180 20, 20 20, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              180,
              20
            ],
            [
              20,
              20
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "1FF0FF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/LR-5-3: a LineString within a LinearRing [dim(1){A.L.Int.SP-V-EP = B.LR.Int.NV-CP-NV}]",
      "id": "04-077",
      "a": {
        "wkt": "LINESTRING (60 60, 100 100, 140 60)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              60
            ],
            [
              100,
              100
            ],
            [
              140,
              60
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (100 100, 180 20, 20 20, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              180,
              20
            ],
            [
              20,
              20
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "1FF0FF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/LR-6-1: a LineString crossing a LinearRing [dim(1){A.L.Int.SP-NV = B.LR.Int.SP-V}]",
      "id": "04-078",
      "a": {
        "wkt": "LINESTRING (100 100, 190 10, 190 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              190,
              10
            ],
            [
              190,
              100
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (100 100, 180 20, 20 20, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              180,
              20
            ],
            [
              20,
              20
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1F10F01F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/LR-6-2: a LineString crossing a LinearRing [dim(1){A.L.Int.SP-V = B.LR.Int.SP-NV}]",
      "id": "04-079",
      "a": {
        "wkt": "LINESTRING (100 100, 160 40, 160 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              160,
              40
            ],
            [
              160,
              100
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (100 100, 180 20, 20 20, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              180,
              20
            ],
            [
              20,
              20
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1F10F01F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/LR-6-3: a LineString crossing a LinearRing [dim(1){A.L.Int.NV-V = B.LR.Int.SP-NV}]",
      "id": "04-080",
      "a": {
        "wkt": "LINESTRING (60 140, 160 40, 160 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              140
            ],
            [
              160,
              40
            ],
            [
              160,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (100 100, 180 20, 20 20, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              180,
              20
            ],
            [
              20,
              20
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1F1FF01F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's end point with both crossing and overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Bdy.EPb}]",
      "id": "04-081",
      "a": {
        "wkt": "LINESTRING (20 20, 140 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              140,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (80 80, 20 80, 140 80, 80 20, 80 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              80
            ],
            [
              20,
              80
            ],
            [
              140,
              80
            ],
            [
              80,
              20
            ],
            [
              80,
              140
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's end point with overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Bdy.EPo}]",
      "id": "04-082",
      "a": {
        "wkt": "LINESTRING (20 20, 140 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              140,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (80 80, 20 80, 140 80)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              80
            ],
            [
              20,
              80
            ],
            [
              140,
              80
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's end point with crossing line segments [dim(0){A.L.Int.NV = B.nsL.Bdy.EPx}]",
      "id": "04-083",
      "a": {
        "wkt": "LINESTRING (20 20, 140 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              140,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (80 80, 140 80, 80 20, 80 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              80
            ],
            [
              140,
              80
            ],
            [
              80,
              20
            ],
            [
              80,
              140
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's closing point with both crossing and overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.CPb}]",
      "id": "04-084",
      "a": {
        "wkt": "LINESTRING (20 20, 140 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              140,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (80 80, 20 80, 140 80, 80 20, 80 80)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              80
            ],
            [
              20,
              80
            ],
            [
              140,
              80
            ],
            [
              80,
              20
            ],
            [
              80,
              80
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF01F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's closing point with overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.CPo}]",
      "id": "04-085",
      "a": {
        "wkt": "LINESTRING (20 20, 140 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              140,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (80 80, 20 80, 140 80, 80 80)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              80
            ],
            [
              20,
              80
            ],
            [
              140,
              80
            ],
            [
              80,
              80
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF01F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's closing point with crossing line segments [dim(0){A.L.Int.NV = B.nsL.Int.CPx}]",
      "id": "04-086",
      "a": {
        "wkt": "LINESTRING (20 20, 140 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              140,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (80 80, 20 80, 20 140, 140 20, 80 20, 80 80)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              80
            ],
            [
              20,
              80
            ],
            [
              20,
              140
            ],
            [
              140,
              20
            ],
            [
              80,
              20
            ],
            [
              80,
              80
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF01F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a non-vertex [dim(0){A.L.Int.NV = B.nsL.Int.NV}]",
      "id": "04-087",
      "a": {
        "wkt": "LINESTRING (20 20, 140 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              140,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 140, 140 20, 100 20, 100 80)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              140
            ],
            [
              140,
              20
            ],
            [
              100,
              20
            ],
            [
              100,
              80
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a non-vertex with both crossing and overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.NVb}]",
      "id": "04-088",
      "a": {
        "wkt": "LINESTRING (20 20, 140 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              140,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (140 80, 20 80, 120 80, 80 20, 80 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              140,
              80
            ],
            [
              20,
              80
            ],
            [
              120,
              80
            ],
            [
              80,
              20
            ],
            [
              80,
              140
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a non-vertex with overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.NVo}]",
      "id": "04-089",
      "a": {
        "wkt": "LINESTRING (20 20, 140 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              140,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (140 80, 20 80, 140 80)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              140,
              80
            ],
            [
              20,
              80
            ],
            [
              140,
              80
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF01F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a non-vertex with crossing line segments [dim(0){A.L.Int.NV = B.nsL.Int.NVx}]",
      "id": "04-090",
      "a": {
        "wkt": "LINESTRING (20 20, 140 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              140,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (140 80, 20 80, 80 140, 80 20)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              140,
              80
            ],
            [
              20,
              80
            ],
            [
              80,
              140
            ],
            [
              80,
              20
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a vertex [dim(0){A.L.Int.NV = B.nsL.Int.V}]",
      "id": "04-091",
      "a": {
        "wkt": "LINESTRING (20 20, 140 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              140,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (140 80, 80 80, 20 80, 50 140, 50 60)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              140,
              80
            ],
            [
              80,
              80
            ],
            [
              20,
              80
            ],
            [
              50,
              140
            ],
            [
              50,
              60
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a vertex with both crossing and overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.Vb}]",
      "id": "04-092",
      "a": {
        "wkt": "LINESTRING (20 20, 140 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              140,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (140 80, 20 80, 120 80, 80 20, 80 80, 80 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              140,
              80
            ],
            [
              20,
              80
            ],
            [
              120,
              80
            ],
            [
              80,
              20
            ],
            [
              80,
              80
            ],
            [
              80,
              140
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a vertex with overlapping line segments [dim(0){A.L.Int.NV = B.nsL.Int.Vo}]",
      "id": "04-093",
      "a": {
        "wkt": "LINESTRING (20 20, 140 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              140,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (140 80, 20 80, 80 80, 140 80)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              140,
              80
            ],
            [
              20,
              80
            ],
            [
              80,
              80
            ],
            [
              140,
              80
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF01F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL: A line's interior at a non-vertex intersecting a non-simple linestring's interior at a vertex with crossing line segments [dim(0){A.L.Int.NV = B.nsL.Int.Vx}]",
      "id": "04-094",
      "a": {
        "wkt": "LINESTRING (20 20, 140 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              140,
              140
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (140 80, 20 80, 80 140, 80 80, 80 20)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              140,
              80
            ],
            [
              20,
              80
            ],
            [
              80,
              140
            ],
            [
              80,
              80
            ],
            [
              80,
              20
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL.1-3-1: start point of a LineString touching the self-intersecting point of a non-simple LineString [dim(0){A.L.Bdy.SP = B.nsL.Bdy.EPx}]",
      "id": "04-095",
      "a": {
        "wkt": "LINESTRING (130 150, 220 150, 220 240)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              130,
              150
            ],
            [
              220,
              150
            ],
            [
              220,
              240
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (130 240, 130 150, 220 20, 50 20, 130 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              130,
              240
            ],
            [
              130,
              150
            ],
            [
              220,
              20
            ],
            [
              50,
              20
            ],
            [
              130,
              150
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL.1-3-2: the interior of a LineString touching the self-intersecting point of a non-simple LineString [dim(0){A.L.Int.V = B.nsL.Bdy.EPx}]",
      "id": "04-096",
      "a": {
        "wkt": "LINESTRING (30 150, 130 150, 250 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              30,
              150
            ],
            [
              130,
              150
            ],
            [
              250,
              150
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (130 240, 130 150, 220 20, 50 20, 130 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              130,
              240
            ],
            [
              130,
              150
            ],
            [
              220,
              20
            ],
            [
              50,
              20
            ],
            [
              130,
              150
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL.1-3-3: the interior of a LineString touching the self-intersecting point of a non-simple LineString [dim(0){A.L.Int.NV = B.nsL.Bdy.EPx}]",
      "id": "04-097",
      "a": {
        "wkt": "LINESTRING (30 150, 250 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              30,
              150
            ],
            [
              250,
              150
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (130 240, 130 150, 220 20, 50 20, 130 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              130,
              240
            ],
            [
              130,
              150
            ],
            [
              220,
              20
            ],
            [
              50,
              20
            ],
            [
              130,
              150
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL.1-3-4: the interior of a LineString touching the self-intersecting point of a non-simple LineString [dim(0){A.L.Int.V = B.nsL.Bdy.EPx}]",
      "id": "04-098",
      "a": {
        "wkt": "LINESTRING (30 150, 130 150, 250 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              30,
              150
            ],
            [
              130,
              150
            ],
            [
              250,
              150
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (130 240, 130 20, 30 20, 130 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              130,
              240
            ],
            [
              130,
              20
            ],
            [
              30,
              20
            ],
            [
              130,
              150
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL.1-4: a Line crossing a non-simple LineString at non-vertices [dim(0){A.L.Int.NV = B.nsL.Int.NV}]",
      "id": "04-099",
      "a": {
        "wkt": "LINESTRING (30 150, 250 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              30,
              150
            ],
            [
              250,
              150
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (120 240, 120 20, 20 20, 120 170)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              120,
              240
            ],
            [
              120,
              20
            ],
            [
              20,
              20
            ],
            [
              120,
              170
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "nsL.5/L-3-1: switching the geometries for case L/nsL.5-3-1 [dim(0){A.nsL.Bdy.EPx = B.L.Bdy.SP}]",
      "id": "04-100",
      "a": {
        "wkt": "LINESTRING (200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              20,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 200 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              200,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL.5-3-2: the start point of a line touching the self-intersecting and self-crossing point of a non-simple LineString [dim(0){A.L.Bdy.SP = B.nsL.Bdy.EPx}]",
      "id": "04-101",
      "a": {
        "wkt": "LINESTRING (110 110, 200 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              200,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              20,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL.5-3-3: the interior of a line touching the self-intersecting and self-crossing point of a non-simple LineString [dim(0){A.L.Int.NV = B.nsL.Bdy.EPx}]",
      "id": "04-102",
      "a": {
        "wkt": "LINESTRING (20 110, 200 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              110
            ],
            [
              200,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              20,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "nsL.5/L-3-4 touches dim(0){A.nsL.Bdy.EPx = B.L.Int.NV}",
      "id": "04-103",
      "a": {
        "wkt": "LINESTRING (200 200, 20 20, 200 20, 110 110, 20 200, 110 200, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              20,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 110, 200 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              110
            ],
            [
              200,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF10F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL.10-6-1: the middle portion of a line overlapping from the self-intersecting to the self-crossing a non-simple LineString [dim(1){A.L.Int.V-V = B.nsL.Int.EPx-NVx}]",
      "id": "04-104",
      "a": {
        "wkt": "LINESTRING (90 200, 90 130, 110 110, 150 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              200
            ],
            [
              90,
              130
            ],
            [
              110,
              110
            ],
            [
              150,
              200
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 200, 20 20, 200 20, 20 200, 20 130, 90 130)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              20,
              200
            ],
            [
              20,
              130
            ],
            [
              90,
              130
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "101FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/nsL.10-6-2: the middle portion of a line overlapping from the self-intersecting to the self-crossing a non-simple LineString [dim(1){A.L.Int.V-V = B.nsL.Int.NVx-EPx}]",
      "id": "04-105",
      "a": {
        "wkt": "LINESTRING (200 110, 110 110, 90 130, 90 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              110
            ],
            [
              110,
              110
            ],
            [
              90,
              130
            ],
            [
              90,
              200
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 200, 20 20, 200 20, 20 200, 20 130, 90 130)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              20,
              200
            ],
            [
              20,
              130
            ],
            [
              90,
              130
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "101FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "L/mL-3-1: a line's end point touching a non-vertex with crossing line segments of a MultiLineString [dim(0){A.L.Bdy.SP = B.mL.Int.NVx]",
      "id": "04-106",
      "a": {
        "wkt": "LINESTRING (80 80, 150 80, 210 80)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              80
            ],
            [
              150,
              80
            ],
            [
              210,
              80
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((20 20, 140 140),(20 140, 140 20))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                140,
                140
              ]
            ],
            [
              [
                20,
                140
              ],
              [
                140,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF10F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "LR/LR-1-1: two equal LinearRings, pointwise [dim(1){A.LR.Int.SP-EP = B.LR.Int.SP-EP}, dim(0){A.LR.Int.CP = B.LR.Int.CP}]",
      "id": "04-107",
      "a": {
        "wkt": "LINESTRING (40 80, 160 200, 260 20, 40 80)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              80
            ],
            [
              160,
              200
            ],
            [
              260,
              20
            ],
            [
              40,
              80
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (40 80, 160 200, 260 20, 40 80)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              80
            ],
            [
              160,
              200
            ],
            [
              260,
              20
            ],
            [
              40,
              80
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "1FFFFFFF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "LR/LR-1-2: two equal LinearRings with points in reverse sequence [dim(1){A.LR.Int.SP-EP = B.LR.Int.EP-SP}, dim(0){A.LR.Int.CP = B.LR.Int.CP}]",
      "id": "04-108",
      "a": {
        "wkt": "LINESTRING (40 80, 160 200, 260 20, 40 80)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              80
            ],
            [
              160,
              200
            ],
            [
              260,
              20
            ],
            [
              40,
              80
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (40 80, 260 20, 160 200, 40 80)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              80
            ],
            [
              260,
              20
            ],
            [
              160,
              200
            ],
            [
              40,
              80
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "1FFFFFFF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "LR/LR-1-3: two equal LinearRings with points in different sequence [dim(1){A.LR.Int.SP-EP = B.LR.Int.SP-EP}, dim(0){A.LR.Int.CP = B.LR.Int.V}, dim(0){A.LR.Int.V = B.LR.Int.CP}]",
      "id": "04-109",
      "a": {
        "wkt": "LINESTRING (40 80, 160 200, 260 20, 40 80)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              80
            ],
            [
              160,
              200
            ],
            [
              260,
              20
            ],
            [
              40,
              80
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (260 20, 40 80, 160 200, 260 20)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              260,
              20
            ],
            [
              40,
              80
            ],
            [
              160,
              200
            ],
            [
              260,
              20
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "1FFFFFFF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "LR/LR-1-4: two equal LinearRings with different number of points [dim(1){A.LR.Int.SP-EP = B.LR.Int.SP-EP}, dim(0){A.LR.Int.CP = B.LR.Int.V}, dim(0){A.LR.Int.NV = B.LR.Int.CP}]",
      "id": "04-110",
      "a": {
        "wkt": "LINESTRING (40 80, 160 200, 260 20, 40 80)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              80
            ],
            [
              160,
              200
            ],
            [
              260,
              20
            ],
            [
              40,
              80
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (100 140, 160 200, 260 20, 40 80, 100 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              140
            ],
            [
              160,
              200
            ],
            [
              260,
              20
            ],
            [
              40,
              80
            ],
            [
              100,
              140
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "1FFFFFFF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "LR/LR-4-1: two LinearRings crossing at closing points [dim(0){A.LR.Int.CP = B.LR.Int.CP}]",
      "id": "04-111",
      "a": {
        "wkt": "LINESTRING (100 100, 180 20, 20 20, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              180,
              20
            ],
            [
              20,
              20
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (100 100, 180 180, 20 180, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              180,
              180
            ],
            [
              20,
              180
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FFF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "LR/LR-4-2: two LinearRings crossing at two points [dim(0){A.LR.Int.CP = B.LR.Int.CP}, dim(0){A.LR.Int.V = B.LR.Int.V},]",
      "id": "04-112",
      "a": {
        "wkt": "LINESTRING (40 150, 40 40, 150 40, 150 150, 40 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              150
            ],
            [
              40,
              40
            ],
            [
              150,
              40
            ],
            [
              150,
              150
            ],
            [
              40,
              150
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (40 150, 150 40, 170 20, 170 190, 40 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              150
            ],
            [
              150,
              40
            ],
            [
              170,
              20
            ],
            [
              170,
              190
            ],
            [
              40,
              150
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FFF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "LR/LR-4-3: two LinearRings crossing at the closing and a non-vertex [dim(0){A.LR.Int.CP = B.LR.Int.NV}]",
      "id": "04-113",
      "a": {
        "wkt": "LINESTRING (100 100, 180 20, 20 20, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              180,
              20
            ],
            [
              20,
              20
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (180 100, 20 100, 100 180, 180 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              180,
              100
            ],
            [
              20,
              100
            ],
            [
              100,
              180
            ],
            [
              180,
              100
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FFF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "LR/LR-4-4: two LinearRings crossing at the closing and a vertex [dim(0){A.LR.Int.CP = B.LR.Int.V}]",
      "id": "04-114",
      "a": {
        "wkt": "LINESTRING (100 100, 180 20, 20 20, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              100
            ],
            [
              180,
              20
            ],
            [
              20,
              20
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (180 180, 100 100, 20 180, 180 180)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              180,
              180
            ],
            [
              100,
              100
            ],
            [
              20,
              180
            ],
            [
              180,
              180
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FFF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "LR/LR-4-5: two LinearRings crossing at a vertex and a non-vertex [dim(0){A.LR.Int.V = B.LR.Int.NV}]",
      "id": "04-115",
      "a": {
        "wkt": "LINESTRING (20 180, 100 100, 20 20, 20 180)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              180
            ],
            [
              100,
              100
            ],
            [
              20,
              20
            ],
            [
              20,
              180
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (100 20, 100 180, 180 100, 100 20)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              20
            ],
            [
              100,
              180
            ],
            [
              180,
              100
            ],
            [
              100,
              20
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FFF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "LR/LR-4-6: two LinearRings crossing at two points [dim(0){A.LR.Int.V = B.LR.Int.NV}, dim(0){A.LR.Int.V = B.LR.Int.NV},]",
      "id": "04-116",
      "a": {
        "wkt": "LINESTRING (40 150, 40 40, 150 40, 150 150, 40 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              150
            ],
            [
              40,
              40
            ],
            [
              150,
              40
            ],
            [
              150,
              150
            ],
            [
              40,
              150
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (170 20, 20 170, 170 170, 170 20)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              170,
              20
            ],
            [
              20,
              170
            ],
            [
              170,
              170
            ],
            [
              170,
              20
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FFF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "LR/LR-6-1: two LinearRings overlapping [dim(1){A.LR.Int.CP-V = B.LR.Int.CP-V}]",
      "id": "04-117",
      "a": {
        "wkt": "LINESTRING (40 150, 40 40, 150 40, 150 150, 40 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              150
            ],
            [
              40,
              40
            ],
            [
              150,
              40
            ],
            [
              150,
              150
            ],
            [
              40,
              150
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (40 150, 150 150, 90 210, 40 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              150
            ],
            [
              150,
              150
            ],
            [
              90,
              210
            ],
            [
              40,
              150
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1F1FFF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "LR/LR-6-2: two LinearRings overlapping [dim(1){A.LR.Int.CP-V = B.LR.Int.NV-NV}]",
      "id": "04-118",
      "a": {
        "wkt": "LINESTRING (40 150, 40 40, 150 40, 150 150, 40 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              150
            ],
            [
              40,
              40
            ],
            [
              150,
              40
            ],
            [
              150,
              150
            ],
            [
              40,
              150
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 150, 170 150, 90 230, 20 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              150
            ],
            [
              170,
              150
            ],
            [
              90,
              230
            ],
            [
              20,
              150
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1F1FFF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "LR/LR-6-3: two LinearRings overlapping [dim(1){A.LR.Int.(V-V-V-EP) = B.LR.Int.(NV-V-V-SP)}]",
      "id": "04-119",
      "a": {
        "wkt": "LINESTRING (40 150, 40 40, 150 40, 150 150, 40 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              150
            ],
            [
              40,
              40
            ],
            [
              150,
              40
            ],
            [
              150,
              150
            ],
            [
              40,
              150
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (40 150, 150 150, 150 40, 20 40, 20 150, 40 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              150
            ],
            [
              150,
              150
            ],
            [
              150,
              40
            ],
            [
              20,
              40
            ],
            [
              20,
              150
            ],
            [
              40,
              150
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1F1FFF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "LR/nsL-3-1: a LinearRing touching a non-simple LineString [dim(0){A.nsL.Int.CP = B.nsL.Bdy.SPb}]",
      "id": "04-120",
      "a": {
        "wkt": "LINESTRING (110 110, 200 20, 20 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 200 200, 110 110, 20 200, 20 110, 200 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              200,
              200
            ],
            [
              110,
              110
            ],
            [
              20,
              200
            ],
            [
              20,
              110
            ],
            [
              200,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FFF102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "LR/nsL-3-1: a LinearRing touching a non-simple LineString [dim(0){A.nsL.Int.CP = B.nsL.Bdy.SPo}]",
      "id": "04-121",
      "a": {
        "wkt": "LINESTRING (110 110, 200 20, 20 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 20 110, 200 110, 50 110, 110 170)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              20,
              110
            ],
            [
              200,
              110
            ],
            [
              50,
              110
            ],
            [
              110,
              170
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FFF102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "LR/nsL-3-1: a LinearRing touching a non-simple LineString [dim(0){A.nsL.Int.CP = B.nsL.Bdy.SPx}]",
      "id": "04-122",
      "a": {
        "wkt": "LINESTRING (110 110, 200 20, 20 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 20 200, 110 200, 110 110, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              20,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FFF102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "LR/nsL-6-1: a LinearRing and a non-simple LineString overlapping [dim(1){A.nsL.Int.SP-V = B.nsL.Int.NVx-SP}]",
      "id": "04-123",
      "a": {
        "wkt": "LINESTRING (110 110, 200 20, 20 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 20, 20 200, 200 200, 110 110, 110 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              20
            ],
            [
              20,
              200
            ],
            [
              200,
              200
            ],
            [
              110,
              110
            ],
            [
              110,
              40
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "101FFF102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "LR/nsL-6-2: a LinearRing and a non-simple LineString overlapping [dim(1){A.nsL.Int.SP-V = B.nsL.Int.NVx-SP}, dim(1){A.nsL.Int.V-EP = B.nsL.Int.EP-NVx}]",
      "id": "04-124",
      "a": {
        "wkt": "LINESTRING (110 110, 200 20, 20 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              200,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 20, 20 200, 200 200, 20 20)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              20
            ],
            [
              20,
              200
            ],
            [
              200,
              200
            ],
            [
              20,
              20
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "101FFF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "nsL/nsL-4-1: non-simple LineStrings crossing at closing points [dim(0){A.nsL.Int.CP = B.nsL.Int.CP}]",
      "id": "04-125",
      "a": {
        "wkt": "LINESTRING (110 110, 20 110, 110 20, 20 20, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              20,
              110
            ],
            [
              110,
              20
            ],
            [
              20,
              20
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 110, 200 200, 110 200, 200 110, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              200,
              200
            ],
            [
              110,
              200
            ],
            [
              200,
              110
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FFF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "nsL/nsL-4-2: non-simple LineStrings crossing at two points without vertices [dim(0){A.nsL.Int.NV = B.nsL.Int.NV}]",
      "id": "04-126",
      "a": {
        "wkt": "LINESTRING (20 120, 120 120, 20 20, 120 20, 20 120)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              120
            ],
            [
              120,
              120
            ],
            [
              20,
              20
            ],
            [
              120,
              20
            ],
            [
              20,
              120
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (170 100, 70 100, 170 170, 70 170, 170 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              170,
              100
            ],
            [
              70,
              100
            ],
            [
              170,
              170
            ],
            [
              70,
              170
            ],
            [
              170,
              100
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FFF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "nsL/nsL-4-3: non-simple LineStrings crossing at a point [dim(0){A.nsL.Int.NV = B.nsL.Int.V}]",
      "id": "04-127",
      "a": {
        "wkt": "LINESTRING (20 110, 110 110, 20 20, 110 20, 20 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              110
            ],
            [
              110,
              110
            ],
            [
              20,
              20
            ],
            [
              110,
              20
            ],
            [
              20,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (110 160, 70 110, 60 160, 20 130, 110 160)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              160
            ],
            [
              70,
              110
            ],
            [
              60,
              160
            ],
            [
              20,
              130
            ],
            [
              110,
              160
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FFF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "nsL/nsL-4-4: non-simple LineStrings crossing at self-crossing points [dim(0){A.nsL.Int.NVx = B.nsL.Int.NVx}]",
      "id": "04-128",
      "a": {
        "wkt": "LINESTRING (20 200, 200 200, 20 20, 200 20, 20 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              200
            ],
            [
              200,
              200
            ],
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              20,
              200
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 110, 200 110, 200 160, 20 60, 20 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              110
            ],
            [
              200,
              110
            ],
            [
              200,
              160
            ],
            [
              20,
              60
            ],
            [
              20,
              110
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FFF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "nsL/nsL-4-5: non-simple LineStrings crossing at vertices [dim(0){A.nsL.Int.V = B.nsL.Int.V}]",
      "id": "04-129",
      "a": {
        "wkt": "LINESTRING (20 110, 110 110, 20 20, 110 20, 20 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              110
            ],
            [
              110,
              110
            ],
            [
              20,
              20
            ],
            [
              110,
              20
            ],
            [
              20,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (200 200, 110 110, 200 110, 110 200, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              200
            ],
            [
              110,
              110
            ],
            [
              200,
              110
            ],
            [
              110,
              200
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FFF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "nsL/nsL-4-6: non-simple LineStrings crossing at two points with vertices [dim(0){A.nsL.Int.V = B.nsL.Int.V}]",
      "id": "04-130",
      "a": {
        "wkt": "LINESTRING (20 120, 120 120, 20 20, 120 20, 20 120)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              120
            ],
            [
              120,
              120
            ],
            [
              20,
              20
            ],
            [
              120,
              20
            ],
            [
              20,
              120
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (220 120, 120 20, 220 20, 120 120, 220 120)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              220,
              120
            ],
            [
              120,
              20
            ],
            [
              220,
              20
            ],
            [
              120,
              120
            ],
            [
              220,
              120
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FFF1F2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "mL/mL-1: MultiLineString [dim(1){A.mL.Int.SP-EP = B.mL.Int.SP-EP}]",
      "id": "04-131",
      "a": {
        "wkt": "MULTILINESTRING ((70 20, 20 90, 70 170),(70 170, 120 90, 70 20))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                70,
                20
              ],
              [
                20,
                90
              ],
              [
                70,
                170
              ]
            ],
            [
              [
                70,
                170
              ],
              [
                120,
                90
              ],
              [
                70,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((70 20, 20 90, 70 170),(70 170, 120 90, 70 20))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                70,
                20
              ],
              [
                20,
                90
              ],
              [
                70,
                170
              ]
            ],
            [
              [
                70,
                170
              ],
              [
                120,
                90
              ],
              [
                70,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "1FFFFFFF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "mL/mL-1-1: non-simple MultiLineString [dim(1){A.mL.Int.SP-EP = B.mL.Int.SP-EP}]",
      "id": "04-132",
      "a": {
        "wkt": "MULTILINESTRING ((20 20, 90 20, 170 20),(90 20, 90 80, 90 140))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                90,
                20
              ],
              [
                170,
                20
              ]
            ],
            [
              [
                90,
                20
              ],
              [
                90,
                80
              ],
              [
                90,
                140
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((20 20, 90 20, 170 20),(90 20, 90 80, 90 140))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                90,
                20
              ],
              [
                170,
                20
              ]
            ],
            [
              [
                90,
                20
              ],
              [
                90,
                80
              ],
              [
                90,
                140
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "1FFF0FFF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "mL/mL-1-2: equal non-simple MultiLineString with different sequence of lines and points [dim(1){A.mL.Int.SP-EP = B.mL.Int.EP-SP}]",
      "id": "04-133",
      "a": {
        "wkt": "MULTILINESTRING ((20 20, 90 20, 170 20),(90 20, 90 80, 90 140))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                90,
                20
              ],
              [
                170,
                20
              ]
            ],
            [
              [
                90,
                20
              ],
              [
                90,
                80
              ],
              [
                90,
                140
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((90 140, 90 60, 90 20),(170 20, 130 20, 20 20))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                90,
                140
              ],
              [
                90,
                60
              ],
              [
                90,
                20
              ]
            ],
            [
              [
                170,
                20
              ],
              [
                130,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "1FFF0FFF2"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "mL/mL-3-1: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPb}]",
      "id": "04-134",
      "a": {
        "wkt": "MULTILINESTRING ((20 20, 90 20, 170 20),(90 20, 90 80, 90 140))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                90,
                20
              ],
              [
                170,
                20
              ]
            ],
            [
              [
                90,
                20
              ],
              [
                90,
                80
              ],
              [
                90,
                140
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((90 20, 170 100, 170 140),(170 60, 90 20, 20 60),(130 100, 130 60, 90 20, 50 90))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                90,
                20
              ],
              [
                170,
                100
              ],
              [
                170,
                140
              ]
            ],
            [
              [
                170,
                60
              ],
              [
                90,
                20
              ],
              [
                20,
                60
              ]
            ],
            [
              [
                130,
                100
              ],
              [
                130,
                60
              ],
              [
                90,
                20
              ],
              [
                50,
                90
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "mL/mL-3-2: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPo}]",
      "id": "04-135",
      "a": {
        "wkt": "MULTILINESTRING ((20 20, 90 20, 170 20),(90 20, 90 80, 90 140))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                90,
                20
              ],
              [
                170,
                20
              ]
            ],
            [
              [
                90,
                20
              ],
              [
                90,
                80
              ],
              [
                90,
                140
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((90 20, 170 100, 170 140),(130 140, 130 60, 90 20, 20 90, 90 20, 130 60, 170 60))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                90,
                20
              ],
              [
                170,
                100
              ],
              [
                170,
                140
              ]
            ],
            [
              [
                130,
                140
              ],
              [
                130,
                60
              ],
              [
                90,
                20
              ],
              [
                20,
                90
              ],
              [
                90,
                20
              ],
              [
                130,
                60
              ],
              [
                170,
                60
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "mL/mL-3-3: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPx}]",
      "id": "04-136",
      "a": {
        "wkt": "MULTILINESTRING ((20 20, 90 20, 170 20),(90 20, 90 80, 90 140))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                90,
                20
              ],
              [
                170,
                20
              ]
            ],
            [
              [
                90,
                20
              ],
              [
                90,
                80
              ],
              [
                90,
                140
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((90 20, 170 100, 170 140),(170 60, 90 20, 20 60))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                90,
                20
              ],
              [
                170,
                100
              ],
              [
                170,
                140
              ]
            ],
            [
              [
                170,
                60
              ],
              [
                90,
                20
              ],
              [
                20,
                60
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "mL/mL-3-4: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPx}]",
      "id": "04-137",
      "a": {
        "wkt": "MULTILINESTRING ((20 20, 90 20, 170 20),(90 20, 90 80, 90 140))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                90,
                20
              ],
              [
                170,
                20
              ]
            ],
            [
              [
                90,
                20
              ],
              [
                90,
                80
              ],
              [
                90,
                140
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((90 20, 170 100, 170 140),(170 60, 90 20, 20 60),(130 100, 90 20))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                90,
                20
              ],
              [
                170,
                100
              ],
              [
                170,
                140
              ]
            ],
            [
              [
                170,
                60
              ],
              [
                90,
                20
              ],
              [
                20,
                60
              ]
            ],
            [
              [
                130,
                100
              ],
              [
                90,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF10F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "mL/mL-3-5: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Bdy.SPx}]",
      "id": "04-138",
      "a": {
        "wkt": "MULTILINESTRING ((20 20, 90 20, 170 20),(90 20, 90 80, 90 140))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                90,
                20
              ],
              [
                170,
                20
              ]
            ],
            [
              [
                90,
                20
              ],
              [
                90,
                80
              ],
              [
                90,
                140
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((90 20, 170 100, 170 140),(170 60, 90 20, 20 60),(120 100, 170 100, 90 20))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                90,
                20
              ],
              [
                170,
                100
              ],
              [
                170,
                140
              ]
            ],
            [
              [
                170,
                60
              ],
              [
                90,
                20
              ],
              [
                20,
                60
              ]
            ],
            [
              [
                120,
                100
              ],
              [
                170,
                100
              ],
              [
                90,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF10F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "mL/mL-3-6: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Int.SPb}]",
      "id": "04-139",
      "a": {
        "wkt": "MULTILINESTRING ((20 20, 90 20, 170 20),(90 20, 90 80, 90 140))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                90,
                20
              ],
              [
                170,
                20
              ]
            ],
            [
              [
                90,
                20
              ],
              [
                90,
                80
              ],
              [
                90,
                140
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((90 20, 170 100, 170 140),(170 60, 90 20, 20 60),(120 100, 170 100, 90 20))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                90,
                20
              ],
              [
                170,
                100
              ],
              [
                170,
                140
              ]
            ],
            [
              [
                170,
                60
              ],
              [
                90,
                20
              ],
              [
                20,
                60
              ]
            ],
            [
              [
                120,
                100
              ],
              [
                170,
                100
              ],
              [
                90,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF10F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "mL/mL-3-7: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Int.SPo}]",
      "id": "04-140",
      "a": {
        "wkt": "MULTILINESTRING ((20 20, 90 20, 170 20),(90 20, 90 80, 90 140))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                90,
                20
              ],
              [
                170,
                20
              ]
            ],
            [
              [
                90,
                20
              ],
              [
                90,
                80
              ],
              [
                90,
                140
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((90 20, 170 100, 170 140),(130 140, 130 60, 90 20, 20 90, 90 20))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                90,
                20
              ],
              [
                170,
                100
              ],
              [
                170,
                140
              ]
            ],
            [
              [
                130,
                140
              ],
              [
                130,
                60
              ],
              [
                90,
                20
              ],
              [
                20,
                90
              ],
              [
                90,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF10F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "mL/mL-3-8: non-simple MultiLineStrings touching at boundaries [dim(0){A.mL.Bdy.SPx = B.mL.Int.SPx}]",
      "id": "04-141",
      "a": {
        "wkt": "MULTILINESTRING ((20 20, 90 20, 170 20),(90 20, 90 80, 90 140))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                90,
                20
              ],
              [
                170,
                20
              ]
            ],
            [
              [
                90,
                20
              ],
              [
                90,
                80
              ],
              [
                90,
                140
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((90 20, 170 100, 170 140),(170 60, 90 20, 20 60, 20 140, 90 20))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                90,
                20
              ],
              [
                170,
                100
              ],
              [
                170,
                140
              ]
            ],
            [
              [
                170,
                60
              ],
              [
                90,
                20
              ],
              [
                20,
                60
              ],
              [
                20,
                140
              ],
              [
                90,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF10F0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "mL/mL-4-1: non-simple MultiLineStrings crossing [dim(0){A.mL.Int.Vx = B.mL.Int.Vb}]",
      "id": "04-142",
      "a": {
        "wkt": "MULTILINESTRING ((20 20, 90 90, 20 160),(90 160, 90 20))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                90,
                90
              ],
              [
                20,
                160
              ]
            ],
            [
              [
                90,
                160
              ],
              [
                90,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((160 160, 90 90, 160 20),(160 120, 120 120, 90 90, 160 60))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                160,
                160
              ],
              [
                90,
                90
              ],
              [
                160,
                20
              ]
            ],
            [
              [
                160,
                120
              ],
              [
                120,
                120
              ],
              [
                90,
                90
              ],
              [
                160,
                60
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "mL/mL-4-2: non-simple MultiLineStrings crossing [dim(0){A.mL.Int.Vx = B.mL.Int.Vo}]",
      "id": "04-143",
      "a": {
        "wkt": "MULTILINESTRING ((20 20, 90 90, 20 160),(90 160, 90 20))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                90,
                90
              ],
              [
                20,
                160
              ]
            ],
            [
              [
                90,
                160
              ],
              [
                90,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((160 160, 90 90, 160 20),(160 120, 120 120, 90 90, 120 60, 160 60))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                160,
                160
              ],
              [
                90,
                90
              ],
              [
                160,
                20
              ]
            ],
            [
              [
                160,
                120
              ],
              [
                120,
                120
              ],
              [
                90,
                90
              ],
              [
                120,
                60
              ],
              [
                160,
                60
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF0102"
      }
    },
    {
      "group": "TestRelateLL",
      "category": "relate",
      "title": "mL/mL-4-3: non-simple MultiLineStrings crossing [dim(0){A.mL.Int.Vx = B.mL.Int.Vx}]",
      "id": "04-144",
      "a": {
        "wkt": "MULTILINESTRING ((20 20, 90 90, 20 160),(90 160, 90 20))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                90,
                90
              ],
              [
                20,
                160
              ]
            ],
            [
              [
                90,
                160
              ],
              [
                90,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((160 160, 90 90, 160 20),(160 120, 90 90, 160 60))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                160,
                160
              ],
              [
                90,
                90
              ],
              [
                160,
                20
              ]
            ],
            [
              [
                160,
                120
              ],
              [
                90,
                90
              ],
              [
                160,
                60
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF0102"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-3-1: a line touching the closing point of a polygon [dim(0){A.L.Bdy.SP = B.oBdy.CP}]",
      "id": "05-001",
      "a": {
        "wkt": "LINESTRING (150 150, 40 230)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              150,
              150
            ],
            [
              40,
              230
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-3-2: the start and end points of a LineString touching the boundary (at non-vertices) of a polygon [dim(0){A.L.Bdy.SP = B.oBdy.NV}, dim(0){A.L.Bdy.EP = B.oBdy.NV}]",
      "id": "05-002",
      "a": {
        "wkt": "LINESTRING (40 40, 50 130, 130 130)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              50,
              130
            ],
            [
              130,
              130
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F0F212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-3-3: the end point of a line touching the closing point of a polygon [dim(0){A.L.Bdy.EP = B.oBdy.CP}]",
      "id": "05-003",
      "a": {
        "wkt": "LINESTRING (40 230, 150 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              230
            ],
            [
              150,
              150
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-3-4: an entire LineString touching the boundary (at non-vertices) of a polygon [dim(1){A.L.Int.SP-EP = B.oBdy.NV-NV}]",
      "id": "05-004",
      "a": {
        "wkt": "LINESTRING (210 150, 330 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              210,
              150
            ],
            [
              330,
              150
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F1FF0F212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-3-5: the start portion of a LineString touching the boundary (at non-vertices) of a polygon [dim(1){A.L.Int.SP-V = B.oBdy.NV-NV}]",
      "id": "05-005",
      "a": {
        "wkt": "LINESTRING (200 150, 310 150, 360 220)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              200,
              150
            ],
            [
              310,
              150
            ],
            [
              360,
              220
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F11F00212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-3-6: the start portion and the end point of a LineString touching the boundary of a polygon [dim(1){A.L.Int.SP-V = B.oBdy.NV-NV}, dim(0){A.L.Bdy.EP = B.A.oBdy.V}]",
      "id": "05-006",
      "a": {
        "wkt": "LINESTRING (180 150, 250 150, 230 250, 370 250, 410 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              180,
              150
            ],
            [
              250,
              150
            ],
            [
              230,
              250
            ],
            [
              370,
              250
            ],
            [
              410,
              150
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F11F0F212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-3-7: the middle portion of a LineString touching the boundary (at non-vertices) of a polygon [dim(1){A.L.Int.V-V = B.oBdy.NV-NV}]",
      "id": "05-007",
      "a": {
        "wkt": "LINESTRING (210 210, 220 150, 320 150, 370 210)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              210,
              210
            ],
            [
              220,
              150
            ],
            [
              320,
              150
            ],
            [
              370,
              210
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F11FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-4-1: a line at non-vertex crossing non-vertex boundary of polygon [dim(0){A.L.Int.NV = B.A.oBdy.NV}, dim(1){A.L.Int.NV-EP = B.A.Int}]",
      "id": "05-008",
      "a": {
        "wkt": "LINESTRING (20 60, 150 60)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              60
            ],
            [
              150,
              60
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "1010F0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-4-2: a line at non-vertex crossing non-vertex boundaries of polygon twice [dim(0){A.L.Int.NV = B.A.oBdy.NV}, dim(1){A.L.Int.NV-NV = B.A.Int}]",
      "id": "05-009",
      "a": {
        "wkt": "LINESTRING (60 90, 310 180)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              90
            ],
            [
              310,
              180
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "101FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-4-3: a line at non-vertex crossing vertex boundary of polygon [dim(0){A.L.Int.NV = B.A.oBdy.V}, dim(1){A.L.Int.NV-EP = B.A.Int}]",
      "id": "05-010",
      "a": {
        "wkt": "LINESTRING (90 210, 210 90)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              210
            ],
            [
              210,
              90
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "1010F0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-4-4: a line at non-vertex crossing vertex boundaries of polygon twice [dim(0){A.L.Int.NV = B.A.oBdy.V}, dim(1){A.L.Int.NV-NV = B.A.Int}, dim(0){A.L.Int.NV = B.A.oBdy.CP}]",
      "id": "05-011",
      "a": {
        "wkt": "LINESTRING (290 10, 130 170)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              290,
              10
            ],
            [
              130,
              170
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "101FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-4-5: a line at vertex crossing non-vertex boundary of polygon [dim(0){A.L.Int.V = B.A.oBdy.NV}, dim(1){A.L.Int.V-EP = B.A.Int}]",
      "id": "05-012",
      "a": {
        "wkt": "LINESTRING (30 100, 100 100, 180 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              30,
              100
            ],
            [
              100,
              100
            ],
            [
              180,
              100
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "1010F0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-4-6: a line at vertex crossing non-vertex boundaries of polygon twice [dim(0){A.L.Int.V = B.A.oBdy.NV}, dim(1){A.L.Int.V-V = B.A.Int}]",
      "id": "05-013",
      "a": {
        "wkt": "LINESTRING (20 100, 100 100, 360 100, 410 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              100
            ],
            [
              100,
              100
            ],
            [
              360,
              100
            ],
            [
              410,
              100
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "101FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-4-7: a line at vertex crossing vertex boundary of polygon [dim(0){A.L.Int.V = B.A.oBdy.V}, dim(1){A.L.Int.V-EP = B.A.Int}]",
      "id": "05-014",
      "a": {
        "wkt": "LINESTRING (90 210, 150 150, 210 90)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              90,
              210
            ],
            [
              150,
              150
            ],
            [
              210,
              90
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "1010F0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-5-1: an entire line within a polygon [dim(1){A.L.Int.SP-EP = B.A.Int}]",
      "id": "05-015",
      "a": {
        "wkt": "LINESTRING (180 90, 280 120)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              180,
              90
            ],
            [
              280,
              120
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "1FF0FF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-5-2: a line within a polygon but the line's both ends touching the boundary of the polygon [dim(1){A.L.Int.SP-EP = B.A.Int}, dim(0){A.L.Bdy.SP = B.oBdy.NV}, dim(0){A.L.Bdy.EP = B.oBdy.NV}]",
      "id": "05-016",
      "a": {
        "wkt": "LINESTRING (70 70, 80 20)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              70,
              70
            ],
            [
              80,
              20
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "1FFF0F212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-5-3: a line within a polygon but the line's start point touching the boundary of the polygon [dim(1){A.L.Int.SP-EP = B.A.Int}, dim(0){A.L.Bdy.SP = B.oBdy.NV}]",
      "id": "05-017",
      "a": {
        "wkt": "LINESTRING (130 20, 150 60)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              130,
              20
            ],
            [
              150,
              60
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "1FF00F212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-5-4: a line within a polygon but the line's start point and middle portion touching the boundary of the polygon [dim(1){A.L.Int.SP-V = B.A.Int}, dim(1){A.L.Int.V-V = B.oBdy.NV-NV}, dim(1){A.L.Int.V-EP = B.A.Int}, dim(0){A.L.Bdy.SP = B.A.oBdy.NV}]",
      "id": "05-018",
      "a": {
        "wkt": "LINESTRING (70 70, 80 20, 140 20, 150 60)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              70,
              70
            ],
            [
              80,
              20
            ],
            [
              140,
              20
            ],
            [
              150,
              60
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "11F00F212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A-5-5: a line within a polygon but the line's middle portion touching the boundary of the polygon [dim(1){A.L.Int.SP-V = B.A.Int}, dim(1){A.L.Int.V-V = B.A.oBdy.NV-NV}, dim(1){A.L.Int.V-EP = B.A.Int}]",
      "id": "05-019",
      "a": {
        "wkt": "LINESTRING (170 50, 170 20, 240 20, 260 60)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              170,
              50
            ],
            [
              170,
              20
            ],
            [
              240,
              20
            ],
            [
              260,
              60
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "11F0FF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/Ah-2-1: a line outside a polygon [dim(1){A.L.Int.SP-EP = B.A.Ext}]",
      "id": "05-020",
      "a": {
        "wkt": "LINESTRING (50 100, 140 190, 280 190)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              50,
              100
            ],
            [
              140,
              190
            ],
            [
              280,
              190
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 330 120, 260 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                330,
                120
              ],
              [
                260,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/Ah-2-2: a line inside a polygon's hole [dim(1){A.L.Int.SP-EP = B.A.Ext.h}]",
      "id": "05-021",
      "a": {
        "wkt": "LINESTRING (140 60, 180 100, 290 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              140,
              60
            ],
            [
              180,
              100
            ],
            [
              290,
              100
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 330 120, 260 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                330,
                120
              ],
              [
                260,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/Ah-3-1: the start point of a line touching the inner boundary of a polygon [dim(0){A.L.Bdy.SP = B.A.iBdy.CP}, dim(1){A.L.Int.SP-EP = B.A.Ext.h}]",
      "id": "05-022",
      "a": {
        "wkt": "LINESTRING (170 120, 210 80, 270 80)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              170,
              120
            ],
            [
              210,
              80
            ],
            [
              270,
              80
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 330 120, 260 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                330,
                120
              ],
              [
                260,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/Ah-3-2: both ends of a line touching the inner boundary of a polygon [dim(0){A.L.Bdy.SP = B.A.iBdy.CP}, dim(1){A.L.Int.SP-EP = B.A.Ext.h}, dim(0){A.L.Bdy.SP = B.A.iBdy.CP}]",
      "id": "05-023",
      "a": {
        "wkt": "LINESTRING (170 120, 260 50)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              170,
              120
            ],
            [
              260,
              50
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 330 120, 260 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                330,
                120
              ],
              [
                260,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F0F212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/Ah-3-1: both ends of a line touching the inner boundary of a polygon [dim(0){A.L.Int.NV = B.A.Bdy.TP}]",
      "id": "05-024",
      "a": {
        "wkt": "LINESTRING (190 90, 190 270)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              190,
              90
            ],
            [
              190,
              270
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 360 20, 20 20, 190 190),(190 190, 280 50, 100 50, 190 190))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                360,
                20
              ],
              [
                20,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                190,
                190
              ],
              [
                280,
                50
              ],
              [
                100,
                50
              ],
              [
                190,
                190
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/Ah-3-2: a line at a non-vertex crossing the boundary of a polygon where the closing point of the hole touches the shell at a non-vertex [dim(0){A.L.Int.NV = B.A.Bdy.TP}]",
      "id": "05-025",
      "a": {
        "wkt": "LINESTRING (60 160, 150 70)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              160
            ],
            [
              150,
              70
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 360 20, 20 20, 190 190),(110 110, 250 100, 140 30, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                360,
                20
              ],
              [
                20,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                110,
                110
              ],
              [
                250,
                100
              ],
              [
                140,
                30
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/Ah-3-3: a line at a non-vertex crossing the boundary of a polygon where the hole at a vertex touches the shell at a non-vertex [dim(0){A.L.Int.NV = B.A.Bdy.TP}]",
      "id": "05-026",
      "a": {
        "wkt": "LINESTRING (60 160, 150 70)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              160
            ],
            [
              150,
              70
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 20 20, 360 20, 190 190),(250 100, 110 110, 140 30, 250 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                20,
                20
              ],
              [
                360,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                250,
                100
              ],
              [
                110,
                110
              ],
              [
                140,
                30
              ],
              [
                250,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/Ah-3-4: a line at a non-vertex crossing the boundary of a polygon where the hole at a vertex touches the shell at a vertex [dim(0){A.L.Int.NV = B.A.Bdy.TP}]",
      "id": "05-027",
      "a": {
        "wkt": "LINESTRING (60 160, 150 70)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              160
            ],
            [
              150,
              70
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 20 20, 360 20, 190 190),(250 100, 110 110, 140 30, 250 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                20,
                20
              ],
              [
                360,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                250,
                100
              ],
              [
                110,
                110
              ],
              [
                140,
                30
              ],
              [
                250,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/Ah-3-5: a line crossing polygon boundary where the closing point of the hole touches the shell at a vertex [dim(0){A.L.Int.V = B.A.Bdy.TP}]",
      "id": "05-028",
      "a": {
        "wkt": "LINESTRING (190 90, 190 190, 190 270)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              190,
              90
            ],
            [
              190,
              190
            ],
            [
              190,
              270
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 360 20, 20 20, 190 190),(190 190, 280 50, 100 50, 190 190))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                360,
                20
              ],
              [
                20,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                190,
                190
              ],
              [
                280,
                50
              ],
              [
                100,
                50
              ],
              [
                190,
                190
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/Ah-3-6: a line at a vertex crossing the boundary of a polygon where closing point of the hole touches the shell at a non-vertex [dim(0){A.L.Int.V = B.A.Bdy.TP}]",
      "id": "05-029",
      "a": {
        "wkt": "LINESTRING (60 160, 110 110, 150 70)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              160
            ],
            [
              110,
              110
            ],
            [
              150,
              70
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 360 20, 20 20, 190 190),(110 110, 250 100, 140 30, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                360,
                20
              ],
              [
                20,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                110,
                110
              ],
              [
                250,
                100
              ],
              [
                140,
                30
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/Ah-3-7: a line at a vertex crossing the boundary of a polygon where the hole at a vertex touches the shell at a non-vertex [dim(0){A.L.Int.V = B.A.Bdy.TP}]",
      "id": "05-030",
      "a": {
        "wkt": "LINESTRING (60 160, 110 110, 150 70)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              160
            ],
            [
              110,
              110
            ],
            [
              150,
              70
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 20 20, 360 20, 190 190),(250 100, 110 110, 140 30, 250 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                20,
                20
              ],
              [
                360,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                250,
                100
              ],
              [
                110,
                110
              ],
              [
                140,
                30
              ],
              [
                250,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/Ah-3-8: a line at a non-vertex crossing the boundary of a polygon where the hole at a vertex touches the shell at a vertex [dim(0){A.L.Int.V = B.A.Bdy.TP}]",
      "id": "05-031",
      "a": {
        "wkt": "LINESTRING (60 160, 110 110, 150 70)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              160
            ],
            [
              110,
              110
            ],
            [
              150,
              70
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 190, 110 110, 20 20, 360 20, 190 190),(250 100, 110 110, 140 30, 250 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                190
              ],
              [
                110,
                110
              ],
              [
                20,
                20
              ],
              [
                360,
                20
              ],
              [
                190,
                190
              ]
            ],
            [
              [
                250,
                100
              ],
              [
                110,
                110
              ],
              [
                140,
                30
              ],
              [
                250,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A2h-3-1: the start point a line touching the closing points of two connected holes in a polygon [dim(0){A.L.Int.SP = B.A.iBdy.TP}]",
      "id": "05-032",
      "a": {
        "wkt": "LINESTRING (130 110, 180 110, 190 60)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              130,
              110
            ],
            [
              180,
              110
            ],
            [
              190,
              60
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 200, 240 200, 240 20, 20 20, 20 200),(130 110, 60 180, 60 40, 130 110),(130 110, 200 40, 200 180, 130 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                200
              ],
              [
                240,
                200
              ],
              [
                240,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                200
              ]
            ],
            [
              [
                130,
                110
              ],
              [
                60,
                180
              ],
              [
                60,
                40
              ],
              [
                130,
                110
              ]
            ],
            [
              [
                130,
                110
              ],
              [
                200,
                40
              ],
              [
                200,
                180
              ],
              [
                130,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A2h-3-2: the interior (at a non-vertex) of a line touching the closing points of two connected holes in a polygon [dim(0){A.L.Int.NV = B.A.iBdy.TP}]",
      "id": "05-033",
      "a": {
        "wkt": "LINESTRING (80 110, 180 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              110
            ],
            [
              180,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 200, 240 200, 240 20, 20 20, 20 200),(130 110, 60 180, 60 40, 130 110),(130 110, 200 40, 200 180, 130 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                200
              ],
              [
                240,
                200
              ],
              [
                240,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                200
              ]
            ],
            [
              [
                130,
                110
              ],
              [
                60,
                180
              ],
              [
                60,
                40
              ],
              [
                130,
                110
              ]
            ],
            [
              [
                130,
                110
              ],
              [
                200,
                40
              ],
              [
                200,
                180
              ],
              [
                130,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A2h-3-3: the interior (at a non-vertex) of a line touching the closing point and at a vertex of two connected holes in a polygon [dim(0){A.L.Int.NV = B.A.iBdy1.TP}]",
      "id": "05-034",
      "a": {
        "wkt": "LINESTRING (80 110, 180 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              110
            ],
            [
              180,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 200, 20 20, 240 20, 240 200, 20 200),(60 180, 130 110, 60 40, 60 180),(130 110, 200 40, 200 180, 130 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                200
              ],
              [
                20,
                20
              ],
              [
                240,
                20
              ],
              [
                240,
                200
              ],
              [
                20,
                200
              ]
            ],
            [
              [
                60,
                180
              ],
              [
                130,
                110
              ],
              [
                60,
                40
              ],
              [
                60,
                180
              ]
            ],
            [
              [
                130,
                110
              ],
              [
                200,
                40
              ],
              [
                200,
                180
              ],
              [
                130,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A2h-3-4: the interior (at a non-vertex) of a line touching the closing point and at a non-vertex of two connected holes in a polygon [dim(0){A.L.Int.NV = B.A.iBdy.TP}]",
      "id": "05-035",
      "a": {
        "wkt": "LINESTRING (80 110, 170 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              110
            ],
            [
              170,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 200, 20 20, 240 20, 240 200, 20 200),(130 110, 60 40, 60 180, 130 110),(130 180, 130 40, 200 110, 130 180))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                200
              ],
              [
                20,
                20
              ],
              [
                240,
                20
              ],
              [
                240,
                200
              ],
              [
                20,
                200
              ]
            ],
            [
              [
                130,
                110
              ],
              [
                60,
                40
              ],
              [
                60,
                180
              ],
              [
                130,
                110
              ]
            ],
            [
              [
                130,
                180
              ],
              [
                130,
                40
              ],
              [
                200,
                110
              ],
              [
                130,
                180
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A2h-3-5: the start point a line touching the closing point and a non-vertex of two connected holes in a polygon [dim(0){A.L.Int.V = B.A.iBdy.TP}]",
      "id": "05-036",
      "a": {
        "wkt": "LINESTRING (80 110, 130 110, 170 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              110
            ],
            [
              130,
              110
            ],
            [
              170,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 200, 20 20, 240 20, 240 200, 20 200),(130 110, 60 40, 60 180, 130 110),(130 180, 130 40, 200 110, 130 180))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                200
              ],
              [
                20,
                20
              ],
              [
                240,
                20
              ],
              [
                240,
                200
              ],
              [
                20,
                200
              ]
            ],
            [
              [
                130,
                110
              ],
              [
                60,
                40
              ],
              [
                60,
                180
              ],
              [
                130,
                110
              ]
            ],
            [
              [
                130,
                180
              ],
              [
                130,
                40
              ],
              [
                200,
                110
              ],
              [
                130,
                180
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A2h-3-6: the interior (at a vertex) of a line touching the closing points of two connected holes in a polygon [dim(0){A.L.Int.V = B.A.iBdy.TP}]",
      "id": "05-037",
      "a": {
        "wkt": "LINESTRING (80 110, 130 110, 180 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              110
            ],
            [
              130,
              110
            ],
            [
              180,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 200, 240 200, 240 20, 20 20, 20 200),(130 110, 60 180, 60 40, 130 110),(130 110, 200 40, 200 180, 130 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                200
              ],
              [
                240,
                200
              ],
              [
                240,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                200
              ]
            ],
            [
              [
                130,
                110
              ],
              [
                60,
                180
              ],
              [
                60,
                40
              ],
              [
                130,
                110
              ]
            ],
            [
              [
                130,
                110
              ],
              [
                200,
                40
              ],
              [
                200,
                180
              ],
              [
                130,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A2h-3-7: the interior (at a vertex) of a line touching the closing point and at a vertex of two connected holes in a polygon [dim(0){A.L.Int.V = B.A.iBdy1.TP}]",
      "id": "05-038",
      "a": {
        "wkt": "LINESTRING (80 110, 130 110, 180 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              110
            ],
            [
              130,
              110
            ],
            [
              180,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 200, 20 20, 240 20, 240 200, 20 200),(60 180, 130 110, 60 40, 60 180),(130 110, 200 40, 200 180, 130 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                200
              ],
              [
                20,
                20
              ],
              [
                240,
                20
              ],
              [
                240,
                200
              ],
              [
                20,
                200
              ]
            ],
            [
              [
                60,
                180
              ],
              [
                130,
                110
              ],
              [
                60,
                40
              ],
              [
                60,
                180
              ]
            ],
            [
              [
                130,
                110
              ],
              [
                200,
                40
              ],
              [
                200,
                180
              ],
              [
                130,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/A2h-3-8: the interior (at a vertex) of a line touching the closing point and at a non-vertex of two connected holes in a polygon [dim(0){A.L.Int.V = B.A.iBdy.TP}]",
      "id": "05-039",
      "a": {
        "wkt": "LINESTRING (80 110, 130 110, 170 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              110
            ],
            [
              130,
              110
            ],
            [
              170,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 200, 20 20, 240 20, 240 200, 20 200),(130 110, 60 40, 60 180, 130 110),(130 180, 130 40, 200 110, 130 180))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                200
              ],
              [
                20,
                20
              ],
              [
                240,
                20
              ],
              [
                240,
                200
              ],
              [
                20,
                200
              ]
            ],
            [
              [
                130,
                110
              ],
              [
                60,
                40
              ],
              [
                60,
                180
              ],
              [
                130,
                110
              ]
            ],
            [
              [
                130,
                180
              ],
              [
                130,
                40
              ],
              [
                200,
                110
              ],
              [
                130,
                180
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/mA-4-1: a line intersecting the interior and exterior of MultiPolygon [dim(1){A.L.Int.SP-NV = B.2A1.Int}, dim (1){A.L.Int.NV-EP = B.2A2.Int}]",
      "id": "05-040",
      "a": {
        "wkt": "LINESTRING (160 70, 320 230)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              160,
              70
            ],
            [
              320,
              230
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((140 110, 260 110, 170 20, 50 20, 140 110)),((300 270, 420 270, 340 190, 220 190, 300 270)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  140,
                  110
                ],
                [
                  260,
                  110
                ],
                [
                  170,
                  20
                ],
                [
                  50,
                  20
                ],
                [
                  140,
                  110
                ]
              ]
            ],
            [
              [
                [
                  300,
                  270
                ],
                [
                  420,
                  270
                ],
                [
                  340,
                  190
                ],
                [
                  220,
                  190
                ],
                [
                  300,
                  270
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "1010FF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/mA-4-2: a line intersecting the interior and exterior of MultiPolygon [dim(1){A.L.Int.SP-V = B.2A1.Int}, dim (1){A.L.Int.V-EP = B.2A2.Int}]",
      "id": "05-041",
      "a": {
        "wkt": "LINESTRING (160 70, 200 110, 280 190, 320 230)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              160,
              70
            ],
            [
              200,
              110
            ],
            [
              280,
              190
            ],
            [
              320,
              230
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((140 110, 260 110, 170 20, 50 20, 140 110)),((300 270, 420 270, 340 190, 220 190, 300 270)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  140,
                  110
                ],
                [
                  260,
                  110
                ],
                [
                  170,
                  20
                ],
                [
                  50,
                  20
                ],
                [
                  140,
                  110
                ]
              ]
            ],
            [
              [
                [
                  300,
                  270
                ],
                [
                  420,
                  270
                ],
                [
                  340,
                  190
                ],
                [
                  220,
                  190
                ],
                [
                  300,
                  270
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "1010FF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "L/mA-5-1: a line within two connected polygons [dim(1){A.L.Int = B.2A.Int}, dim(0){A.L.Int.NV = B.2A.Bdy.TP]",
      "id": "05-042",
      "a": {
        "wkt": "LINESTRING (70 50, 70 150)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              70,
              50
            ],
            [
              70,
              150
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((0 0, 0 100, 140 100, 140 0, 0 0)),((20 170, 70 100, 130 170, 20 170)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  0,
                  0
                ],
                [
                  0,
                  100
                ],
                [
                  140,
                  100
                ],
                [
                  140,
                  0
                ],
                [
                  0,
                  0
                ]
              ]
            ],
            [
              [
                [
                  20,
                  170
                ],
                [
                  70,
                  100
                ],
                [
                  130,
                  170
                ],
                [
                  20,
                  170
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "10F0FF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "RL/A-3-1: a LinearRing touching a polygon's closing point [dim(0){A.RL.Int.CP = B.A.Bdy.CP}]",
      "id": "05-043",
      "a": {
        "wkt": "LINESTRING (110 110, 20 200, 200 200, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              20,
              200
            ],
            [
              200,
              200
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 200 20, 110 110, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                200,
                20
              ],
              [
                110,
                110
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FFF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "RL/A-3-2: a LinearRing touching a polygon's boundary at a non-vertex [dim(0){A.RL.Int.CP = B.A.Bdy.NV}]",
      "id": "05-044",
      "a": {
        "wkt": "LINESTRING (150 70, 160 110, 200 60, 150 70)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              150,
              70
            ],
            [
              160,
              110
            ],
            [
              200,
              60
            ],
            [
              150,
              70
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 200 20, 110 110, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                200,
                20
              ],
              [
                110,
                110
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FFF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "RL/A-3-3: a LinearRing touching a polygon's boundary at a non-vertex [dim(0){A.RL.Int.CP = B.A.iBdy.NV}]",
      "id": "05-045",
      "a": {
        "wkt": "LINESTRING (80 60, 120 40, 120 70, 80 60)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              60
            ],
            [
              120,
              40
            ],
            [
              120,
              70
            ],
            [
              80,
              60
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110),(110 90, 50 30, 170 30, 110 90))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ],
            [
              [
                110,
                90
              ],
              [
                50,
                30
              ],
              [
                170,
                30
              ],
              [
                110,
                90
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FFF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "RL/A-3-4: a LinearRing on the boundary of a polygon [dim(1){A.RL.Int.SP-EP = B.A.Bdy.SP-EP}]",
      "id": "05-046",
      "a": {
        "wkt": "LINESTRING (20 20, 200 20, 110 110, 20 20)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              200,
              20
            ],
            [
              110,
              110
            ],
            [
              20,
              20
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 200 20, 110 110, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                200,
                20
              ],
              [
                110,
                110
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F1FFFF2F2"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "RL/A-3-5: a LinearRing on the inner boundary of a polygon [dim(1){A.RL.Int.SP-EP = B.A.iBdy.SP-EP}]",
      "id": "05-047",
      "a": {
        "wkt": "LINESTRING (110 90, 170 30, 50 30, 110 90)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              90
            ],
            [
              170,
              30
            ],
            [
              50,
              30
            ],
            [
              110,
              90
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110),(110 90, 50 30, 170 30, 110 90))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ],
            [
              [
                110,
                90
              ],
              [
                50,
                30
              ],
              [
                170,
                30
              ],
              [
                110,
                90
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F1FFFF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "RL/A-3-6: a LinearRing on the inner boundary of a polygon [dim(1){A.RL.Int.SP-V = B.A.oBdy.SP-NV}]",
      "id": "05-048",
      "a": {
        "wkt": "LINESTRING (110 110, 170 50, 170 110, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              170,
              50
            ],
            [
              170,
              110
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110),(110 90, 50 30, 170 30, 110 90))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ],
            [
              [
                110,
                90
              ],
              [
                50,
                30
              ],
              [
                170,
                30
              ],
              [
                110,
                90
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F11FFF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "RL/A-3-7: a LinearRing on the inner boundary of a polygon [dim(1){A.RL.Int.SP-V = B.A.iBdy.SP-NV}]",
      "id": "05-049",
      "a": {
        "wkt": "LINESTRING (110 90, 70 50, 130 50, 110 90)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              90
            ],
            [
              70,
              50
            ],
            [
              130,
              50
            ],
            [
              110,
              90
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110),(110 90, 50 30, 170 30, 110 90))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ],
            [
              [
                110,
                90
              ],
              [
                50,
                30
              ],
              [
                170,
                30
              ],
              [
                110,
                90
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F11FFF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "RL/A-4-1: a LinearRing crossing a polygon [dim(1){A.RL.Int.CP-NV = B.A.Int}, dim(0){A.L.Int.NV = B.A.Bdy.NV}]",
      "id": "05-050",
      "a": {
        "wkt": "LINESTRING (110 60, 20 150, 200 150, 110 60)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              60
            ],
            [
              20,
              150
            ],
            [
              200,
              150
            ],
            [
              110,
              60
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 200 20, 110 110, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                200,
                20
              ],
              [
                110,
                110
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "101FFF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "RL/A-4-2: a LinearRing crossing a polygon with a hole [dim(1){A.RL.Int.NV-NV = B.A.Int}, dim(0){A.RL.Int.NV = B.A.oBdy.CP}, dim(0){A.RL.Int.NV = B.A.iBdy.CP}, dim(0){A.RL.Int.NV = B.A.oBdy.NV}, dim(0){A.RL.Int.NV = B.A.iBdy.NV}]",
      "id": "05-051",
      "a": {
        "wkt": "LINESTRING (110 130, 110 70, 200 100, 110 130)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              130
            ],
            [
              110,
              70
            ],
            [
              200,
              100
            ],
            [
              110,
              130
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110),(110 90, 50 30, 170 30, 110 90))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ],
            [
              [
                110,
                90
              ],
              [
                50,
                30
              ],
              [
                170,
                30
              ],
              [
                110,
                90
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "101FFF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "RL/A-5-1: a LinearRing within a polygon [dim(1){A.RL.Int.SP-EP = B.A.Int}]",
      "id": "05-052",
      "a": {
        "wkt": "LINESTRING (110 90, 160 40, 60 40, 110 90)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              90
            ],
            [
              160,
              40
            ],
            [
              60,
              40
            ],
            [
              110,
              90
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 200 20, 110 110, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                200,
                20
              ],
              [
                110,
                110
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "1FFFFF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "RL/A-5-2: a LinearRing within a polygon with a hole [dim(1){A.RL.Int.SP-EP = B.A.Int}]",
      "id": "05-053",
      "a": {
        "wkt": "LINESTRING (110 100, 40 30, 180 30, 110 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              100
            ],
            [
              40,
              30
            ],
            [
              180,
              30
            ],
            [
              110,
              100
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110),(110 90, 60 40, 160 40, 110 90))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ],
            [
              [
                110,
                90
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                110,
                90
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "1FFFFF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "RL/A-5-3: a LinearRing within a polygon with a hole [dim(1){A.RL.Int.SP-EP = B.A.Int}, dim(0){A.L.Int.CP = B.A.oBdy.CP}]",
      "id": "05-054",
      "a": {
        "wkt": "LINESTRING (110 110, 180 30, 40 30, 110 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              180,
              30
            ],
            [
              40,
              30
            ],
            [
              110,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110),(110 90, 60 40, 160 40, 110 90))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ],
            [
              [
                110,
                90
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                110,
                90
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "10FFFF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "RL/A-5-4: a LinearRing within a polygon with a hole [dim(1){A.RL.Int.SP-EP = B.A.Int}, dim(0){A.RL.Int.CP = B.A.iBdy.CP}]",
      "id": "05-055",
      "a": {
        "wkt": "LINESTRING (110 90, 180 30, 40 30, 110 90)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              90
            ],
            [
              180,
              30
            ],
            [
              40,
              30
            ],
            [
              110,
              90
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110),(110 90, 60 40, 160 40, 110 90))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ],
            [
              [
                110,
                90
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                110,
                90
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "10FFFF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "RL/A-5-5: a LinearRing within a polygon with a hole [dim(1){A.RL.Int.SP-EP = B.A.Int}, dim(1){A.RL.Int.SP-NV = B.A.Bdy.iBdy.SP-V}]",
      "id": "05-056",
      "a": {
        "wkt": "LINESTRING (110 90, 50 30, 180 30, 110 90)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              90
            ],
            [
              50,
              30
            ],
            [
              180,
              30
            ],
            [
              110,
              90
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110),(110 90, 60 40, 160 40, 110 90))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ],
            [
              [
                110,
                90
              ],
              [
                60,
                40
              ],
              [
                160,
                40
              ],
              [
                110,
                90
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "11FFFF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "nsL/A-3-1: a non-simple LineString touching a polygon [dim(0){A.nsL.Bdy.SP = B.A.Bdy.CP}]",
      "id": "05-057",
      "a": {
        "wkt": "LINESTRING (110 110, 200 200, 200 110, 110 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              200,
              200
            ],
            [
              200,
              110
            ],
            [
              110,
              200
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "nsL/A-3-2: a non-simple LineString touching a polygon [dim(0){A.nsL.Bdy.SPb = B.A.Bdy.CP}]",
      "id": "05-058",
      "a": {
        "wkt": "LINESTRING (110 110, 200 200, 110 110, 20 200, 20 110, 200 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              200,
              200
            ],
            [
              110,
              110
            ],
            [
              20,
              200
            ],
            [
              20,
              110
            ],
            [
              200,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "nsL/A-3-3: a non-simple LineString touching a polygon [dim(0){A.nsL.Bdy.SPo = B.A.Bdy.CP}]",
      "id": "05-059",
      "a": {
        "wkt": "LINESTRING (110 110, 20 110, 200 110, 50 110, 110 170)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              20,
              110
            ],
            [
              200,
              110
            ],
            [
              50,
              110
            ],
            [
              110,
              170
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "nsL/A-3-4: a non-simple LineString touching a polygon [dim(0){A.nsL.Bdy.SPx = B.A.Bdy.CP}]",
      "id": "05-060",
      "a": {
        "wkt": "LINESTRING (110 110, 20 200, 110 200, 110 110, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              20,
              200
            ],
            [
              110,
              200
            ],
            [
              110,
              110
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "nsL/A-3-5: a non-simple LineString touching a polygon [dim(1){A.nsL.Int.SPb-Vo = B.A.Bdy.SP-NV}]",
      "id": "05-061",
      "a": {
        "wkt": "LINESTRING (110 110, 170 50, 20 200, 20 110, 200 110)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              170,
              50
            ],
            [
              20,
              200
            ],
            [
              20,
              110
            ],
            [
              200,
              110
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F11F00212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "nsL/A-4-1: a non-simple LineString crossing a polygon [dim(1){A.nsL.Int.V-V-NV = B.A.Int}, dim(1){A.nsL.SPx-V = B.A.Bdy.SP-NV}]",
      "id": "05-062",
      "a": {
        "wkt": "LINESTRING (110 110, 180 40, 110 40, 110 180)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              180,
              40
            ],
            [
              110,
              40
            ],
            [
              110,
              180
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "111F00212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "nsL/A-5-1: a non-simple LineString within a polygon [dim(1){A.nsL.Int.SPx-EP = B.A.Int}]",
      "id": "05-063",
      "a": {
        "wkt": "LINESTRING (110 60, 50 30, 170 30, 90 70)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              60
            ],
            [
              50,
              30
            ],
            [
              170,
              30
            ],
            [
              90,
              70
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "1FF0FF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "nsL/A-5-2: a non-simple LineString within a polygon [dim(1){A.nsL.Int.SPx-EP = B.A.Int}, dim(1){A.nsL.Int.SPx-V = B.A.Bdy.SP-NV}]",
      "id": "05-064",
      "a": {
        "wkt": "LINESTRING (110 110, 180 40, 110 40, 110 110, 70 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              110
            ],
            [
              180,
              40
            ],
            [
              110,
              40
            ],
            [
              110,
              110
            ],
            [
              70,
              40
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "11F00F212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "nsL/Ah: the self-crossing point of a non-simple LineString touching the closing point of the inner boundary of a polygon [dim(0){A.nsL.Int.V = B.A.iBdy.CP}]",
      "id": "05-065",
      "a": {
        "wkt": "LINESTRING (230 70, 170 120, 190 60, 140 60, 170 120, 270 90)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              230,
              70
            ],
            [
              170,
              120
            ],
            [
              190,
              60
            ],
            [
              140,
              60
            ],
            [
              170,
              120
            ],
            [
              270,
              90
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 330 120, 260 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                330,
                120
              ],
              [
                260,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F01FF0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "mL/A-3-1: MultiLineString touching a polygon's closing point [dim(0){A.mL.Bdy.SPb = B.A.Bdy.CP}]",
      "id": "05-066",
      "a": {
        "wkt": "MULTILINESTRING ((20 110, 200 110),(200 200, 110 110, 20 210, 110 110))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                110
              ],
              [
                200,
                110
              ]
            ],
            [
              [
                200,
                200
              ],
              [
                110,
                110
              ],
              [
                20,
                210
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "mL/A-3-2: MultiLineString touching a polygon's closing point [dim(0){A.mL.Bdy.SPo = B.A.Bdy.CP}]",
      "id": "05-067",
      "a": {
        "wkt": "MULTILINESTRING ((20 110, 200 110),(60 180, 60 110, 160 110, 110 110))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                110
              ],
              [
                200,
                110
              ]
            ],
            [
              [
                60,
                180
              ],
              [
                60,
                110
              ],
              [
                160,
                110
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "mL/A-3-3: MultiLineString touching a polygon's closing point [dim(0){A.mL.Bdy.SPx = B.A.Bdy.CP}]",
      "id": "05-068",
      "a": {
        "wkt": "MULTILINESTRING ((20 110, 200 110),(200 200, 110 110, 20 200, 110 200, 110 110))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                110
              ],
              [
                200,
                110
              ]
            ],
            [
              [
                200,
                200
              ],
              [
                110,
                110
              ],
              [
                20,
                200
              ],
              [
                110,
                200
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "mL/A-4-1: MultiLineString crossing a polygon [dim(1){A.mL.Int.SP-NVb = B.A.Int}, dim(0){A.mL.Int.NVb = B.A.Bdy.CP}]",
      "id": "05-069",
      "a": {
        "wkt": "MULTILINESTRING ((20 110, 200 110),(110 50, 110 170, 110 70, 110 150, 200 150))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                110
              ],
              [
                200,
                110
              ]
            ],
            [
              [
                110,
                50
              ],
              [
                110,
                170
              ],
              [
                110,
                70
              ],
              [
                110,
                150
              ],
              [
                200,
                150
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "1010F0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "mL/A-4-2: MultiLineString crossing a polygon [dim(1){A.mL.Int.SP-NVo = B.A.Int}, dim(0){A.mL.Int.NVo = B.A.Bdy.CP}]",
      "id": "05-070",
      "a": {
        "wkt": "MULTILINESTRING ((20 110, 200 110),(50 110, 170 110, 110 170, 110 50, 110 170, 110 50))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                110
              ],
              [
                200,
                110
              ]
            ],
            [
              [
                50,
                110
              ],
              [
                170,
                110
              ],
              [
                110,
                170
              ],
              [
                110,
                50
              ],
              [
                110,
                170
              ],
              [
                110,
                50
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "1010F0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "mL/A-4-3: MultiLineString crossing a polygon [dim(1){A.mL.Int.SP-NVx = B.A.Int}, dim(0){A.mL.Int.NVx = B.A.Bdy.CP}]",
      "id": "05-071",
      "a": {
        "wkt": "MULTILINESTRING ((20 110, 200 110),(110 60, 110 160, 200 160))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                110
              ],
              [
                200,
                110
              ]
            ],
            [
              [
                110,
                60
              ],
              [
                110,
                160
              ],
              [
                200,
                160
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "1010F0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "mL/A-4-4: MultiLineString crossing a polygon [dim(1){A.mL.Int.Vb-Vb = B.A.Int}, dim(0){A.mL.Int.Vb = B.A.oBdy.CP}, dim(0){A.mL.Int.Vb = B.A.iBdy.CP}]",
      "id": "05-072",
      "a": {
        "wkt": "MULTILINESTRING ((20 110, 200 110),(110 60, 110 160, 200 160))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                110
              ],
              [
                200,
                110
              ]
            ],
            [
              [
                110,
                60
              ],
              [
                110,
                160
              ],
              [
                200,
                160
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "1010F0212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "mL/A-5-1: MultiLineString within a polygon [dim(1){A.mL.Int.SP-EP = B.A.Int}]",
      "id": "05-073",
      "a": {
        "wkt": "MULTILINESTRING ((110 100, 40 30, 180 30),(170 30, 110 90, 50 30))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                110,
                100
              ],
              [
                40,
                30
              ],
              [
                180,
                30
              ]
            ],
            [
              [
                170,
                30
              ],
              [
                110,
                90
              ],
              [
                50,
                30
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "1FF0FF212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "mL/A-5-2: MultiLineString within a polygon [dim(1){A.mL.Int.SP-EP = B.A.Int}]",
      "id": "05-074",
      "a": {
        "wkt": "MULTILINESTRING ((110 110, 60 40, 70 20, 150 20, 170 40),(180 30, 40 30, 110 80))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                60,
                40
              ],
              [
                70,
                20
              ],
              [
                150,
                20
              ],
              [
                170,
                40
              ]
            ],
            [
              [
                180,
                30
              ],
              [
                40,
                30
              ],
              [
                110,
                80
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 110, 200 20, 20 20, 110 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                110
              ],
              [
                200,
                20
              ],
              [
                20,
                20
              ],
              [
                110,
                110
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "11F00F212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "mL/mA-3-1: MultiLineString within a MultiPolygon [dim(0){A.mL.Bdy.SPb = B.mA.Bdy.TP}]",
      "id": "05-075",
      "a": {
        "wkt": "MULTILINESTRING ((20 110, 200 110, 200 160),(110 110, 200 110, 200 70, 20 150))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                110
              ],
              [
                200,
                110
              ],
              [
                200,
                160
              ]
            ],
            [
              [
                110,
                110
              ],
              [
                200,
                110
              ],
              [
                200,
                70
              ],
              [
                20,
                150
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((110 110, 20 20, 200 20, 110 110)),((110 110, 20 200, 200 200, 110 110)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  110,
                  110
                ],
                [
                  20,
                  20
                ],
                [
                  200,
                  20
                ],
                [
                  110,
                  110
                ]
              ]
            ],
            [
              [
                [
                  110,
                  110
                ],
                [
                  20,
                  200
                ],
                [
                  200,
                  200
                ],
                [
                  110,
                  110
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "mL/mA-3-2: MultiLineString within a MultiPolygon [dim(0){A.mL.Bdy.SPo = B.mA.Bdy.TP}]",
      "id": "05-076",
      "a": {
        "wkt": "MULTILINESTRING ((20 160, 70 110, 150 110, 200 160),(110 110, 20 110, 50 80, 70 110, 200 110))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                160
              ],
              [
                70,
                110
              ],
              [
                150,
                110
              ],
              [
                200,
                160
              ]
            ],
            [
              [
                110,
                110
              ],
              [
                20,
                110
              ],
              [
                50,
                80
              ],
              [
                70,
                110
              ],
              [
                200,
                110
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((110 110, 20 20, 200 20, 110 110)),((110 110, 20 200, 200 200, 110 110)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  110,
                  110
                ],
                [
                  20,
                  20
                ],
                [
                  200,
                  20
                ],
                [
                  110,
                  110
                ]
              ]
            ],
            [
              [
                [
                  110,
                  110
                ],
                [
                  20,
                  200
                ],
                [
                  200,
                  200
                ],
                [
                  110,
                  110
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00212"
      }
    },
    {
      "group": "TestRelateLA",
      "category": "relate",
      "title": "mL/mA-3-3: MultiLineString within a MultiPolygon [dim(0){A.mL.Bdy.SPx = B.mA.Bdy.TP}]",
      "id": "05-077",
      "a": {
        "wkt": "MULTILINESTRING ((20 110, 200 110),(110 110, 20 170, 20 130, 200 90))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                20,
                110
              ],
              [
                200,
                110
              ]
            ],
            [
              [
                110,
                110
              ],
              [
                20,
                170
              ],
              [
                20,
                130
              ],
              [
                200,
                90
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((110 110, 20 20, 200 20, 110 110)),((110 110, 20 200, 200 200, 110 110)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  110,
                  110
                ],
                [
                  20,
                  20
                ],
                [
                  200,
                  20
                ],
                [
                  110,
                  110
                ]
              ]
            ],
            [
              [
                [
                  110,
                  110
                ],
                [
                  20,
                  200
                ],
                [
                  200,
                  200
                ],
                [
                  110,
                  110
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F00212"
      }
    },
    {
      "group": "TestRelateLC",
      "category": "relate",
      "title": "LC - topographically equal with no boundary",
      "id": "06-001",
      "a": {
        "wkt": "LINESTRING (0 0, 0 50, 50 50, 50 0, 0 0)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              0,
              0
            ],
            [
              0,
              50
            ],
            [
              50,
              50
            ],
            [
              50,
              0
            ],
            [
              0,
              0
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((0 0, 0 50),(0 50, 50 50),(50 50, 50 0),(50 0, 0 0))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                0,
                0
              ],
              [
                0,
                50
              ]
            ],
            [
              [
                0,
                50
              ],
              [
                50,
                50
              ]
            ],
            [
              [
                50,
                50
              ],
              [
                50,
                0
              ]
            ],
            [
              [
                50,
                0
              ],
              [
                0,
                0
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "1FFFFFFF2"
      }
    },
    {
      "group": "TestRelateLC",
      "category": "relate",
      "title": "LC - intersection (containment) along mod-2 A-Int line segment",
      "id": "06-002",
      "a": {
        "wkt": "LINESTRING (40 180, 140 180)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              180
            ],
            [
              140,
              180
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((20 320, 180 320, 180 180, 20 180, 20 320)),((20 180, 20 80, 180 80, 180 180, 20 180)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  20,
                  320
                ],
                [
                  180,
                  320
                ],
                [
                  180,
                  180
                ],
                [
                  20,
                  180
                ],
                [
                  20,
                  320
                ]
              ]
            ],
            [
              [
                [
                  20,
                  180
                ],
                [
                  20,
                  80
                ],
                [
                  180,
                  80
                ],
                [
                  180,
                  180
                ],
                [
                  20,
                  180
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "1FF0FF212"
      }
    },
    {
      "group": "TestRelateLC",
      "category": "relate",
      "title": "LC - intersection (overlap) along mod-2 A-Int line segment",
      "id": "06-003",
      "a": {
        "wkt": "LINESTRING (40 180, 140 180)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              180
            ],
            [
              140,
              180
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((20 320, 180 320, 180 180, 20 180, 20 320)),((60 180, 60 80, 180 80, 180 180, 60 180)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  20,
                  320
                ],
                [
                  180,
                  320
                ],
                [
                  180,
                  180
                ],
                [
                  20,
                  180
                ],
                [
                  20,
                  320
                ]
              ]
            ],
            [
              [
                [
                  60,
                  180
                ],
                [
                  60,
                  80
                ],
                [
                  180,
                  80
                ],
                [
                  180,
                  180
                ],
                [
                  60,
                  180
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "11F00F212"
      }
    },
    {
      "group": "TestRelateLC",
      "category": "relate",
      "title": "LC - equal with boundary intersection",
      "id": "06-004",
      "a": {
        "wkt": "LINESTRING (0 0, 60 0, 60 60, 60 0, 120 0)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              0,
              0
            ],
            [
              60,
              0
            ],
            [
              60,
              60
            ],
            [
              60,
              0
            ],
            [
              120,
              0
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((0 0, 60 0),(60 0, 120 0),(60 0, 60 60))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                0,
                0
              ],
              [
                60,
                0
              ]
            ],
            [
              [
                60,
                0
              ],
              [
                120,
                0
              ]
            ],
            [
              [
                60,
                0
              ],
              [
                60,
                60
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "10FF0FFF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-1-1: same polygons [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Bdy.SP-EP}]",
      "id": "07-001",
      "a": {
        "wkt": "POLYGON ((20 20, 20 100, 120 100, 140 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                100
              ],
              [
                120,
                100
              ],
              [
                140,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 20 100, 120 100, 140 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                100
              ],
              [
                120,
                100
              ],
              [
                140,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "2FFF1FFF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-1-2: same polygons with reverse sequence of points [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Bdy.EP-SP}]",
      "id": "07-002",
      "a": {
        "wkt": "POLYGON ((20 20, 20 100, 120 100, 140 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                100
              ],
              [
                120,
                100
              ],
              [
                140,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 140 20, 120 100, 20 100, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                140,
                20
              ],
              [
                120,
                100
              ],
              [
                20,
                100
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "2FFF1FFF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-1-3: same polygons with different sequence of points [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Bdy.SP-EP}]",
      "id": "07-003",
      "a": {
        "wkt": "POLYGON ((20 20, 20 100, 120 100, 140 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                100
              ],
              [
                120,
                100
              ],
              [
                140,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((120 100, 140 20, 20 20, 20 100, 120 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                120,
                100
              ],
              [
                140,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                100
              ],
              [
                120,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "2FFF1FFF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-1-4: same polygons with different number of points [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Bdy.SP-EP}]",
      "id": "07-004",
      "a": {
        "wkt": "POLYGON ((20 20, 20 100, 120 100, 140 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                100
              ],
              [
                120,
                100
              ],
              [
                140,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 100, 60 100, 120 100, 140 20, 80 20, 20 20, 20 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                100
              ],
              [
                60,
                100
              ],
              [
                120,
                100
              ],
              [
                140,
                20
              ],
              [
                80,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "2FFF1FFF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-2: different polygons [dim(2){A.A.Int = B.A.Ext}]",
      "id": "07-005",
      "a": {
        "wkt": "POLYGON ((0 0, 80 0, 80 80, 0 80, 0 0))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                0,
                0
              ],
              [
                80,
                0
              ],
              [
                80,
                80
              ],
              [
                0,
                80
              ],
              [
                0,
                0
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((100 200, 100 140, 180 140, 180 200, 100 200))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                200
              ],
              [
                100,
                140
              ],
              [
                180,
                140
              ],
              [
                180,
                200
              ],
              [
                100,
                200
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2FF1212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-1-1: the closing point of a polygon touching the closing point of another polygon [dim(0){A.A.Bdy.CP = B.A.Bdy.CP}]",
      "id": "07-006",
      "a": {
        "wkt": "POLYGON ((140 120, 160 20, 20 20, 20 120, 140 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                120
              ],
              [
                160,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                120
              ],
              [
                140,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((140 120, 140 200, 240 200, 240 120, 140 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                120
              ],
              [
                140,
                200
              ],
              [
                240,
                200
              ],
              [
                240,
                120
              ],
              [
                140,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-1-2: the closing point of a polygon touching the boundary (at a non-vertex) of another polygon [dim(0){A.A.Bdy.CP = B.A.Bdy.NV}]",
      "id": "07-007",
      "a": {
        "wkt": "POLYGON ((140 120, 160 20, 20 20, 20 120, 140 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                120
              ],
              [
                160,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                120
              ],
              [
                140,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((80 180, 140 260, 260 200, 200 60, 80 180))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                80,
                180
              ],
              [
                140,
                260
              ],
              [
                260,
                200
              ],
              [
                200,
                60
              ],
              [
                80,
                180
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-1-3: the closing point of a polygon touching the boundary (at a vertex) of another polygon [dim(0){A.A.Bdy.CP = B.A.Bdy.V}]",
      "id": "07-008",
      "a": {
        "wkt": "POLYGON ((140 120, 160 20, 20 20, 20 120, 140 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                120
              ],
              [
                160,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                120
              ],
              [
                140,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((240 80, 140 120, 180 240, 280 200, 240 80))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                240,
                80
              ],
              [
                140,
                120
              ],
              [
                180,
                240
              ],
              [
                280,
                200
              ],
              [
                240,
                80
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-1-4: the boundary (at a non-vertex) of a polygon touching the closing point of another polygon [dim(0){A.A.Bdy.NV = B.A.Bdy.CP}]",
      "id": "07-009",
      "a": {
        "wkt": "POLYGON ((140 160, 20 20, 270 20, 150 160, 230 40, 60 40, 140 160))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                160
              ],
              [
                20,
                20
              ],
              [
                270,
                20
              ],
              [
                150,
                160
              ],
              [
                230,
                40
              ],
              [
                60,
                40
              ],
              [
                140,
                160
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((140 40, 180 80, 120 100, 140 40))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                40
              ],
              [
                180,
                80
              ],
              [
                120,
                100
              ],
              [
                140,
                40
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-1-5: the boundary (at a non-vertex) of a polygon touching the boundary (at a vertex) of another polygon [dim(0){A.A.Bdy.NV = B.A.Bdy.V}]",
      "id": "07-010",
      "a": {
        "wkt": "POLYGON ((140 160, 20 20, 270 20, 150 160, 230 40, 60 40, 140 160))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                160
              ],
              [
                20,
                20
              ],
              [
                270,
                20
              ],
              [
                150,
                160
              ],
              [
                230,
                40
              ],
              [
                60,
                40
              ],
              [
                140,
                160
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((120 100, 180 80, 130 40, 120 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                120,
                100
              ],
              [
                180,
                80
              ],
              [
                130,
                40
              ],
              [
                120,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-1-6: the boundary (at a vertex) of a polygon touching the boundary (at a non-vertex) of another polygon [dim(0){A.A.Bdy.V = B.A.Bdy.NV}]",
      "id": "07-011",
      "a": {
        "wkt": "POLYGON ((20 20, 180 20, 140 140, 20 140, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                180,
                20
              ],
              [
                140,
                140
              ],
              [
                20,
                140
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((180 100, 80 200, 180 280, 260 200, 180 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                180,
                100
              ],
              [
                80,
                200
              ],
              [
                180,
                280
              ],
              [
                260,
                200
              ],
              [
                180,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-1-7: the boundary (at a vertex) of a polygon touching the boundary (at a vertex) of another polygon [dim(0){A.A.Bdy.V = B.A.Bdy.V}]",
      "id": "07-012",
      "a": {
        "wkt": "POLYGON ((140 120, 160 20, 20 20, 20 120, 140 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                120
              ],
              [
                160,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                120
              ],
              [
                140,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((140 140, 20 120, 0 220, 120 240, 140 140))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                140
              ],
              [
                20,
                120
              ],
              [
                0,
                220
              ],
              [
                120,
                240
              ],
              [
                140,
                140
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-1-8: the closing point of a polygon touching the boundary of another polygon where the closing point touching the boundary at a vertex [dim(0){A.A.Bdy.CP = B.A.Bdy.TP}]",
      "id": "07-013",
      "a": {
        "wkt": "POLYGON ((160 200, 210 70, 120 70, 160 200))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                160,
                200
              ],
              [
                210,
                70
              ],
              [
                120,
                70
              ],
              [
                160,
                200
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((160 200, 260 40, 70 40, 160 200, 20 20, 310 20, 160 200))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                160,
                200
              ],
              [
                260,
                40
              ],
              [
                70,
                40
              ],
              [
                160,
                200
              ],
              [
                20,
                20
              ],
              [
                310,
                20
              ],
              [
                160,
                200
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-1-9: the closing point of a polygon touching the boundary of another polygon where the closing point intersecting the boundary at a non-vertex [dim(0){A.A.Bdy.CP = B.A.Bdy.TP}]",
      "id": "07-014",
      "a": {
        "wkt": "POLYGON ((110 140, 200 70, 200 160, 110 140))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                140
              ],
              [
                200,
                70
              ],
              [
                200,
                160
              ],
              [
                110,
                140
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 140, 110 50, 60 50, 60 90, 160 190, 20 110, 20 20, 200 20, 110 140))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                140
              ],
              [
                110,
                50
              ],
              [
                60,
                50
              ],
              [
                60,
                90
              ],
              [
                160,
                190
              ],
              [
                20,
                110
              ],
              [
                20,
                20
              ],
              [
                200,
                20
              ],
              [
                110,
                140
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-2-1: two polygons touching at multiple points [dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.V}]",
      "id": "07-015",
      "a": {
        "wkt": "POLYGON ((20 120, 20 20, 260 20, 260 120, 200 40, 140 120, 80 40, 20 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                120
              ],
              [
                20,
                20
              ],
              [
                260,
                20
              ],
              [
                260,
                120
              ],
              [
                200,
                40
              ],
              [
                140,
                120
              ],
              [
                80,
                40
              ],
              [
                20,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 120, 20 240, 260 240, 260 120, 200 200, 140 120, 80 200, 20 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                120
              ],
              [
                20,
                240
              ],
              [
                260,
                240
              ],
              [
                260,
                120
              ],
              [
                200,
                200
              ],
              [
                140,
                120
              ],
              [
                80,
                200
              ],
              [
                20,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-2-2: two polygons touching at multiple points [dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}]",
      "id": "07-016",
      "a": {
        "wkt": "POLYGON ((20 120, 20 20, 260 20, 260 120, 180 40, 140 120, 100 40, 20 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                120
              ],
              [
                20,
                20
              ],
              [
                260,
                20
              ],
              [
                260,
                120
              ],
              [
                180,
                40
              ],
              [
                140,
                120
              ],
              [
                100,
                40
              ],
              [
                20,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 120, 300 120, 140 240, 20 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                120
              ],
              [
                300,
                120
              ],
              [
                140,
                240
              ],
              [
                20,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-2-3: two polygons touching at multiple points [dim(0){A.A.Bdy.CP = B.A.Bdy.NV}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}]",
      "id": "07-017",
      "a": {
        "wkt": "POLYGON ((20 20, 20 300, 280 300, 280 260, 220 260, 60 100, 60 60, 280 60, 280 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                300
              ],
              [
                280,
                300
              ],
              [
                280,
                260
              ],
              [
                220,
                260
              ],
              [
                60,
                100
              ],
              [
                60,
                60
              ],
              [
                280,
                60
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((100 140, 160 80, 280 180, 200 240, 220 160, 160 200, 180 120, 100 140))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                140
              ],
              [
                160,
                80
              ],
              [
                280,
                180
              ],
              [
                200,
                240
              ],
              [
                220,
                160
              ],
              [
                160,
                200
              ],
              [
                180,
                120
              ],
              [
                100,
                140
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-2-4: two polygons touching at multiple points [dim(0){A.A.Bdy.V = B.A.Bdy.NV}]",
      "id": "07-018",
      "a": {
        "wkt": "POLYGON ((20 20, 20 300, 280 300, 280 260, 220 260, 60 100, 60 60, 280 60, 280 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                300
              ],
              [
                280,
                300
              ],
              [
                280,
                260
              ],
              [
                220,
                260
              ],
              [
                60,
                100
              ],
              [
                60,
                60
              ],
              [
                280,
                60
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((260 200, 180 80, 120 160, 200 160, 180 220, 260 200))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                260,
                200
              ],
              [
                180,
                80
              ],
              [
                120,
                160
              ],
              [
                200,
                160
              ],
              [
                180,
                220
              ],
              [
                260,
                200
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-2-5: two polygons touching at multiple points [dim(0){A.A.Bdy.V = B.A.Bdy.NV}]",
      "id": "07-019",
      "a": {
        "wkt": "POLYGON ((20 20, 280 20, 280 140, 220 60, 140 140, 80 60, 20 140, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                280,
                20
              ],
              [
                280,
                140
              ],
              [
                220,
                60
              ],
              [
                140,
                140
              ],
              [
                80,
                60
              ],
              [
                20,
                140
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((0 140, 300 140, 140 240, 0 140))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                0,
                140
              ],
              [
                300,
                140
              ],
              [
                140,
                240
              ],
              [
                0,
                140
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-2-6: two polygons touching at multiple points [dim(0){A.A.Bdy.V = B.A.Bdy.V}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}]",
      "id": "07-020",
      "a": {
        "wkt": "POLYGON ((20 20, 280 20, 280 140, 220 60, 140 140, 80 60, 20 140, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                280,
                20
              ],
              [
                280,
                140
              ],
              [
                220,
                60
              ],
              [
                140,
                140
              ],
              [
                80,
                60
              ],
              [
                20,
                140
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 240, 20 140, 320 140, 180 240, 20 240))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                240
              ],
              [
                20,
                140
              ],
              [
                320,
                140
              ],
              [
                180,
                240
              ],
              [
                20,
                240
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-2-7: two polygons touching at multiple points [dim(0){A.A.Bdy.V = B.A.Bdy.V}]",
      "id": "07-021",
      "a": {
        "wkt": "POLYGON ((20 20, 280 20, 280 140, 220 60, 140 140, 80 60, 20 140, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                280,
                20
              ],
              [
                280,
                140
              ],
              [
                220,
                60
              ],
              [
                140,
                140
              ],
              [
                80,
                60
              ],
              [
                20,
                140
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 240, 20 140, 80 180, 140 140, 220 180, 280 140, 280 240, 20 240))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                240
              ],
              [
                20,
                140
              ],
              [
                80,
                180
              ],
              [
                140,
                140
              ],
              [
                220,
                180
              ],
              [
                280,
                140
              ],
              [
                280,
                240
              ],
              [
                20,
                240
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-3-1: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.SP-NV}]",
      "id": "07-022",
      "a": {
        "wkt": "POLYGON ((120 120, 180 60, 20 20, 20 120, 120 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                120,
                120
              ],
              [
                180,
                60
              ],
              [
                20,
                20
              ],
              [
                20,
                120
              ],
              [
                120,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((120 120, 220 20, 280 20, 240 160, 120 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                120,
                120
              ],
              [
                220,
                20
              ],
              [
                280,
                20
              ],
              [
                240,
                160
              ],
              [
                120,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-3-2: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.SP-V}]",
      "id": "07-023",
      "a": {
        "wkt": "POLYGON ((140 120, 160 20, 20 20, 20 120, 140 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                120
              ],
              [
                160,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                120
              ],
              [
                140,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((140 120, 160 20, 260 120, 220 200, 140 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                120
              ],
              [
                160,
                20
              ],
              [
                260,
                120
              ],
              [
                220,
                200
              ],
              [
                140,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-3-3: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.NV-V}]",
      "id": "07-024",
      "a": {
        "wkt": "POLYGON ((20 140, 120 40, 20 40, 20 140))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                140
              ],
              [
                120,
                40
              ],
              [
                20,
                40
              ],
              [
                20,
                140
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 140, 190 20, 140 20, 20 140, 190 140))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                140
              ],
              [
                190,
                20
              ],
              [
                140,
                20
              ],
              [
                20,
                140
              ],
              [
                190,
                140
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-3-4: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.NV-V}]",
      "id": "07-025",
      "a": {
        "wkt": "POLYGON ((120 120, 180 60, 20 20, 20 120, 120 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                120,
                120
              ],
              [
                180,
                60
              ],
              [
                20,
                20
              ],
              [
                20,
                120
              ],
              [
                120,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((300 20, 220 20, 120 120, 260 160, 300 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                300,
                20
              ],
              [
                220,
                20
              ],
              [
                120,
                120
              ],
              [
                260,
                160
              ],
              [
                300,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-3-5: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.V-EP}]",
      "id": "07-026",
      "a": {
        "wkt": "POLYGON ((140 120, 160 20, 20 20, 20 120, 140 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                120
              ],
              [
                160,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                120
              ],
              [
                140,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((140 120, 240 160, 280 60, 160 20, 140 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                120
              ],
              [
                240,
                160
              ],
              [
                280,
                60
              ],
              [
                160,
                20
              ],
              [
                140,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-3-6: two polygons touching along a boundary [dim(1){A.A.Bdy.SP-V = B.A.Bdy.V-V}]",
      "id": "07-027",
      "a": {
        "wkt": "POLYGON ((120 120, 180 60, 20 20, 20 120, 120 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                120,
                120
              ],
              [
                180,
                60
              ],
              [
                20,
                20
              ],
              [
                20,
                120
              ],
              [
                120,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((280 60, 180 60, 120 120, 260 180, 280 60))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                280,
                60
              ],
              [
                180,
                60
              ],
              [
                120,
                120
              ],
              [
                260,
                180
              ],
              [
                280,
                60
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-3-7: two polygons touching along a boundary [dim(1){A.A.Bdy.NV-NV = B.A.Bdy.V-V}]",
      "id": "07-028",
      "a": {
        "wkt": "POLYGON ((140 120, 160 20, 20 20, 20 120, 140 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                120
              ],
              [
                160,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                120
              ],
              [
                140,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((120 200, 120 120, 40 120, 40 200, 120 200))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                120,
                200
              ],
              [
                120,
                120
              ],
              [
                40,
                120
              ],
              [
                40,
                200
              ],
              [
                120,
                200
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-3-8: two polygons touching along a boundary [dim(1){A.A.Bdy.NV-EP = B.A.Bdy.V-V}]",
      "id": "07-029",
      "a": {
        "wkt": "POLYGON ((140 120, 160 20, 20 20, 20 120, 140 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                120
              ],
              [
                160,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                120
              ],
              [
                140,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((160 220, 140 120, 60 120, 40 220, 160 220))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                160,
                220
              ],
              [
                140,
                120
              ],
              [
                60,
                120
              ],
              [
                40,
                220
              ],
              [
                160,
                220
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-3-9: two polygons touching along a boundary [dim(1){A.A.Bdy.V-EP = B.A.Bdy.V-SP}]",
      "id": "07-030",
      "a": {
        "wkt": "POLYGON ((140 120, 160 20, 20 20, 20 120, 140 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                120
              ],
              [
                160,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                120
              ],
              [
                140,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((140 120, 20 120, 20 220, 140 220, 140 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                120
              ],
              [
                20,
                120
              ],
              [
                20,
                220
              ],
              [
                140,
                220
              ],
              [
                140,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-3-3-10: two polygons touching along a boundary [dim(1){A.A.Bdy.V-V = B.A.Bdy.NV-NV}]",
      "id": "07-031",
      "a": {
        "wkt": "POLYGON ((120 120, 180 60, 20 20, 20 120, 120 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                120,
                120
              ],
              [
                180,
                60
              ],
              [
                20,
                20
              ],
              [
                20,
                120
              ],
              [
                120,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((320 20, 220 20, 80 160, 240 140, 320 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                320,
                20
              ],
              [
                220,
                20
              ],
              [
                80,
                160
              ],
              [
                240,
                140
              ],
              [
                320,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-EP = B.A.Int}]",
      "id": "07-032",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 40, 60 140, 180 140, 180 40, 60 40))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                40
              ],
              [
                60,
                140
              ],
              [
                180,
                140
              ],
              [
                180,
                40
              ],
              [
                60,
                40
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212FF1FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-2-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}]",
      "id": "07-033",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 80 140, 160 60, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                80,
                140
              ],
              [
                160,
                60
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F01FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-2-2: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.V}]",
      "id": "07-034",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((160 60, 20 20, 100 140, 160 60))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                160,
                60
              ],
              [
                20,
                20
              ],
              [
                100,
                140
              ],
              [
                160,
                60
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F01FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-2-3: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.CP}]",
      "id": "07-035",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 100, 140 160, 160 40, 20 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                100
              ],
              [
                140,
                160
              ],
              [
                160,
                40
              ],
              [
                20,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F01FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-2-4: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}]",
      "id": "07-036",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((160 40, 20 100, 160 160, 160 40))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                160,
                40
              ],
              [
                20,
                100
              ],
              [
                160,
                160
              ],
              [
                160,
                40
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F01FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-2-5: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.CP}]",
      "id": "07-037",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 180, 180 120, 80 40, 20 180))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                180
              ],
              [
                180,
                120
              ],
              [
                80,
                40
              ],
              [
                20,
                180
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F01FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-2-6: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.V}]",
      "id": "07-038",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((180 120, 100 40, 20 180, 180 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                180,
                120
              ],
              [
                100,
                40
              ],
              [
                20,
                180
              ],
              [
                180,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F01FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-3-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}]",
      "id": "07-039",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 140 40, 140 120, 20 160, 80 80, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                140,
                40
              ],
              [
                140,
                120
              ],
              [
                20,
                160
              ],
              [
                80,
                80
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F01FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-3-2: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.V}]",
      "id": "07-040",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 140 40, 140 140, 20 180, 80 100, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                140,
                40
              ],
              [
                140,
                140
              ],
              [
                20,
                180
              ],
              [
                80,
                100
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F01FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-3-3: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}]",
      "id": "07-041",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((40 180, 60 100, 180 100, 200 180, 120 120, 40 180))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                40,
                180
              ],
              [
                60,
                100
              ],
              [
                180,
                100
              ],
              [
                200,
                180
              ],
              [
                120,
                120
              ],
              [
                40,
                180
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F01FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-3-4: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.V}]",
      "id": "07-042",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 180, 60 80, 180 80, 220 180, 120 120, 20 180))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                180
              ],
              [
                60,
                80
              ],
              [
                180,
                80
              ],
              [
                220,
                180
              ],
              [
                120,
                120
              ],
              [
                20,
                180
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F01FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-3-5: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}]",
      "id": "07-043",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((40 60, 20 180, 100 100, 140 180, 160 120, 220 100, 140 40, 40 60))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                40,
                60
              ],
              [
                20,
                180
              ],
              [
                100,
                100
              ],
              [
                140,
                180
              ],
              [
                160,
                120
              ],
              [
                220,
                100
              ],
              [
                140,
                40
              ],
              [
                40,
                60
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F01FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-3-6: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.V = B.A.Bdy.V}, dim(0){A.A.Bdy.V = B.A.Bdy.V}]",
      "id": "07-044",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 100, 180 100, 220 180, 120 140, 20 180, 60 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                100
              ],
              [
                180,
                100
              ],
              [
                220,
                180
              ],
              [
                120,
                140
              ],
              [
                20,
                180
              ],
              [
                60,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F01FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-4-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-NV = B.A.Bdy.SP-V}]",
      "id": "07-045",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 20 140, 120 120, 120 40, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                140
              ],
              [
                120,
                120
              ],
              [
                120,
                40
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F11FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-4-2: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-V = B.A.Bdy.SP-V)}]",
      "id": "07-046",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 20 180, 140 140, 140 60, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                140,
                140
              ],
              [
                140,
                60
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F11FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-4-3: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-NV = B.A.Bdy.V-EP}]",
      "id": "07-047",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 120 40, 120 120, 20 140, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                120,
                40
              ],
              [
                120,
                120
              ],
              [
                20,
                140
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F11FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-4-4: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-NV = B.A.Bdy.V-V}]",
      "id": "07-048",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((120 40, 20 20, 20 140, 120 120, 120 40))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                120,
                40
              ],
              [
                20,
                20
              ],
              [
                20,
                140
              ],
              [
                120,
                120
              ],
              [
                120,
                40
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F11FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-4-5: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-V = B.A.Bdy.V-EP}]",
      "id": "07-049",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 140 60, 140 140, 20 180, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                140,
                60
              ],
              [
                140,
                140
              ],
              [
                20,
                180
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F11FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-4-6: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-V = B.A.Bdy.V-V}]",
      "id": "07-050",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((140 60, 20 20, 20 180, 140 140, 140 60))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                60
              ],
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                140,
                140
              ],
              [
                140,
                60
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F11FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-4-7: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.NV-EP = B.A.Bdy.V-EP}]",
      "id": "07-051",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 60 120, 140 120, 180 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                60,
                120
              ],
              [
                140,
                120
              ],
              [
                180,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F11FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-4-8: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.NV-NV = B.A.Bdy.V-EP}]",
      "id": "07-052",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 40, 120 40, 120 120, 20 140, 20 40))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                40
              ],
              [
                120,
                40
              ],
              [
                120,
                120
              ],
              [
                20,
                140
              ],
              [
                20,
                40
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F11FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-5-5-1: a polygon containing another polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.SP-V = B.A.Bdy.SP-V}, dim(1){A.A.Bdy.(NV, V) = B.A.Bdy.(V, V)}]",
      "id": "07-053",
      "a": {
        "wkt": "POLYGON ((20 20, 20 180, 220 180, 220 20, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                220,
                180
              ],
              [
                220,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 20 180, 60 120, 100 180, 140 120, 220 180, 200 120, 140 60, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                180
              ],
              [
                60,
                120
              ],
              [
                100,
                180
              ],
              [
                140,
                120
              ],
              [
                220,
                180
              ],
              [
                200,
                120
              ],
              [
                140,
                60
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F11FF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-1: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}]",
      "id": "07-054",
      "a": {
        "wkt": "POLYGON ((150 150, 330 150, 250 70, 70 70, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                330,
                150
              ],
              [
                250,
                70
              ],
              [
                70,
                70
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 270 150, 140 20, 20 20, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                270,
                150
              ],
              [
                140,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-2: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}]",
      "id": "07-055",
      "a": {
        "wkt": "POLYGON ((150 150, 270 150, 330 150, 250 70, 190 70, 70 70, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                270,
                150
              ],
              [
                330,
                150
              ],
              [
                250,
                70
              ],
              [
                190,
                70
              ],
              [
                70,
                70
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 270 150, 190 70, 140 20, 20 20, 70 70, 150 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                270,
                150
              ],
              [
                190,
                70
              ],
              [
                140,
                20
              ],
              [
                20,
                20
              ],
              [
                70,
                70
              ],
              [
                150,
                150
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-3: spiky polygons overlapping; boundary &lt;-&gt; boundary intersecting at 0 dimension [dim(2){A.A.Int = B.A.Int}]",
      "id": "07-056",
      "a": {
        "wkt": "POLYGON ((20 20, 60 50, 20 40, 60 70, 20 60, 60 90, 20 90, 70 110, 20 130, 80 130, 20 150, 80 160, 20 170, 80 180, 20 200, 80 200, 30 240, 80 220, 50 260, 100 220, 100 260, 120 220, 130 260, 140 220, 150 280, 150 190, 160 280, 170 190, 180 280, 190 190, 200 280, 210 190, 220 280, 230 190, 240 260, 250 230, 260 260, 260 220, 290 270, 290 220, 330 260, 300 210, 340 240, 290 180, 340 210, 290 170, 350 170, 240 150, 350 150, 240 140, 350 130, 240 120, 350 120, 240 110, 350 110, 240 100, 350 100, 240 90, 350 90, 240 80, 350 80, 300 70, 340 60, 290 60, 340 40, 300 50, 340 20, 270 60, 310 20, 250 60, 270 20, 230 60, 240 20, 210 60, 210 20, 190 70, 190 20, 180 90, 170 20, 160 90, 150 20, 140 90, 130 20, 120 90, 110 20, 100 90, 100 20, 90 60, 80 20, 70 40, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                60,
                50
              ],
              [
                20,
                40
              ],
              [
                60,
                70
              ],
              [
                20,
                60
              ],
              [
                60,
                90
              ],
              [
                20,
                90
              ],
              [
                70,
                110
              ],
              [
                20,
                130
              ],
              [
                80,
                130
              ],
              [
                20,
                150
              ],
              [
                80,
                160
              ],
              [
                20,
                170
              ],
              [
                80,
                180
              ],
              [
                20,
                200
              ],
              [
                80,
                200
              ],
              [
                30,
                240
              ],
              [
                80,
                220
              ],
              [
                50,
                260
              ],
              [
                100,
                220
              ],
              [
                100,
                260
              ],
              [
                120,
                220
              ],
              [
                130,
                260
              ],
              [
                140,
                220
              ],
              [
                150,
                280
              ],
              [
                150,
                190
              ],
              [
                160,
                280
              ],
              [
                170,
                190
              ],
              [
                180,
                280
              ],
              [
                190,
                190
              ],
              [
                200,
                280
              ],
              [
                210,
                190
              ],
              [
                220,
                280
              ],
              [
                230,
                190
              ],
              [
                240,
                260
              ],
              [
                250,
                230
              ],
              [
                260,
                260
              ],
              [
                260,
                220
              ],
              [
                290,
                270
              ],
              [
                290,
                220
              ],
              [
                330,
                260
              ],
              [
                300,
                210
              ],
              [
                340,
                240
              ],
              [
                290,
                180
              ],
              [
                340,
                210
              ],
              [
                290,
                170
              ],
              [
                350,
                170
              ],
              [
                240,
                150
              ],
              [
                350,
                150
              ],
              [
                240,
                140
              ],
              [
                350,
                130
              ],
              [
                240,
                120
              ],
              [
                350,
                120
              ],
              [
                240,
                110
              ],
              [
                350,
                110
              ],
              [
                240,
                100
              ],
              [
                350,
                100
              ],
              [
                240,
                90
              ],
              [
                350,
                90
              ],
              [
                240,
                80
              ],
              [
                350,
                80
              ],
              [
                300,
                70
              ],
              [
                340,
                60
              ],
              [
                290,
                60
              ],
              [
                340,
                40
              ],
              [
                300,
                50
              ],
              [
                340,
                20
              ],
              [
                270,
                60
              ],
              [
                310,
                20
              ],
              [
                250,
                60
              ],
              [
                270,
                20
              ],
              [
                230,
                60
              ],
              [
                240,
                20
              ],
              [
                210,
                60
              ],
              [
                210,
                20
              ],
              [
                190,
                70
              ],
              [
                190,
                20
              ],
              [
                180,
                90
              ],
              [
                170,
                20
              ],
              [
                160,
                90
              ],
              [
                150,
                20
              ],
              [
                140,
                90
              ],
              [
                130,
                20
              ],
              [
                120,
                90
              ],
              [
                110,
                20
              ],
              [
                100,
                90
              ],
              [
                100,
                20
              ],
              [
                90,
                60
              ],
              [
                80,
                20
              ],
              [
                70,
                40
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 140, 140 130, 200 160, 130 150, 210 170, 130 170, 210 180, 120 190, 220 200, 120 200, 250 210, 120 210, 250 220, 120 220, 250 230, 120 240, 230 240, 120 250, 240 260, 120 260, 240 270, 120 270, 270 290, 120 290, 230 300, 150 310, 250 310, 180 320, 250 320, 200 360, 260 330, 240 360, 280 320, 290 370, 290 320, 320 360, 310 320, 360 360, 310 310, 380 340, 310 290, 390 330, 310 280, 410 310, 310 270, 420 280, 310 260, 430 250, 300 250, 440 240, 300 240, 450 230, 280 220, 440 220, 280 210, 440 210, 300 200, 430 190, 300 190, 440 180, 330 180, 430 150, 320 180, 420 130, 300 180, 410 120, 280 180, 400 110, 280 170, 390 90, 280 160, 400 70, 270 160, 450 30, 260 160, 420 30, 250 160, 390 30, 240 160, 370 30, 230 160, 360 30, 230 150, 330 50, 240 130, 330 30, 230 130, 310 30, 220 130, 280 30, 230 100, 270 40, 220 110, 250 30, 210 130, 240 30, 210 100, 220 40, 200 90, 200 20, 190 100, 180 30, 20 20, 180 40, 20 30, 180 50, 20 50, 180 60, 30 60, 180 70, 20 70, 170 80, 80 80, 170 90, 20 80, 180 100, 40 100, 200 110, 60 110, 200 120, 120 120, 190 140))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                140
              ],
              [
                140,
                130
              ],
              [
                200,
                160
              ],
              [
                130,
                150
              ],
              [
                210,
                170
              ],
              [
                130,
                170
              ],
              [
                210,
                180
              ],
              [
                120,
                190
              ],
              [
                220,
                200
              ],
              [
                120,
                200
              ],
              [
                250,
                210
              ],
              [
                120,
                210
              ],
              [
                250,
                220
              ],
              [
                120,
                220
              ],
              [
                250,
                230
              ],
              [
                120,
                240
              ],
              [
                230,
                240
              ],
              [
                120,
                250
              ],
              [
                240,
                260
              ],
              [
                120,
                260
              ],
              [
                240,
                270
              ],
              [
                120,
                270
              ],
              [
                270,
                290
              ],
              [
                120,
                290
              ],
              [
                230,
                300
              ],
              [
                150,
                310
              ],
              [
                250,
                310
              ],
              [
                180,
                320
              ],
              [
                250,
                320
              ],
              [
                200,
                360
              ],
              [
                260,
                330
              ],
              [
                240,
                360
              ],
              [
                280,
                320
              ],
              [
                290,
                370
              ],
              [
                290,
                320
              ],
              [
                320,
                360
              ],
              [
                310,
                320
              ],
              [
                360,
                360
              ],
              [
                310,
                310
              ],
              [
                380,
                340
              ],
              [
                310,
                290
              ],
              [
                390,
                330
              ],
              [
                310,
                280
              ],
              [
                410,
                310
              ],
              [
                310,
                270
              ],
              [
                420,
                280
              ],
              [
                310,
                260
              ],
              [
                430,
                250
              ],
              [
                300,
                250
              ],
              [
                440,
                240
              ],
              [
                300,
                240
              ],
              [
                450,
                230
              ],
              [
                280,
                220
              ],
              [
                440,
                220
              ],
              [
                280,
                210
              ],
              [
                440,
                210
              ],
              [
                300,
                200
              ],
              [
                430,
                190
              ],
              [
                300,
                190
              ],
              [
                440,
                180
              ],
              [
                330,
                180
              ],
              [
                430,
                150
              ],
              [
                320,
                180
              ],
              [
                420,
                130
              ],
              [
                300,
                180
              ],
              [
                410,
                120
              ],
              [
                280,
                180
              ],
              [
                400,
                110
              ],
              [
                280,
                170
              ],
              [
                390,
                90
              ],
              [
                280,
                160
              ],
              [
                400,
                70
              ],
              [
                270,
                160
              ],
              [
                450,
                30
              ],
              [
                260,
                160
              ],
              [
                420,
                30
              ],
              [
                250,
                160
              ],
              [
                390,
                30
              ],
              [
                240,
                160
              ],
              [
                370,
                30
              ],
              [
                230,
                160
              ],
              [
                360,
                30
              ],
              [
                230,
                150
              ],
              [
                330,
                50
              ],
              [
                240,
                130
              ],
              [
                330,
                30
              ],
              [
                230,
                130
              ],
              [
                310,
                30
              ],
              [
                220,
                130
              ],
              [
                280,
                30
              ],
              [
                230,
                100
              ],
              [
                270,
                40
              ],
              [
                220,
                110
              ],
              [
                250,
                30
              ],
              [
                210,
                130
              ],
              [
                240,
                30
              ],
              [
                210,
                100
              ],
              [
                220,
                40
              ],
              [
                200,
                90
              ],
              [
                200,
                20
              ],
              [
                190,
                100
              ],
              [
                180,
                30
              ],
              [
                20,
                20
              ],
              [
                180,
                40
              ],
              [
                20,
                30
              ],
              [
                180,
                50
              ],
              [
                20,
                50
              ],
              [
                180,
                60
              ],
              [
                30,
                60
              ],
              [
                180,
                70
              ],
              [
                20,
                70
              ],
              [
                170,
                80
              ],
              [
                80,
                80
              ],
              [
                170,
                90
              ],
              [
                20,
                80
              ],
              [
                180,
                100
              ],
              [
                40,
                100
              ],
              [
                200,
                110
              ],
              [
                60,
                110
              ],
              [
                200,
                120
              ],
              [
                120,
                120
              ],
              [
                190,
                140
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-4: spiky polygons overlapping; boundary &lt;-&gt; boundary intersecting at 1 dimension at a few locations [dim(2){A.A.Int = B.A.Int}]",
      "id": "07-057",
      "a": {
        "wkt": "POLYGON ((70 150, 20 160, 110 160, 20 180, 100 200, 20 200, 190 210, 20 210, 160 220, 20 220, 150 230, 60 240, 180 250, 20 260, 170 260, 60 270, 160 270, 100 310, 170 280, 200 260, 180 230, 210 260, 130 330, 230 250, 210 290, 240 250, 230 210, 260 300, 250 230, 270 300, 270 240, 300 340, 280 250, 320 330, 290 250, 340 350, 290 240, 350 360, 270 190, 350 340, 290 200, 350 330, 300 190, 360 320, 310 190, 360 300, 320 200, 360 280, 330 200, 360 260, 340 200, 370 260, 340 180, 390 290, 340 170, 400 260, 350 170, 400 250, 350 160, 410 240, 350 150, 400 170, 350 140, 310 170, 340 140, 270 180, 330 140, 260 170, 310 140, 240 170, 290 140, 200 190, 270 140, 180 190, 260 140, 170 190, 260 130, 170 180, 250 130, 170 170, 240 120, 170 160, 210 120, 170 150, 210 110, 340 130, 230 110, 420 140, 220 100, 410 130, 220 90, 400 120, 220 80, 390 110, 220 70, 420 110, 240 70, 420 100, 260 70, 420 90, 280 70, 430 80, 230 60, 430 60, 270 50, 450 40, 210 50, 370 40, 260 40, 460 30, 160 40, 210 60, 200 110, 190 60, 190 120, 170 50, 180 130, 150 30, 170 130, 140 20, 160 120, 130 20, 160 150, 120 20, 160 170, 110 20, 160 190, 100 20, 150 190, 90 20, 140 180, 80 20, 120 140, 70 20, 120 150, 60 20, 110 150, 50 20, 100 140, 50 30, 90 130, 40 30, 80 120, 30 30, 80 130, 30 40, 80 140, 20 40, 70 140, 40 90, 60 130, 20 90, 60 140, 20 130, 70 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                70,
                150
              ],
              [
                20,
                160
              ],
              [
                110,
                160
              ],
              [
                20,
                180
              ],
              [
                100,
                200
              ],
              [
                20,
                200
              ],
              [
                190,
                210
              ],
              [
                20,
                210
              ],
              [
                160,
                220
              ],
              [
                20,
                220
              ],
              [
                150,
                230
              ],
              [
                60,
                240
              ],
              [
                180,
                250
              ],
              [
                20,
                260
              ],
              [
                170,
                260
              ],
              [
                60,
                270
              ],
              [
                160,
                270
              ],
              [
                100,
                310
              ],
              [
                170,
                280
              ],
              [
                200,
                260
              ],
              [
                180,
                230
              ],
              [
                210,
                260
              ],
              [
                130,
                330
              ],
              [
                230,
                250
              ],
              [
                210,
                290
              ],
              [
                240,
                250
              ],
              [
                230,
                210
              ],
              [
                260,
                300
              ],
              [
                250,
                230
              ],
              [
                270,
                300
              ],
              [
                270,
                240
              ],
              [
                300,
                340
              ],
              [
                280,
                250
              ],
              [
                320,
                330
              ],
              [
                290,
                250
              ],
              [
                340,
                350
              ],
              [
                290,
                240
              ],
              [
                350,
                360
              ],
              [
                270,
                190
              ],
              [
                350,
                340
              ],
              [
                290,
                200
              ],
              [
                350,
                330
              ],
              [
                300,
                190
              ],
              [
                360,
                320
              ],
              [
                310,
                190
              ],
              [
                360,
                300
              ],
              [
                320,
                200
              ],
              [
                360,
                280
              ],
              [
                330,
                200
              ],
              [
                360,
                260
              ],
              [
                340,
                200
              ],
              [
                370,
                260
              ],
              [
                340,
                180
              ],
              [
                390,
                290
              ],
              [
                340,
                170
              ],
              [
                400,
                260
              ],
              [
                350,
                170
              ],
              [
                400,
                250
              ],
              [
                350,
                160
              ],
              [
                410,
                240
              ],
              [
                350,
                150
              ],
              [
                400,
                170
              ],
              [
                350,
                140
              ],
              [
                310,
                170
              ],
              [
                340,
                140
              ],
              [
                270,
                180
              ],
              [
                330,
                140
              ],
              [
                260,
                170
              ],
              [
                310,
                140
              ],
              [
                240,
                170
              ],
              [
                290,
                140
              ],
              [
                200,
                190
              ],
              [
                270,
                140
              ],
              [
                180,
                190
              ],
              [
                260,
                140
              ],
              [
                170,
                190
              ],
              [
                260,
                130
              ],
              [
                170,
                180
              ],
              [
                250,
                130
              ],
              [
                170,
                170
              ],
              [
                240,
                120
              ],
              [
                170,
                160
              ],
              [
                210,
                120
              ],
              [
                170,
                150
              ],
              [
                210,
                110
              ],
              [
                340,
                130
              ],
              [
                230,
                110
              ],
              [
                420,
                140
              ],
              [
                220,
                100
              ],
              [
                410,
                130
              ],
              [
                220,
                90
              ],
              [
                400,
                120
              ],
              [
                220,
                80
              ],
              [
                390,
                110
              ],
              [
                220,
                70
              ],
              [
                420,
                110
              ],
              [
                240,
                70
              ],
              [
                420,
                100
              ],
              [
                260,
                70
              ],
              [
                420,
                90
              ],
              [
                280,
                70
              ],
              [
                430,
                80
              ],
              [
                230,
                60
              ],
              [
                430,
                60
              ],
              [
                270,
                50
              ],
              [
                450,
                40
              ],
              [
                210,
                50
              ],
              [
                370,
                40
              ],
              [
                260,
                40
              ],
              [
                460,
                30
              ],
              [
                160,
                40
              ],
              [
                210,
                60
              ],
              [
                200,
                110
              ],
              [
                190,
                60
              ],
              [
                190,
                120
              ],
              [
                170,
                50
              ],
              [
                180,
                130
              ],
              [
                150,
                30
              ],
              [
                170,
                130
              ],
              [
                140,
                20
              ],
              [
                160,
                120
              ],
              [
                130,
                20
              ],
              [
                160,
                150
              ],
              [
                120,
                20
              ],
              [
                160,
                170
              ],
              [
                110,
                20
              ],
              [
                160,
                190
              ],
              [
                100,
                20
              ],
              [
                150,
                190
              ],
              [
                90,
                20
              ],
              [
                140,
                180
              ],
              [
                80,
                20
              ],
              [
                120,
                140
              ],
              [
                70,
                20
              ],
              [
                120,
                150
              ],
              [
                60,
                20
              ],
              [
                110,
                150
              ],
              [
                50,
                20
              ],
              [
                100,
                140
              ],
              [
                50,
                30
              ],
              [
                90,
                130
              ],
              [
                40,
                30
              ],
              [
                80,
                120
              ],
              [
                30,
                30
              ],
              [
                80,
                130
              ],
              [
                30,
                40
              ],
              [
                80,
                140
              ],
              [
                20,
                40
              ],
              [
                70,
                140
              ],
              [
                40,
                90
              ],
              [
                60,
                130
              ],
              [
                20,
                90
              ],
              [
                60,
                140
              ],
              [
                20,
                130
              ],
              [
                70,
                150
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((190 140, 140 130, 200 160, 130 150, 210 170, 130 170, 210 180, 120 190, 220 200, 120 200, 250 210, 120 210, 250 220, 120 220, 250 230, 120 240, 230 240, 120 250, 240 260, 120 260, 240 270, 120 270, 270 290, 120 290, 230 300, 150 310, 250 310, 180 320, 250 320, 200 360, 260 330, 240 360, 280 320, 290 370, 290 320, 320 360, 310 320, 360 360, 310 310, 380 340, 310 290, 390 330, 310 280, 410 310, 310 270, 420 280, 310 260, 430 250, 300 250, 440 240, 300 240, 450 230, 280 220, 440 220, 280 210, 440 210, 300 200, 430 190, 300 190, 440 180, 330 180, 430 150, 320 180, 420 130, 300 180, 410 120, 280 180, 400 110, 280 170, 390 90, 280 160, 400 70, 270 160, 450 30, 260 160, 420 30, 250 160, 390 30, 240 160, 370 30, 230 160, 360 30, 230 150, 330 50, 240 130, 330 30, 230 130, 310 30, 220 130, 280 30, 230 100, 270 40, 220 110, 250 30, 210 130, 240 30, 210 100, 220 40, 200 90, 200 20, 190 100, 180 30, 20 20, 180 40, 20 30, 180 50, 20 50, 180 60, 30 60, 180 70, 20 70, 170 80, 80 80, 170 90, 20 80, 180 100, 40 100, 200 110, 60 110, 200 120, 120 120, 190 140))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                140
              ],
              [
                140,
                130
              ],
              [
                200,
                160
              ],
              [
                130,
                150
              ],
              [
                210,
                170
              ],
              [
                130,
                170
              ],
              [
                210,
                180
              ],
              [
                120,
                190
              ],
              [
                220,
                200
              ],
              [
                120,
                200
              ],
              [
                250,
                210
              ],
              [
                120,
                210
              ],
              [
                250,
                220
              ],
              [
                120,
                220
              ],
              [
                250,
                230
              ],
              [
                120,
                240
              ],
              [
                230,
                240
              ],
              [
                120,
                250
              ],
              [
                240,
                260
              ],
              [
                120,
                260
              ],
              [
                240,
                270
              ],
              [
                120,
                270
              ],
              [
                270,
                290
              ],
              [
                120,
                290
              ],
              [
                230,
                300
              ],
              [
                150,
                310
              ],
              [
                250,
                310
              ],
              [
                180,
                320
              ],
              [
                250,
                320
              ],
              [
                200,
                360
              ],
              [
                260,
                330
              ],
              [
                240,
                360
              ],
              [
                280,
                320
              ],
              [
                290,
                370
              ],
              [
                290,
                320
              ],
              [
                320,
                360
              ],
              [
                310,
                320
              ],
              [
                360,
                360
              ],
              [
                310,
                310
              ],
              [
                380,
                340
              ],
              [
                310,
                290
              ],
              [
                390,
                330
              ],
              [
                310,
                280
              ],
              [
                410,
                310
              ],
              [
                310,
                270
              ],
              [
                420,
                280
              ],
              [
                310,
                260
              ],
              [
                430,
                250
              ],
              [
                300,
                250
              ],
              [
                440,
                240
              ],
              [
                300,
                240
              ],
              [
                450,
                230
              ],
              [
                280,
                220
              ],
              [
                440,
                220
              ],
              [
                280,
                210
              ],
              [
                440,
                210
              ],
              [
                300,
                200
              ],
              [
                430,
                190
              ],
              [
                300,
                190
              ],
              [
                440,
                180
              ],
              [
                330,
                180
              ],
              [
                430,
                150
              ],
              [
                320,
                180
              ],
              [
                420,
                130
              ],
              [
                300,
                180
              ],
              [
                410,
                120
              ],
              [
                280,
                180
              ],
              [
                400,
                110
              ],
              [
                280,
                170
              ],
              [
                390,
                90
              ],
              [
                280,
                160
              ],
              [
                400,
                70
              ],
              [
                270,
                160
              ],
              [
                450,
                30
              ],
              [
                260,
                160
              ],
              [
                420,
                30
              ],
              [
                250,
                160
              ],
              [
                390,
                30
              ],
              [
                240,
                160
              ],
              [
                370,
                30
              ],
              [
                230,
                160
              ],
              [
                360,
                30
              ],
              [
                230,
                150
              ],
              [
                330,
                50
              ],
              [
                240,
                130
              ],
              [
                330,
                30
              ],
              [
                230,
                130
              ],
              [
                310,
                30
              ],
              [
                220,
                130
              ],
              [
                280,
                30
              ],
              [
                230,
                100
              ],
              [
                270,
                40
              ],
              [
                220,
                110
              ],
              [
                250,
                30
              ],
              [
                210,
                130
              ],
              [
                240,
                30
              ],
              [
                210,
                100
              ],
              [
                220,
                40
              ],
              [
                200,
                90
              ],
              [
                200,
                20
              ],
              [
                190,
                100
              ],
              [
                180,
                30
              ],
              [
                20,
                20
              ],
              [
                180,
                40
              ],
              [
                20,
                30
              ],
              [
                180,
                50
              ],
              [
                20,
                50
              ],
              [
                180,
                60
              ],
              [
                30,
                60
              ],
              [
                180,
                70
              ],
              [
                20,
                70
              ],
              [
                170,
                80
              ],
              [
                80,
                80
              ],
              [
                170,
                90
              ],
              [
                20,
                80
              ],
              [
                180,
                100
              ],
              [
                40,
                100
              ],
              [
                200,
                110
              ],
              [
                60,
                110
              ],
              [
                200,
                120
              ],
              [
                120,
                120
              ],
              [
                190,
                140
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-5: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.V}]",
      "id": "07-058",
      "a": {
        "wkt": "POLYGON ((60 160, 220 160, 220 20, 60 20, 60 160))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                160
              ],
              [
                220,
                160
              ],
              [
                220,
                20
              ],
              [
                60,
                20
              ],
              [
                60,
                160
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 160, 20 200, 260 200, 220 160, 140 80, 60 160))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                160
              ],
              [
                20,
                200
              ],
              [
                260,
                200
              ],
              [
                220,
                160
              ],
              [
                140,
                80
              ],
              [
                60,
                160
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-6: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}]",
      "id": "07-059",
      "a": {
        "wkt": "POLYGON ((60 160, 220 160, 220 20, 60 20, 60 160))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                160
              ],
              [
                220,
                160
              ],
              [
                220,
                20
              ],
              [
                60,
                20
              ],
              [
                60,
                160
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 160, 20 200, 260 200, 140 80, 60 160))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                160
              ],
              [
                20,
                200
              ],
              [
                260,
                200
              ],
              [
                140,
                80
              ],
              [
                60,
                160
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-7: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.NV}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}]",
      "id": "07-060",
      "a": {
        "wkt": "POLYGON ((60 160, 220 160, 220 20, 60 20, 60 160))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                160
              ],
              [
                220,
                160
              ],
              [
                220,
                20
              ],
              [
                60,
                20
              ],
              [
                60,
                160
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 200, 140 80, 260 200, 20 200))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                200
              ],
              [
                140,
                80
              ],
              [
                260,
                200
              ],
              [
                20,
                200
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-8: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.V}, dim(0){A.A.Bdy.V = B.A.Bdy.V}]",
      "id": "07-061",
      "a": {
        "wkt": "POLYGON ((60 160, 220 160, 220 20, 60 20, 60 160))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                160
              ],
              [
                220,
                160
              ],
              [
                220,
                20
              ],
              [
                60,
                20
              ],
              [
                60,
                160
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 200, 60 160, 140 80, 220 160, 260 200, 20 200))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                200
              ],
              [
                60,
                160
              ],
              [
                140,
                80
              ],
              [
                220,
                160
              ],
              [
                260,
                200
              ],
              [
                20,
                200
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-9: a polygon overlapping another polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.CP = B.A.Bdy.V}, dim(0){A.A.Bdy.V = B.A.Bdy.NV}]",
      "id": "07-062",
      "a": {
        "wkt": "POLYGON ((60 160, 220 160, 220 20, 60 20, 60 160))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                160
              ],
              [
                220,
                160
              ],
              [
                220,
                20
              ],
              [
                60,
                20
              ],
              [
                60,
                160
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 200, 60 160, 140 80, 260 200, 20 200))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                200
              ],
              [
                60,
                160
              ],
              [
                140,
                80
              ],
              [
                260,
                200
              ],
              [
                20,
                200
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-10: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}]",
      "id": "07-063",
      "a": {
        "wkt": "POLYGON ((0 0, 0 200, 200 200, 200 0, 0 0))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                0,
                0
              ],
              [
                0,
                200
              ],
              [
                200,
                200
              ],
              [
                200,
                0
              ],
              [
                0,
                0
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((100 100, 1000000 110, 10000000 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                1000000,
                110
              ],
              [
                10000000,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-11: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}]",
      "id": "07-064",
      "a": {
        "wkt": "POLYGON ((100 0, 100 200, 200 200, 200 0, 100 0))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                0
              ],
              [
                100,
                200
              ],
              [
                200,
                200
              ],
              [
                200,
                0
              ],
              [
                100,
                0
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((100 100, 1000000 110, 10000000 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                1000000,
                110
              ],
              [
                10000000,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-12: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}]",
      "id": "07-065",
      "a": {
        "wkt": "POLYGON ((120 0, 120 200, 200 200, 200 0, 120 0))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                120,
                0
              ],
              [
                120,
                200
              ],
              [
                200,
                200
              ],
              [
                200,
                0
              ],
              [
                120,
                0
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((100 100, 1000000 110, 10000000 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                1000000,
                110
              ],
              [
                10000000,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-13: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}]",
      "id": "07-066",
      "a": {
        "wkt": "POLYGON ((0 0, 0 200, 110 200, 110 0, 0 0))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                0,
                0
              ],
              [
                0,
                200
              ],
              [
                110,
                200
              ],
              [
                110,
                0
              ],
              [
                0,
                0
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((100 100, 1000000 110, 10000000 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                1000000,
                110
              ],
              [
                10000000,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-14: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}]",
      "id": "07-067",
      "a": {
        "wkt": "POLYGON ((100 100, 100 200, 200 200, 200 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                100,
                200
              ],
              [
                200,
                200
              ],
              [
                200,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((100 100, 2100 110, 2100 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                2100,
                110
              ],
              [
                2100,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-15: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}]",
      "id": "07-068",
      "a": {
        "wkt": "POLYGON ((100 100, 100 200, 200 200, 200 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                100,
                200
              ],
              [
                200,
                200
              ],
              [
                200,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((100 100, 2101 110, 2101 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                2101,
                110
              ],
              [
                2101,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-16: two skinny polygons overlapping [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}]",
      "id": "07-069",
      "a": {
        "wkt": "POLYGON ((100 100, 200 200, 200 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                200,
                200
              ],
              [
                200,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((100 100, 2101 110, 2101 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                2101,
                110
              ],
              [
                2101,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-17: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}]",
      "id": "07-070",
      "a": {
        "wkt": "POLYGON ((100 100, 100 200, 200 200, 200 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                100,
                200
              ],
              [
                200,
                200
              ],
              [
                200,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((100 100, 1000000 110, 1000000 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                1000000,
                110
              ],
              [
                1000000,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-19: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}]",
      "id": "07-071",
      "a": {
        "wkt": "POLYGON ((120 100, 120 200, 200 200, 200 100, 120 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                120,
                100
              ],
              [
                120,
                200
              ],
              [
                200,
                200
              ],
              [
                200,
                100
              ],
              [
                120,
                100
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((100 100, 500 110, 500 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                500,
                110
              ],
              [
                500,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-20: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}]",
      "id": "07-072",
      "a": {
        "wkt": "POLYGON ((120 100, 120 200, 200 200, 200 100, 120 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                120,
                100
              ],
              [
                120,
                200
              ],
              [
                200,
                200
              ],
              [
                200,
                100
              ],
              [
                120,
                100
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((100 100, 501 110, 501 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                501,
                110
              ],
              [
                501,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-21: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}]",
      "id": "07-073",
      "a": {
        "wkt": "POLYGON ((120 100, 130 200, 200 200, 200 100, 120 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                120,
                100
              ],
              [
                130,
                200
              ],
              [
                200,
                200
              ],
              [
                200,
                100
              ],
              [
                120,
                100
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((100 100, 501 110, 501 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                501,
                110
              ],
              [
                501,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-22: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}]",
      "id": "07-074",
      "a": {
        "wkt": "POLYGON ((120 100, 17 200, 200 200, 200 100, 120 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                120,
                100
              ],
              [
                17,
                200
              ],
              [
                200,
                200
              ],
              [
                200,
                100
              ],
              [
                120,
                100
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((100 100, 501 110, 501 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                501,
                110
              ],
              [
                501,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-23: a polygon overlapping a skinny polygon [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-NV}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}]",
      "id": "07-075",
      "a": {
        "wkt": "POLYGON ((120 100, 120 200, 200 200, 200 100, 120 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                120,
                100
              ],
              [
                120,
                200
              ],
              [
                200,
                200
              ],
              [
                200,
                100
              ],
              [
                120,
                100
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((100 100, 1000000 110, 1000000 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                1000000,
                110
              ],
              [
                1000000,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-25: two skinny polygons overlapping [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}]",
      "id": "07-076",
      "a": {
        "wkt": "POLYGON ((101 99, 101 1000000, 102 1000000, 101 99))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                101,
                99
              ],
              [
                101,
                1000000
              ],
              [
                102,
                1000000
              ],
              [
                101,
                99
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((100 100, 1000000 110, 1000000 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                1000000,
                110
              ],
              [
                1000000,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-26: two skinny polygons overlapping [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.Bdy.V-EP = B.A.Bdy.NV-EP}, dim(0){A.A.Bdy.CP = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}]",
      "id": "07-077",
      "a": {
        "wkt": "POLYGON ((100 100, 200 101, 200 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                200,
                101
              ],
              [
                200,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((100 100, 2101 110, 2101 100, 100 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                100
              ],
              [
                2101,
                110
              ],
              [
                2101,
                100
              ],
              [
                100,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/A-6-26: two polygons overlapping [dim(2){A.A.Int = B.A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.NV}]",
      "id": "07-078",
      "a": {
        "wkt": "POLYGON ((16 319, 150 39, 25 302, 160 20, 265 20, 127 317, 16 319))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                16,
                319
              ],
              [
                150,
                39
              ],
              [
                25,
                302
              ],
              [
                160,
                20
              ],
              [
                265,
                20
              ],
              [
                127,
                317
              ],
              [
                16,
                319
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((10 307, 22 307, 153 34, 22 34, 10 307))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                10,
                307
              ],
              [
                22,
                307
              ],
              [
                153,
                34
              ],
              [
                22,
                34
              ],
              [
                10,
                307
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/Ah-3-1: the closing point of a polygon touching the closing points of another polygon and its hole [dim(0){A.A.Bdy.CP = B.A.oBdy.CP}, dim(0){A.A.Bdy.CP = B.A.iBdy.CP}]",
      "id": "07-079",
      "a": {
        "wkt": "POLYGON ((160 200, 210 70, 120 70, 160 200))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                160,
                200
              ],
              [
                210,
                70
              ],
              [
                120,
                70
              ],
              [
                160,
                200
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((160 200, 310 20, 20 20, 160 200),(160 200, 260 40, 70 40, 160 200))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                160,
                200
              ],
              [
                310,
                20
              ],
              [
                20,
                20
              ],
              [
                160,
                200
              ]
            ],
            [
              [
                160,
                200
              ],
              [
                260,
                40
              ],
              [
                70,
                40
              ],
              [
                160,
                200
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/Ah-3-2: the boundary of a polygon touching the inner boundary of another polygon at two spots [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.SP}, dim(0){A.A.oBdy.V = B.A.iBdy.V}]",
      "id": "07-080",
      "a": {
        "wkt": "POLYGON ((170 120, 240 100, 260 50, 190 70, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                170,
                120
              ],
              [
                240,
                100
              ],
              [
                260,
                50
              ],
              [
                190,
                70
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 330 120, 260 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                330,
                120
              ],
              [
                260,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/Ah-3-3: the boundary of a polygon touching the inner boundary of another polygon at two spots [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.SP}, dim(0){A.A.oBdy.V = B.A.iBdy.V}]",
      "id": "07-081",
      "a": {
        "wkt": "POLYGON ((270 90, 200 50, 150 80, 210 120, 270 90))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                270,
                90
              ],
              [
                200,
                50
              ],
              [
                150,
                80
              ],
              [
                210,
                120
              ],
              [
                270,
                90
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 330 120, 260 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                330,
                120
              ],
              [
                260,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/Ah-3-4: the boundary of a polygon touching the inner boundary of another polygon at one spot [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.SP}]",
      "id": "07-082",
      "a": {
        "wkt": "POLYGON ((170 120, 260 100, 240 60, 150 80, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                170,
                120
              ],
              [
                260,
                100
              ],
              [
                240,
                60
              ],
              [
                150,
                80
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 330 120, 260 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                330,
                120
              ],
              [
                260,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/Ah-3-5: the boundary of a polygon touching the inner boundary of another polygon at one spot [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.NV}]",
      "id": "07-083",
      "a": {
        "wkt": "POLYGON ((220 120, 270 80, 200 60, 160 100, 220 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                220,
                120
              ],
              [
                270,
                80
              ],
              [
                200,
                60
              ],
              [
                160,
                100
              ],
              [
                220,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 330 120, 260 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                330,
                120
              ],
              [
                260,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/Ah-3-6: the boundary of a polygon touching the inner boundary of another polygon at one spot [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.SP = B.A.iBdy.V}]",
      "id": "07-084",
      "a": {
        "wkt": "POLYGON ((260 50, 180 70, 180 110, 260 90, 260 50))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                260,
                50
              ],
              [
                180,
                70
              ],
              [
                180,
                110
              ],
              [
                260,
                90
              ],
              [
                260,
                50
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 330 120, 260 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                330,
                120
              ],
              [
                260,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/Ah-3-7: the boundary of a polygon touching the inner boundary of another polygon at two spots [dim(2){A.A.Int = B.A.Ext.h}, dim(0){A.A.oBdy.V = B.A.iBdy.NV}, dim(0){A.A.oBdy.V = B.A.iBdy.NV}]",
      "id": "07-085",
      "a": {
        "wkt": "POLYGON ((230 110, 290 80, 190 60, 140 90, 230 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                230,
                110
              ],
              [
                290,
                80
              ],
              [
                190,
                60
              ],
              [
                140,
                90
              ],
              [
                230,
                110
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 330 120, 260 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                330,
                120
              ],
              [
                260,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/Ah-3-8: the boundary of a polygon touching the inner boundary of another polygon [dim(2){A.A.Int = B.A.Ext.h}, dim(1){A.A.oBdy.SP-EP = B.A.iBdy.SP-EP}]",
      "id": "07-086",
      "a": {
        "wkt": "POLYGON ((170 120, 330 120, 260 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                170,
                120
              ],
              [
                330,
                120
              ],
              [
                260,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 330 120, 260 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                330,
                120
              ],
              [
                260,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F1F212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/Ah-3-9: part of the boundary of a polygon touching part of the inner boundary of another polygon [dim(2){A.A.Int = B.A.Ext.h}, dim(1){A.A.oBdy.SP-V = B.A.iBdy.SP-NV}, dim(1){A.A.oBdy.V-EP = B.A.iBdy.NV-EP}]",
      "id": "07-087",
      "a": {
        "wkt": "POLYGON ((170 120, 330 120, 280 70, 120 70, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                170,
                120
              ],
              [
                330,
                120
              ],
              [
                280,
                70
              ],
              [
                120,
                70
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 330 120, 260 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                330,
                120
              ],
              [
                260,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/Ah-3-10: part of the boundary of a polygon touching part of the inner boundary of another polygon [dim(2){A.A.Int = B.A.Ext.h}, dim(1){A.A.oBdy.SP-V = B.A.iBdy.SP-NV}, dim(1){A.A.oBdy.V-EP = B.A.iBdy.NV-EP}]",
      "id": "07-088",
      "a": {
        "wkt": "POLYGON ((170 120, 300 120, 250 70, 120 70, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                170,
                120
              ],
              [
                300,
                120
              ],
              [
                250,
                70
              ],
              [
                120,
                70
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 330 120, 260 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                330,
                120
              ],
              [
                260,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/Ah-3-11: part of the boundary of a polygon touching part of the inner boundary of another polygon [dim(2){A.A.Int = B.A.Ext.h}, dim(1){A.A.oBdy.V-V-V = B.A.iBdy.NV-V-NV}]",
      "id": "07-089",
      "a": {
        "wkt": "POLYGON ((190 100, 310 100, 260 50, 140 50, 190 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                190,
                100
              ],
              [
                310,
                100
              ],
              [
                260,
                50
              ],
              [
                140,
                50
              ],
              [
                190,
                100
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 330 120, 260 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                330,
                120
              ],
              [
                260,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/Ah-5-1: an entire polygon within another polygon which has a hole [dim(2){A.A.Ext = B.A.Int}, dim(2){A.A.Int = B.A.Int}]",
      "id": "07-090",
      "a": {
        "wkt": "POLYGON ((280 130, 360 130, 270 40, 190 40, 280 130))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                280,
                130
              ],
              [
                360,
                130
              ],
              [
                270,
                40
              ],
              [
                190,
                40
              ],
              [
                280,
                130
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 250 120, 180 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                250,
                120
              ],
              [
                180,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "2FF1FF212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/Ah-5-2: an entire polygon within another polygon which has a hole [dim(2){A.A.Int = B.A.Int}, dim(2){A.A.Ext = B.A.Int}]",
      "id": "07-091",
      "a": {
        "wkt": "POLYGON ((220 80, 180 40, 80 40, 170 130, 270 130, 230 90, 300 90, 250 30, 280 30, 390 140, 150 140, 40 30, 230 30, 280 80, 220 80))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                220,
                80
              ],
              [
                180,
                40
              ],
              [
                80,
                40
              ],
              [
                170,
                130
              ],
              [
                270,
                130
              ],
              [
                230,
                90
              ],
              [
                300,
                90
              ],
              [
                250,
                30
              ],
              [
                280,
                30
              ],
              [
                390,
                140
              ],
              [
                150,
                140
              ],
              [
                40,
                30
              ],
              [
                230,
                30
              ],
              [
                280,
                80
              ],
              [
                220,
                80
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 250 120, 180 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                250,
                120
              ],
              [
                180,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "2FF1FF212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/Ah-5-3: polygon A within polygon B, the boundary of A touching the inner boundary of B [dim(2){A.A.Int = B.A.Int}, dim(2){A.A.Ext = B.A.Int}, dim(1){A.A.Bdy.NV-NV = B.A.iBdy.V-V}]",
      "id": "07-092",
      "a": {
        "wkt": "POLYGON ((260 130, 360 130, 280 40, 170 40, 260 130))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                260,
                130
              ],
              [
                360,
                130
              ],
              [
                280,
                40
              ],
              [
                170,
                40
              ],
              [
                260,
                130
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 250 120, 180 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                250,
                120
              ],
              [
                180,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "2FF11F212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/Ah-5-4: polygon A within polygon B, the boundary of A touching the inner boundary of B [dim(2){A.A.Int = B.A.Int}, dim(2){A.A.Ext = B.A.Int}, dim(1){A.A.Bdy.V-V = B.A.iBdy.NV-NV}]",
      "id": "07-093",
      "a": {
        "wkt": "POLYGON ((240 110, 340 110, 290 60, 190 60, 240 110))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                240,
                110
              ],
              [
                340,
                110
              ],
              [
                290,
                60
              ],
              [
                190,
                60
              ],
              [
                240,
                110
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 250 120, 180 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                250,
                120
              ],
              [
                180,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "2FF11F212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/Ah-5-5: polygon A within polygon B, the boundary of A touching the inner boundary of B [dim(2){A.A.Int = B.A.Int}, dim(2){A.A.Ext = B.A.Int}, dim(1){A.A.Bdy.V-V = B.A.iBdy.V-V}]",
      "id": "07-094",
      "a": {
        "wkt": "POLYGON ((250 120, 350 120, 280 50, 180 50, 250 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                250,
                120
              ],
              [
                350,
                120
              ],
              [
                280,
                50
              ],
              [
                180,
                50
              ],
              [
                250,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((150 150, 410 150, 280 20, 20 20, 150 150),(170 120, 250 120, 180 50, 100 50, 170 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                150,
                150
              ],
              [
                410,
                150
              ],
              [
                280,
                20
              ],
              [
                20,
                20
              ],
              [
                150,
                150
              ]
            ],
            [
              [
                170,
                120
              ],
              [
                250,
                120
              ],
              [
                180,
                50
              ],
              [
                100,
                50
              ],
              [
                170,
                120
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "2FF11F212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "Ah/Ah-1-1: same polygons (with a hole) [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.oBdy.SP-EP = B.A.oBdy.SP-EP}, dim(1){A.A.iBdy.SP-EP = B.A.iBdy.SP-EP}]",
      "id": "07-095",
      "a": {
        "wkt": "POLYGON ((230 210, 230 20, 20 20, 20 210, 230 210),(120 180, 50 50, 200 50, 120 180))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                230,
                210
              ],
              [
                230,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                210
              ],
              [
                230,
                210
              ]
            ],
            [
              [
                120,
                180
              ],
              [
                50,
                50
              ],
              [
                200,
                50
              ],
              [
                120,
                180
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((230 210, 230 20, 20 20, 20 210, 230 210),(120 180, 50 50, 200 50, 120 180))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                230,
                210
              ],
              [
                230,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                210
              ],
              [
                230,
                210
              ]
            ],
            [
              [
                120,
                180
              ],
              [
                50,
                50
              ],
              [
                200,
                50
              ],
              [
                120,
                180
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "2FFF1FFF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A2h/A2h-1-1: same polygons (with two holes) [dim(2){A.A.Int = B.A.Int}, dim(1){A.A.oBdy.SP-EP = B.A.oBdy.SP-EP}, dim(1){A.A.iBdy.SP-EP = B.A.iBdy.SP-EP}]",
      "id": "07-096",
      "a": {
        "wkt": "POLYGON ((230 210, 230 20, 20 20, 20 210, 230 210),(140 40, 40 40, 40 170, 140 40),(110 190, 210 190, 210 50, 110 190))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                230,
                210
              ],
              [
                230,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                210
              ],
              [
                230,
                210
              ]
            ],
            [
              [
                140,
                40
              ],
              [
                40,
                40
              ],
              [
                40,
                170
              ],
              [
                140,
                40
              ]
            ],
            [
              [
                110,
                190
              ],
              [
                210,
                190
              ],
              [
                210,
                50
              ],
              [
                110,
                190
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((230 210, 230 20, 20 20, 20 210, 230 210),(140 40, 40 40, 40 170, 140 40),(110 190, 210 190, 210 50, 110 190))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                230,
                210
              ],
              [
                230,
                20
              ],
              [
                20,
                20
              ],
              [
                20,
                210
              ],
              [
                230,
                210
              ]
            ],
            [
              [
                140,
                40
              ],
              [
                40,
                40
              ],
              [
                40,
                170
              ],
              [
                140,
                40
              ]
            ],
            [
              [
                110,
                190
              ],
              [
                210,
                190
              ],
              [
                210,
                50
              ],
              [
                110,
                190
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "2FFF1FFF2"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/mA-3-1: a polygon touching multipolygon at two points [dim(2){A.A.Int = B.2A.Ext}, dim(0){A.A.oBdy.CP = B.2A2.oBdy.NV}, dim(0){A.A.oBdy.V = B.2A1.oBdy.NV}]",
      "id": "07-097",
      "a": {
        "wkt": "POLYGON ((280 190, 330 150, 200 110, 150 150, 280 190))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                280,
                190
              ],
              [
                330,
                150
              ],
              [
                200,
                110
              ],
              [
                150,
                150
              ],
              [
                280,
                190
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((140 110, 260 110, 170 20, 50 20, 140 110)),((300 270, 420 270, 340 190, 220 190, 300 270)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  140,
                  110
                ],
                [
                  260,
                  110
                ],
                [
                  170,
                  20
                ],
                [
                  50,
                  20
                ],
                [
                  140,
                  110
                ]
              ]
            ],
            [
              [
                [
                  300,
                  270
                ],
                [
                  420,
                  270
                ],
                [
                  340,
                  190
                ],
                [
                  220,
                  190
                ],
                [
                  300,
                  270
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/mA-3-2: a polygon touching multipolygon at two points [dim(2){A.A.Int = B.2A.Ext}, dim(0){A.A.oBdy.V = B.2A1.oBdy.CP}, dim(0){A.A.oBdy.V = B.2A2.oBdy.V}]",
      "id": "07-098",
      "a": {
        "wkt": "POLYGON ((80 190, 220 190, 140 110, 0 110, 80 190))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                80,
                190
              ],
              [
                220,
                190
              ],
              [
                140,
                110
              ],
              [
                0,
                110
              ],
              [
                80,
                190
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((140 110, 260 110, 170 20, 50 20, 140 110)),((300 270, 420 270, 340 190, 220 190, 300 270)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  140,
                  110
                ],
                [
                  260,
                  110
                ],
                [
                  170,
                  20
                ],
                [
                  50,
                  20
                ],
                [
                  140,
                  110
                ]
              ]
            ],
            [
              [
                [
                  300,
                  270
                ],
                [
                  420,
                  270
                ],
                [
                  340,
                  190
                ],
                [
                  220,
                  190
                ],
                [
                  300,
                  270
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/mA-3-3: a polygon touching multipolygon at two points [dim(2){A.A.Int = B.2A.Ext}, dim(0){A.A.oBdy.V = B.2A2.oBdy.NV}, dim(0){A.A.oBdy.V = B.2A1.oBdy.NV}]",
      "id": "07-099",
      "a": {
        "wkt": "POLYGON ((330 150, 200 110, 150 150, 280 190, 330 150))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                330,
                150
              ],
              [
                200,
                110
              ],
              [
                150,
                150
              ],
              [
                280,
                190
              ],
              [
                330,
                150
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((140 110, 260 110, 170 20, 50 20, 140 110)),((300 270, 420 270, 340 190, 220 190, 300 270)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  140,
                  110
                ],
                [
                  260,
                  110
                ],
                [
                  170,
                  20
                ],
                [
                  50,
                  20
                ],
                [
                  140,
                  110
                ]
              ]
            ],
            [
              [
                [
                  300,
                  270
                ],
                [
                  420,
                  270
                ],
                [
                  340,
                  190
                ],
                [
                  220,
                  190
                ],
                [
                  300,
                  270
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/mA-3-4: a polygon touching multipolygon at one spoint [dim(2){A.A.Int = B.2A.Ext}, dim(0){A.A.oBdy.V = B.2A2.oBdy.NV}]",
      "id": "07-100",
      "a": {
        "wkt": "POLYGON ((290 190, 340 150, 220 120, 170 170, 290 190))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                290,
                190
              ],
              [
                340,
                150
              ],
              [
                220,
                120
              ],
              [
                170,
                170
              ],
              [
                290,
                190
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((140 110, 260 110, 170 20, 50 20, 140 110)),((300 270, 420 270, 340 190, 220 190, 300 270)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  140,
                  110
                ],
                [
                  260,
                  110
                ],
                [
                  170,
                  20
                ],
                [
                  50,
                  20
                ],
                [
                  140,
                  110
                ]
              ]
            ],
            [
              [
                [
                  300,
                  270
                ],
                [
                  420,
                  270
                ],
                [
                  340,
                  190
                ],
                [
                  220,
                  190
                ],
                [
                  300,
                  270
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/mA-3-5: a polygon touching multipolygon along boundaries [dim(2){A.A.Int = B.2A.Ext}, dim(1){A.A.oBdy.SP-V = B.2A2.oBdy.V-V}, dim(1){A.A.oBdy.V-V = B.2A1.oBdy.V-SP}]",
      "id": "07-101",
      "a": {
        "wkt": "POLYGON ((220 190, 340 190, 260 110, 140 110, 220 190))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                220,
                190
              ],
              [
                340,
                190
              ],
              [
                260,
                110
              ],
              [
                140,
                110
              ],
              [
                220,
                190
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((140 110, 260 110, 170 20, 50 20, 140 110)),((300 270, 420 270, 340 190, 220 190, 300 270)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  140,
                  110
                ],
                [
                  260,
                  110
                ],
                [
                  170,
                  20
                ],
                [
                  50,
                  20
                ],
                [
                  140,
                  110
                ]
              ]
            ],
            [
              [
                [
                  300,
                  270
                ],
                [
                  420,
                  270
                ],
                [
                  340,
                  190
                ],
                [
                  220,
                  190
                ],
                [
                  300,
                  270
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/mA-3-6: a polygon touching multipolygon along boundaries and at a point [dim(2){A.A.Int = B.2A.Ext}, dim(1){A.A.oBdy.V-NV = B.2A1.oBdy.NV-SP}, dim(0){A.A.oBdy.V = B.2A2.oBdy.V}]",
      "id": "07-102",
      "a": {
        "wkt": "POLYGON ((140 190, 220 190, 100 70, 20 70, 140 190))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                190
              ],
              [
                220,
                190
              ],
              [
                100,
                70
              ],
              [
                20,
                70
              ],
              [
                140,
                190
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((140 110, 260 110, 170 20, 50 20, 140 110)),((300 270, 420 270, 340 190, 220 190, 300 270)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  140,
                  110
                ],
                [
                  260,
                  110
                ],
                [
                  170,
                  20
                ],
                [
                  50,
                  20
                ],
                [
                  140,
                  110
                ]
              ]
            ],
            [
              [
                [
                  300,
                  270
                ],
                [
                  420,
                  270
                ],
                [
                  340,
                  190
                ],
                [
                  220,
                  190
                ],
                [
                  300,
                  270
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "A/mA-6-1: a polygon overlapping multipolygon [dim(2){A.A.Int = B.4A.Int}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.CP}, dim(0){A.A.Bdy.NV = B.A.Bdy.V}, dim(0){A.A.Bdy.NV = B.A.Bdy.CP}]",
      "id": "07-103",
      "a": {
        "wkt": "POLYGON ((140 220, 60 140, 140 60, 220 140, 140 220))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                140,
                220
              ],
              [
                60,
                140
              ],
              [
                140,
                60
              ],
              [
                220,
                140
              ],
              [
                140,
                220
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((100 20, 180 20, 180 100, 100 100, 100 20)),((20 100, 100 100, 100 180, 20 180, 20 100)),((100 180, 180 180, 180 260, 100 260, 100 180)),((180 100, 260 100, 260 180, 180 180, 180 100)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  100,
                  20
                ],
                [
                  180,
                  20
                ],
                [
                  180,
                  100
                ],
                [
                  100,
                  100
                ],
                [
                  100,
                  20
                ]
              ]
            ],
            [
              [
                [
                  20,
                  100
                ],
                [
                  100,
                  100
                ],
                [
                  100,
                  180
                ],
                [
                  20,
                  180
                ],
                [
                  20,
                  100
                ]
              ]
            ],
            [
              [
                [
                  100,
                  180
                ],
                [
                  180,
                  180
                ],
                [
                  180,
                  260
                ],
                [
                  100,
                  260
                ],
                [
                  100,
                  180
                ]
              ]
            ],
            [
              [
                [
                  180,
                  100
                ],
                [
                  260,
                  100
                ],
                [
                  260,
                  180
                ],
                [
                  180,
                  180
                ],
                [
                  180,
                  100
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "21210F212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "mA/mA-3-1: MultiPolygon touching MultiPolygon [dim(0){A.mA.Bdy.TP = B.mA.Bdy.TP}]",
      "id": "07-104",
      "a": {
        "wkt": "MULTIPOLYGON (((110 110, 70 200, 150 200, 110 110)),((110 110, 150 20, 70 20, 110 110)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  110,
                  110
                ],
                [
                  70,
                  200
                ],
                [
                  150,
                  200
                ],
                [
                  110,
                  110
                ]
              ]
            ],
            [
              [
                [
                  110,
                  110
                ],
                [
                  150,
                  20
                ],
                [
                  70,
                  20
                ],
                [
                  110,
                  110
                ]
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((110 110, 160 160, 210 110, 160 60, 110 110)),((110 110, 60 60, 10 110, 60 160, 110 110)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  110,
                  110
                ],
                [
                  160,
                  160
                ],
                [
                  210,
                  110
                ],
                [
                  160,
                  60
                ],
                [
                  110,
                  110
                ]
              ]
            ],
            [
              [
                [
                  110,
                  110
                ],
                [
                  60,
                  60
                ],
                [
                  10,
                  110
                ],
                [
                  60,
                  160
                ],
                [
                  110,
                  110
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "mAh/mAh-3-1: MultiPolygon touching MultiPolygon [dim(0){A.mA.Bdy.TP = B.mA.Bdy.TP}]",
      "id": "07-105",
      "a": {
        "wkt": "MULTIPOLYGON (((110 110, 70 200, 150 200, 110 110),(110 110, 100 180, 120 180, 110 110)),((110 110, 150 20, 70 20, 110 110),(110 110, 120 40, 100 40, 110 110)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  110,
                  110
                ],
                [
                  70,
                  200
                ],
                [
                  150,
                  200
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  100,
                  180
                ],
                [
                  120,
                  180
                ],
                [
                  110,
                  110
                ]
              ]
            ],
            [
              [
                [
                  110,
                  110
                ],
                [
                  150,
                  20
                ],
                [
                  70,
                  20
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  120,
                  40
                ],
                [
                  100,
                  40
                ],
                [
                  110,
                  110
                ]
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((110 110, 160 160, 210 110, 160 60, 110 110),(110 110, 160 130, 160 90, 110 110)),((110 110, 60 60, 10 110, 60 160, 110 110),(110 110, 60 90, 60 130, 110 110)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  110,
                  110
                ],
                [
                  160,
                  160
                ],
                [
                  210,
                  110
                ],
                [
                  160,
                  60
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  160,
                  130
                ],
                [
                  160,
                  90
                ],
                [
                  110,
                  110
                ]
              ]
            ],
            [
              [
                [
                  110,
                  110
                ],
                [
                  60,
                  60
                ],
                [
                  10,
                  110
                ],
                [
                  60,
                  160
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  60,
                  90
                ],
                [
                  60,
                  130
                ],
                [
                  110,
                  110
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F01212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "mAh/mAh-3-2: MultiPolygon touching MultiPolygon [dim(1){A.mA.Bdy.NV-EP = B.mA.Bdy.V-SP}, dim(1){A.mA.Bdy.SP-NV = B.mA.Bdy.EP-V}]",
      "id": "07-106",
      "a": {
        "wkt": "MULTIPOLYGON (((110 110, 70 200, 200 200, 110 110),(110 110, 100 180, 120 180, 110 110)),((110 110, 200 20, 70 20, 110 110),(110 110, 120 40, 100 40, 110 110)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  110,
                  110
                ],
                [
                  70,
                  200
                ],
                [
                  200,
                  200
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  100,
                  180
                ],
                [
                  120,
                  180
                ],
                [
                  110,
                  110
                ]
              ]
            ],
            [
              [
                [
                  110,
                  110
                ],
                [
                  200,
                  20
                ],
                [
                  70,
                  20
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  120,
                  40
                ],
                [
                  100,
                  40
                ],
                [
                  110,
                  110
                ]
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((110 110, 160 160, 210 110, 160 60, 110 110),(110 110, 160 130, 160 90, 110 110)),((110 110, 60 60, 10 110, 60 160, 110 110),(110 110, 60 90, 60 130, 110 110)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  110,
                  110
                ],
                [
                  160,
                  160
                ],
                [
                  210,
                  110
                ],
                [
                  160,
                  60
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  160,
                  130
                ],
                [
                  160,
                  90
                ],
                [
                  110,
                  110
                ]
              ]
            ],
            [
              [
                [
                  110,
                  110
                ],
                [
                  60,
                  60
                ],
                [
                  10,
                  110
                ],
                [
                  60,
                  160
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  60,
                  90
                ],
                [
                  60,
                  130
                ],
                [
                  110,
                  110
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "mAh/mAh-3-3: MultiPolygon touching MultiPolygon [dim(1){A.mA.Bdy.SP-NV = B.mA.Bdy.EP-V}, dim(1){A.mA.Bdy.NV-EP = B.mA.Bdy.V-SP}, dim(1){A.mA.Bdy.NV-EP = B.mA.Bdy.V-SP}, dim(1){A.mA.Bdy.SP-NV = B.mA.Bdy.EP-V}]",
      "id": "07-107",
      "a": {
        "wkt": "MULTIPOLYGON (((110 110, 20 200, 200 200, 110 110),(110 110, 100 180, 120 180, 110 110)),((110 110, 200 20, 20 20, 110 110),(110 110, 120 40, 100 40, 110 110)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  110,
                  110
                ],
                [
                  20,
                  200
                ],
                [
                  200,
                  200
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  100,
                  180
                ],
                [
                  120,
                  180
                ],
                [
                  110,
                  110
                ]
              ]
            ],
            [
              [
                [
                  110,
                  110
                ],
                [
                  200,
                  20
                ],
                [
                  20,
                  20
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  120,
                  40
                ],
                [
                  100,
                  40
                ],
                [
                  110,
                  110
                ]
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((110 110, 160 160, 210 110, 160 60, 110 110),(110 110, 160 130, 160 90, 110 110)),((110 110, 60 60, 10 110, 60 160, 110 110),(110 110, 60 90, 60 130, 110 110)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  110,
                  110
                ],
                [
                  160,
                  160
                ],
                [
                  210,
                  110
                ],
                [
                  160,
                  60
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  160,
                  130
                ],
                [
                  160,
                  90
                ],
                [
                  110,
                  110
                ]
              ]
            ],
            [
              [
                [
                  110,
                  110
                ],
                [
                  60,
                  60
                ],
                [
                  10,
                  110
                ],
                [
                  60,
                  160
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  60,
                  90
                ],
                [
                  60,
                  130
                ],
                [
                  110,
                  110
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "mAh/mAh-6-1: MultiPolygon touching MultiPolygon [dim(2){A.mA.Int = B.mA.Int}]",
      "id": "07-108",
      "a": {
        "wkt": "MULTIPOLYGON (((110 110, 70 200, 200 200, 110 110),(110 110, 100 180, 120 180, 110 110)),((110 110, 200 20, 70 20, 110 110),(110 110, 120 40, 100 40, 110 110)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  110,
                  110
                ],
                [
                  70,
                  200
                ],
                [
                  200,
                  200
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  100,
                  180
                ],
                [
                  120,
                  180
                ],
                [
                  110,
                  110
                ]
              ]
            ],
            [
              [
                [
                  110,
                  110
                ],
                [
                  200,
                  20
                ],
                [
                  70,
                  20
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  120,
                  40
                ],
                [
                  100,
                  40
                ],
                [
                  110,
                  110
                ]
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((110 110, 160 160, 210 110, 160 60, 110 110),(110 110, 160 130, 160 90, 110 110)),((110 110, 60 60, 10 110, 60 160, 110 110),(110 110, 60 90, 60 130, 110 110)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  110,
                  110
                ],
                [
                  160,
                  160
                ],
                [
                  210,
                  110
                ],
                [
                  160,
                  60
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  160,
                  130
                ],
                [
                  160,
                  90
                ],
                [
                  110,
                  110
                ]
              ]
            ],
            [
              [
                [
                  110,
                  110
                ],
                [
                  60,
                  60
                ],
                [
                  10,
                  110
                ],
                [
                  60,
                  160
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  60,
                  90
                ],
                [
                  60,
                  130
                ],
                [
                  110,
                  110
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      }
    },
    {
      "group": "TestRelateAA",
      "category": "relate",
      "title": "mAh/mAh-6-2: MultiPolygon touching MultiPolygon [dim(2){A.mA.Int = B.mA.Int}]",
      "id": "07-109",
      "a": {
        "wkt": "MULTIPOLYGON (((110 110, 70 200, 200 200, 110 110),(110 110, 100 180, 120 180, 110 110)),((110 110, 200 20, 70 20, 110 110),(110 110, 120 40, 100 40, 110 110)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  110,
                  110
                ],
                [
                  70,
                  200
                ],
                [
                  200,
                  200
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  100,
                  180
                ],
                [
                  120,
                  180
                ],
                [
                  110,
                  110
                ]
              ]
            ],
            [
              [
                [
                  110,
                  110
                ],
                [
                  200,
                  20
                ],
                [
                  70,
                  20
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  120,
                  40
                ],
                [
                  100,
                  40
                ],
                [
                  110,
                  110
                ]
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((110 110, 70 200, 210 110, 70 20, 110 110),(110 110, 110 140, 150 110, 110 80, 110 110)),((110 110, 60 60, 10 110, 60 160, 110 110),(110 110, 60 90, 60 130, 110 110)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  110,
                  110
                ],
                [
                  70,
                  200
                ],
                [
                  210,
                  110
                ],
                [
                  70,
                  20
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  110,
                  140
                ],
                [
                  150,
                  110
                ],
                [
                  110,
                  80
                ],
                [
                  110,
                  110
                ]
              ]
            ],
            [
              [
                [
                  110,
                  110
                ],
                [
                  60,
                  60
                ],
                [
                  10,
                  110
                ],
                [
                  60,
                  160
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  60,
                  90
                ],
                [
                  60,
                  130
                ],
                [
                  110,
                  110
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      }
    },
    {
      "group": "TestRelateAC",
      "category": "relate",
      "title": "AC A-shells overlapping B-shell at A-vertex",
      "id": "08-001",
      "a": {
        "wkt": "POLYGON ((100 60, 140 100, 100 140, 60 100, 100 60))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                60
              ],
              [
                140,
                100
              ],
              [
                100,
                140
              ],
              [
                60,
                100
              ],
              [
                100,
                60
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((80 40, 120 40, 120 80, 80 80, 80 40)),((120 80, 160 80, 160 120, 120 120, 120 80)),((80 120, 120 120, 120 160, 80 160, 80 120)),((40 80, 80 80, 80 120, 40 120, 40 80)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  80,
                  40
                ],
                [
                  120,
                  40
                ],
                [
                  120,
                  80
                ],
                [
                  80,
                  80
                ],
                [
                  80,
                  40
                ]
              ]
            ],
            [
              [
                [
                  120,
                  80
                ],
                [
                  160,
                  80
                ],
                [
                  160,
                  120
                ],
                [
                  120,
                  120
                ],
                [
                  120,
                  80
                ]
              ]
            ],
            [
              [
                [
                  80,
                  120
                ],
                [
                  120,
                  120
                ],
                [
                  120,
                  160
                ],
                [
                  80,
                  160
                ],
                [
                  80,
                  120
                ]
              ]
            ],
            [
              [
                [
                  40,
                  80
                ],
                [
                  80,
                  80
                ],
                [
                  80,
                  120
                ],
                [
                  40,
                  120
                ],
                [
                  40,
                  80
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "21210F212"
      }
    },
    {
      "group": "TestFunctionPP",
      "category": "function",
      "title": "PP - point contained in both A and B",
      "id": "09-001",
      "a": {
        "wkt": "POINT (100 100)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            100,
            100
          ]
        }
      },
      "b": {
        "wkt": "POINT (100 100)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            100,
            100
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "0FFFFFFF2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POINT (100 100)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              100,
              100
            ]
          }
        },
        "intersection": {
          "wkt": "POINT (100 100)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              100,
              100
            ]
          }
        },
        "union": {
          "wkt": "POINT (100 100)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              100,
              100
            ]
          }
        },
        "difference": {
          "wkt": "GEOMETRYCOLLECTION EMPTY",
          "geometry": null
        },
        "symDifference": {
          "wkt": "GEOMETRYCOLLECTION EMPTY",
          "geometry": null
        }
      }
    },
    {
      "group": "TestFunctionPP",
      "category": "function",
      "title": "PP - A different from B",
      "id": "09-002",
      "a": {
        "wkt": "POINT (100 100)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            100,
            100
          ]
        }
      },
      "b": {
        "wkt": "POINT (200 200)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            200,
            200
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF0F2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POINT (100 100)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              100,
              100
            ]
          }
        },
        "intersection": {
          "wkt": "GEOMETRYCOLLECTION EMPTY",
          "geometry": null
        },
        "union": {
          "wkt": "MULTIPOINT (100 100, 200 200)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                100,
                100
              ],
              [
                200,
                200
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POINT (100 100)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              100,
              100
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOINT (100 100, 200 200)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                100,
                100
              ],
              [
                200,
                200
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionPP",
      "category": "function",
      "title": "PmP - point in A contained in B",
      "id": "09-003",
      "a": {
        "wkt": "POINT (100 100)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            100,
            100
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOINT (100 100, 200 200)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              100,
              100
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF0F2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POINT (100 100)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              100,
              100
            ]
          }
        },
        "intersection": {
          "wkt": "POINT (100 100)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              100,
              100
            ]
          }
        },
        "union": {
          "wkt": "MULTIPOINT (100 100, 200 200)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                100,
                100
              ],
              [
                200,
                200
              ]
            ]
          }
        },
        "difference": {
          "wkt": "GEOMETRYCOLLECTION EMPTY",
          "geometry": null
        },
        "symDifference": {
          "wkt": "POINT (200 200)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              200,
              200
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionPP",
      "category": "function",
      "title": "mPmP - points in A only, B only, and in both",
      "id": "09-004",
      "a": {
        "wkt": "MULTIPOINT (100 100, 200 200, 300 300, 500 500)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              100,
              100
            ],
            [
              200,
              200
            ],
            [
              300,
              300
            ],
            [
              500,
              500
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOINT (100 100, 200 200, 400 400, 600 600)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              100,
              100
            ],
            [
              200,
              200
            ],
            [
              400,
              400
            ],
            [
              600,
              600
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "0F0FFF0F2"
      },
      "functions": {
        "convexHull": {
          "wkt": "LINESTRING (100 100, 500 500)",
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                100,
                100
              ],
              [
                500,
                500
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOINT (100 100, 200 200)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                100,
                100
              ],
              [
                200,
                200
              ]
            ]
          }
        },
        "union": {
          "wkt": "MULTIPOINT (100 100, 200 200, 300 300, 400 400, 500 500, 600 600)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                100,
                100
              ],
              [
                200,
                200
              ],
              [
                300,
                300
              ],
              [
                400,
                400
              ],
              [
                500,
                500
              ],
              [
                600,
                600
              ]
            ]
          }
        },
        "difference": {
          "wkt": "MULTIPOINT (300 300, 500 500)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                300,
                300
              ],
              [
                500,
                500
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOINT (300 300, 400 400, 500 500, 600 600)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                300,
                300
              ],
              [
                400,
                400
              ],
              [
                500,
                500
              ],
              [
                600,
                600
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionPP",
      "category": "function",
      "title": "PP - point contained in both A and B",
      "id": "09-005",
      "a": {
        "wkt": "POINT (80 200)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            80,
            200
          ]
        }
      },
      "b": {
        "wkt": "POINT (80 200)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            80,
            200
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "0FFFFFFF2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POINT (80 200)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              80,
              200
            ]
          }
        },
        "intersection": {
          "wkt": "POINT (80 200)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              80,
              200
            ]
          }
        },
        "union": {
          "wkt": "POINT (80 200)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              80,
              200
            ]
          }
        },
        "difference": {
          "wkt": "GEOMETRYCOLLECTION EMPTY",
          "geometry": null
        },
        "symDifference": {
          "wkt": "GEOMETRYCOLLECTION EMPTY",
          "geometry": null
        }
      }
    },
    {
      "group": "TestFunctionPP",
      "category": "function",
      "title": "PP - A different from B",
      "id": "09-006",
      "a": {
        "wkt": "POINT (80 200)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            80,
            200
          ]
        }
      },
      "b": {
        "wkt": "POINT (260 80)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            260,
            80
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF0F2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POINT (80 200)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              80,
              200
            ]
          }
        },
        "intersection": {
          "wkt": "GEOMETRYCOLLECTION EMPTY",
          "geometry": null
        },
        "union": {
          "wkt": "MULTIPOINT (80 200, 260 80)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                80,
                200
              ],
              [
                260,
                80
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POINT (80 200)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              80,
              200
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOINT (80 200, 260 80)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                80,
                200
              ],
              [
                260,
                80
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionPP",
      "category": "function",
      "title": "PP - A different from B, same y",
      "id": "09-007",
      "a": {
        "wkt": "POINT (60 260)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            60,
            260
          ]
        }
      },
      "b": {
        "wkt": "POINT (120 260)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            120,
            260
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF0F2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POINT (60 260)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              60,
              260
            ]
          }
        },
        "intersection": {
          "wkt": "GEOMETRYCOLLECTION EMPTY",
          "geometry": null
        },
        "union": {
          "wkt": "MULTIPOINT (60 260, 120 260)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                60,
                260
              ],
              [
                120,
                260
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POINT (60 260)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              60,
              260
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOINT (60 260, 120 260)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                60,
                260
              ],
              [
                120,
                260
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionPP",
      "category": "function",
      "title": "PP - A different from B, same x",
      "id": "09-008",
      "a": {
        "wkt": "POINT (80 80)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            80,
            80
          ]
        }
      },
      "b": {
        "wkt": "POINT (80 280)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            80,
            280
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF0FFF0F2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POINT (80 80)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              80,
              80
            ]
          }
        },
        "intersection": {
          "wkt": "GEOMETRYCOLLECTION EMPTY",
          "geometry": null
        },
        "union": {
          "wkt": "MULTIPOINT (80 80, 80 280)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                80,
                80
              ],
              [
                80,
                280
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POINT (80 80)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              80,
              80
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOINT (80 80, 80 280)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                80,
                80
              ],
              [
                80,
                280
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionPL",
      "category": "function",
      "title": "mPL - points in I and E of line",
      "id": "10-001",
      "a": {
        "wkt": "MULTIPOINT (40 90, 20 20, 70 70)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              40,
              90
            ],
            [
              20,
              20
            ],
            [
              70,
              70
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 20, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "000FFF102"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((20 20, 40 90, 70 70, 20 20))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  20,
                  20
                ],
                [
                  40,
                  90
                ],
                [
                  70,
                  70
                ],
                [
                  20,
                  20
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOINT (20 20, 70 70)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                20,
                20
              ],
              [
                70,
                70
              ]
            ]
          }
        },
        "union": {
          "wkt": "GEOMETRYCOLLECTION (POINT (40 90), LINESTRING (20 20, 100 100))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  40,
                  90
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    20,
                    20
                  ],
                  [
                    100,
                    100
                  ]
                ]
              }
            ]
          }
        },
        "difference": {
          "wkt": "POINT (40 90)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              40,
              90
            ]
          }
        },
        "symDifference": {
          "wkt": "GEOMETRYCOLLECTION (POINT (40 90), LINESTRING (20 20, 100 100))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  40,
                  90
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    20,
                    20
                  ],
                  [
                    100,
                    100
                  ]
                ]
              }
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionPL",
      "category": "function",
      "title": "mPL - points in I and E of line, line self-intersecting",
      "id": "10-002",
      "a": {
        "wkt": "MULTIPOINT (40 90, 20 20, 70 70)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              40,
              90
            ],
            [
              20,
              20
            ],
            [
              70,
              70
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (20 20, 110 110, 170 50, 130 10, 70 70)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              20,
              20
            ],
            [
              110,
              110
            ],
            [
              170,
              50
            ],
            [
              130,
              10
            ],
            [
              70,
              70
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "F00FFF1F2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((20 20, 40 90, 70 70, 20 20))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  20,
                  20
                ],
                [
                  40,
                  90
                ],
                [
                  70,
                  70
                ],
                [
                  20,
                  20
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOINT (20 20, 70 70)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                20,
                20
              ],
              [
                70,
                70
              ]
            ]
          }
        },
        "union": {
          "wkt": "GEOMETRYCOLLECTION (POINT (40 90), LINESTRING (20 20, 70 70), LINESTRING (70 70, 110 110, 170 50, 130 10, 70 70))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  40,
                  90
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    20,
                    20
                  ],
                  [
                    70,
                    70
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    70,
                    70
                  ],
                  [
                    110,
                    110
                  ],
                  [
                    170,
                    50
                  ],
                  [
                    130,
                    10
                  ],
                  [
                    70,
                    70
                  ]
                ]
              }
            ]
          }
        },
        "difference": {
          "wkt": "POINT (40 90)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              40,
              90
            ]
          }
        },
        "symDifference": {
          "wkt": "GEOMETRYCOLLECTION (POINT (40 90), LINESTRING (20 20, 70 70), LINESTRING (70 70, 110 110, 170 50, 130 10, 70 70))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  40,
                  90
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    20,
                    20
                  ],
                  [
                    70,
                    70
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    70,
                    70
                  ],
                  [
                    110,
                    110
                  ],
                  [
                    170,
                    50
                  ],
                  [
                    130,
                    10
                  ],
                  [
                    70,
                    70
                  ]
                ]
              }
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionPL",
      "category": "function",
      "title": "mPmL - points in I, B and E of lines, lines overlap, points overlap",
      "id": "10-003",
      "a": {
        "wkt": "MULTILINESTRING ((100 320, 100 220),(100 180, 200 180),(220 180, 220 320),(220 320, 160 320),(100 320, 100 220),(100 180, 200 180),(220 180, 220 320),(220 320, 160 320),(100 220, 100 320))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                100,
                320
              ],
              [
                100,
                220
              ]
            ],
            [
              [
                100,
                180
              ],
              [
                200,
                180
              ]
            ],
            [
              [
                220,
                180
              ],
              [
                220,
                320
              ]
            ],
            [
              [
                220,
                320
              ],
              [
                160,
                320
              ]
            ],
            [
              [
                100,
                320
              ],
              [
                100,
                220
              ]
            ],
            [
              [
                100,
                180
              ],
              [
                200,
                180
              ]
            ],
            [
              [
                220,
                180
              ],
              [
                220,
                320
              ]
            ],
            [
              [
                220,
                320
              ],
              [
                160,
                320
              ]
            ],
            [
              [
                100,
                220
              ],
              [
                100,
                320
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOINT (100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320, 100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              100,
              320
            ],
            [
              100,
              260
            ],
            [
              100,
              220
            ],
            [
              100,
              200
            ],
            [
              100,
              180
            ],
            [
              120,
              180
            ],
            [
              200,
              180
            ],
            [
              220,
              180
            ],
            [
              220,
              260
            ],
            [
              220,
              320
            ],
            [
              200,
              320
            ],
            [
              160,
              320
            ],
            [
              140,
              320
            ],
            [
              120,
              320
            ],
            [
              100,
              320
            ],
            [
              100,
              260
            ],
            [
              100,
              220
            ],
            [
              100,
              200
            ],
            [
              100,
              180
            ],
            [
              120,
              180
            ],
            [
              200,
              180
            ],
            [
              220,
              180
            ],
            [
              220,
              260
            ],
            [
              220,
              320
            ],
            [
              200,
              320
            ],
            [
              160,
              320
            ],
            [
              140,
              320
            ],
            [
              120,
              320
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F10FF0F2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((100 180, 100 320, 220 320, 220 180, 100 180))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  100,
                  180
                ],
                [
                  100,
                  320
                ],
                [
                  220,
                  320
                ],
                [
                  220,
                  180
                ],
                [
                  100,
                  180
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOINT (100 180, 100 220, 100 260, 100 320, 120 180, 160 320, 200 180, 200 320, 220 180, 220 260, 220 320)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                100,
                180
              ],
              [
                100,
                220
              ],
              [
                100,
                260
              ],
              [
                100,
                320
              ],
              [
                120,
                180
              ],
              [
                160,
                320
              ],
              [
                200,
                180
              ],
              [
                200,
                320
              ],
              [
                220,
                180
              ],
              [
                220,
                260
              ],
              [
                220,
                320
              ]
            ]
          }
        },
        "union": {
          "wkt": "GEOMETRYCOLLECTION (POINT (100 200), POINT (120 320), POINT (140 320), LINESTRING (100 320, 100 220), LINESTRING (100 180, 200 180), LINESTRING (220 180, 220 320), LINESTRING (220 320, 160 320))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  100,
                  200
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  120,
                  320
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  140,
                  320
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    100,
                    320
                  ],
                  [
                    100,
                    220
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    100,
                    180
                  ],
                  [
                    200,
                    180
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    180
                  ],
                  [
                    220,
                    320
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    320
                  ],
                  [
                    160,
                    320
                  ]
                ]
              }
            ]
          }
        },
        "difference": {
          "wkt": "MULTILINESTRING ((100 320, 100 220),(100 180, 200 180),(220 180, 220 320),(220 320, 160 320))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  100,
                  320
                ],
                [
                  100,
                  220
                ]
              ],
              [
                [
                  100,
                  180
                ],
                [
                  200,
                  180
                ]
              ],
              [
                [
                  220,
                  180
                ],
                [
                  220,
                  320
                ]
              ],
              [
                [
                  220,
                  320
                ],
                [
                  160,
                  320
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "GEOMETRYCOLLECTION (POINT (100 200), POINT (120 320), POINT (140 320), LINESTRING (100 320, 100 220), LINESTRING (100 180, 200 180), LINESTRING (220 180, 220 320), LINESTRING (220 320, 160 320))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  100,
                  200
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  120,
                  320
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  140,
                  320
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    100,
                    320
                  ],
                  [
                    100,
                    220
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    100,
                    180
                  ],
                  [
                    200,
                    180
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    180
                  ],
                  [
                    220,
                    320
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    320
                  ],
                  [
                    160,
                    320
                  ]
                ]
              }
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionPL",
      "category": "function",
      "title": "mPmL - points in I, B and E of lines, lines overlap, points overlap, x &lt;0, y &lt; 0",
      "id": "10-004",
      "a": {
        "wkt": "MULTILINESTRING ((-500 -140, -500 -280, -320 -280, -320 -140, -500 -140, -500 -340),(-500 -140, -320 -140, -500 -140, -320 -140, -500 -140))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                -500,
                -140
              ],
              [
                -500,
                -280
              ],
              [
                -320,
                -280
              ],
              [
                -320,
                -140
              ],
              [
                -500,
                -140
              ],
              [
                -500,
                -340
              ]
            ],
            [
              [
                -500,
                -140
              ],
              [
                -320,
                -140
              ],
              [
                -500,
                -140
              ],
              [
                -320,
                -140
              ],
              [
                -500,
                -140
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOINT (-560 -180, -420 -180, -500 -220, -500 -340, -500 -280, -500 -140, -320 -140, -420 -140, -320 -180, -280 -140, -320 -120, -560 -180, -420 -180, -500 -220, -500 -340, -500 -280, -500 -140, -320 -140, -420 -140, -320 -180, -280 -140, -320 -120)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              -560,
              -180
            ],
            [
              -420,
              -180
            ],
            [
              -500,
              -220
            ],
            [
              -500,
              -340
            ],
            [
              -500,
              -280
            ],
            [
              -500,
              -140
            ],
            [
              -320,
              -140
            ],
            [
              -420,
              -140
            ],
            [
              -320,
              -180
            ],
            [
              -280,
              -140
            ],
            [
              -320,
              -120
            ],
            [
              -560,
              -180
            ],
            [
              -420,
              -180
            ],
            [
              -500,
              -220
            ],
            [
              -500,
              -340
            ],
            [
              -500,
              -280
            ],
            [
              -500,
              -140
            ],
            [
              -320,
              -140
            ],
            [
              -420,
              -140
            ],
            [
              -320,
              -180
            ],
            [
              -280,
              -140
            ],
            [
              -320,
              -120
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F10FF0F2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((-500 -340, -500 -140, -320 -140, -320 -280, -500 -340))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  -500,
                  -340
                ],
                [
                  -500,
                  -140
                ],
                [
                  -320,
                  -140
                ],
                [
                  -320,
                  -280
                ],
                [
                  -500,
                  -340
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOINT (-500 -340, -500 -280, -500 -220, -500 -140, -420 -140, -320 -180, -320 -140)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                -500,
                -340
              ],
              [
                -500,
                -280
              ],
              [
                -500,
                -220
              ],
              [
                -500,
                -140
              ],
              [
                -420,
                -140
              ],
              [
                -320,
                -180
              ],
              [
                -320,
                -140
              ]
            ]
          }
        },
        "union": {
          "wkt": "GEOMETRYCOLLECTION (POINT (-560 -180), POINT (-420 -180), POINT (-320 -120), POINT (-280 -140), LINESTRING (-500 -140, -500 -280), LINESTRING (-500 -280, -320 -280, -320 -140), LINESTRING (-320 -140, -500 -140), LINESTRING (-500 -280, -500 -340))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  -560,
                  -180
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  -420,
                  -180
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  -320,
                  -120
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  -280,
                  -140
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    -500,
                    -140
                  ],
                  [
                    -500,
                    -280
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    -500,
                    -280
                  ],
                  [
                    -320,
                    -280
                  ],
                  [
                    -320,
                    -140
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    -320,
                    -140
                  ],
                  [
                    -500,
                    -140
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    -500,
                    -280
                  ],
                  [
                    -500,
                    -340
                  ]
                ]
              }
            ]
          }
        },
        "difference": {
          "wkt": "MULTILINESTRING ((-500 -140, -500 -280),(-500 -280, -320 -280, -320 -140),(-320 -140, -500 -140),(-500 -280, -500 -340))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  -500,
                  -140
                ],
                [
                  -500,
                  -280
                ]
              ],
              [
                [
                  -500,
                  -280
                ],
                [
                  -320,
                  -280
                ],
                [
                  -320,
                  -140
                ]
              ],
              [
                [
                  -320,
                  -140
                ],
                [
                  -500,
                  -140
                ]
              ],
              [
                [
                  -500,
                  -280
                ],
                [
                  -500,
                  -340
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "GEOMETRYCOLLECTION (POINT (-560 -180), POINT (-420 -180), POINT (-320 -120), POINT (-280 -140), LINESTRING (-500 -140, -500 -280), LINESTRING (-500 -280, -320 -280, -320 -140), LINESTRING (-320 -140, -500 -140), LINESTRING (-500 -280, -500 -340))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  -560,
                  -180
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  -420,
                  -180
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  -320,
                  -120
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  -280,
                  -140
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    -500,
                    -140
                  ],
                  [
                    -500,
                    -280
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    -500,
                    -280
                  ],
                  [
                    -320,
                    -280
                  ],
                  [
                    -320,
                    -140
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    -320,
                    -140
                  ],
                  [
                    -500,
                    -140
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    -500,
                    -280
                  ],
                  [
                    -500,
                    -340
                  ]
                ]
              }
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionPL",
      "category": "function",
      "title": "mL - lines intersect at 1 point",
      "id": "10-005",
      "a": {
        "wkt": "MULTILINESTRING ((180 100, 140 280, 240 140, 220 120, 140 280),(140 280, 100 400, 80 380, 140 280, 40 380, 20 360, 140 280))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                180,
                100
              ],
              [
                140,
                280
              ],
              [
                240,
                140
              ],
              [
                220,
                120
              ],
              [
                140,
                280
              ]
            ],
            [
              [
                140,
                280
              ],
              [
                100,
                400
              ],
              [
                80,
                380
              ],
              [
                140,
                280
              ],
              [
                40,
                380
              ],
              [
                20,
                360
              ],
              [
                140,
                280
              ]
            ]
          ]
        }
      },
      "relationship": {
        "de9im": "\r\n      \r\n    "
      },
      "functions": {}
    },
    {
      "group": "TestFunctionPL",
      "category": "function",
      "title": "mPmL - points in I, B and E of lines, lines overlap, points overlap",
      "id": "10-006",
      "a": {
        "wkt": "MULTILINESTRING ((100 320, 100 220),(100 180, 200 180),(220 180, 220 320),(220 320, 160 320),(100 320, 100 220),(100 180, 200 180),(220 180, 220 320),(220 320, 160 320),(100 220, 100 320))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                100,
                320
              ],
              [
                100,
                220
              ]
            ],
            [
              [
                100,
                180
              ],
              [
                200,
                180
              ]
            ],
            [
              [
                220,
                180
              ],
              [
                220,
                320
              ]
            ],
            [
              [
                220,
                320
              ],
              [
                160,
                320
              ]
            ],
            [
              [
                100,
                320
              ],
              [
                100,
                220
              ]
            ],
            [
              [
                100,
                180
              ],
              [
                200,
                180
              ]
            ],
            [
              [
                220,
                180
              ],
              [
                220,
                320
              ]
            ],
            [
              [
                220,
                320
              ],
              [
                160,
                320
              ]
            ],
            [
              [
                100,
                220
              ],
              [
                100,
                320
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOINT (100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320, 100 320, 100 260, 100 220, 100 200, 100 180, 120 180, 200 180, 220 180, 220 260, 220 320, 200 320, 160 320, 140 320, 120 320)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              100,
              320
            ],
            [
              100,
              260
            ],
            [
              100,
              220
            ],
            [
              100,
              200
            ],
            [
              100,
              180
            ],
            [
              120,
              180
            ],
            [
              200,
              180
            ],
            [
              220,
              180
            ],
            [
              220,
              260
            ],
            [
              220,
              320
            ],
            [
              200,
              320
            ],
            [
              160,
              320
            ],
            [
              140,
              320
            ],
            [
              120,
              320
            ],
            [
              100,
              320
            ],
            [
              100,
              260
            ],
            [
              100,
              220
            ],
            [
              100,
              200
            ],
            [
              100,
              180
            ],
            [
              120,
              180
            ],
            [
              200,
              180
            ],
            [
              220,
              180
            ],
            [
              220,
              260
            ],
            [
              220,
              320
            ],
            [
              200,
              320
            ],
            [
              160,
              320
            ],
            [
              140,
              320
            ],
            [
              120,
              320
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F10FF0F2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((100 180, 100 320, 220 320, 220 180, 100 180))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  100,
                  180
                ],
                [
                  100,
                  320
                ],
                [
                  220,
                  320
                ],
                [
                  220,
                  180
                ],
                [
                  100,
                  180
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOINT (100 180, 100 220, 100 260, 100 320, 120 180, 160 320, 200 180, 200 320, 220 180, 220 260, 220 320)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                100,
                180
              ],
              [
                100,
                220
              ],
              [
                100,
                260
              ],
              [
                100,
                320
              ],
              [
                120,
                180
              ],
              [
                160,
                320
              ],
              [
                200,
                180
              ],
              [
                200,
                320
              ],
              [
                220,
                180
              ],
              [
                220,
                260
              ],
              [
                220,
                320
              ]
            ]
          }
        },
        "union": {
          "wkt": "GEOMETRYCOLLECTION (POINT (100 200), POINT (120 320), POINT (140 320), LINESTRING (100 320, 100 220), LINESTRING (100 180, 200 180), LINESTRING (220 180, 220 320), LINESTRING (220 320, 160 320))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  100,
                  200
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  120,
                  320
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  140,
                  320
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    100,
                    320
                  ],
                  [
                    100,
                    220
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    100,
                    180
                  ],
                  [
                    200,
                    180
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    180
                  ],
                  [
                    220,
                    320
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    320
                  ],
                  [
                    160,
                    320
                  ]
                ]
              }
            ]
          }
        },
        "difference": {
          "wkt": "MULTILINESTRING ((100 320, 100 220),(100 180, 200 180),(220 180, 220 320),(220 320, 160 320))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  100,
                  320
                ],
                [
                  100,
                  220
                ]
              ],
              [
                [
                  100,
                  180
                ],
                [
                  200,
                  180
                ]
              ],
              [
                [
                  220,
                  180
                ],
                [
                  220,
                  320
                ]
              ],
              [
                [
                  220,
                  320
                ],
                [
                  160,
                  320
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "GEOMETRYCOLLECTION (POINT (100 200), POINT (120 320), POINT (140 320), LINESTRING (100 320, 100 220), LINESTRING (100 180, 200 180), LINESTRING (220 180, 220 320), LINESTRING (220 320, 160 320))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  100,
                  200
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  120,
                  320
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  140,
                  320
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    100,
                    320
                  ],
                  [
                    100,
                    220
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    100,
                    180
                  ],
                  [
                    200,
                    180
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    180
                  ],
                  [
                    220,
                    320
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    320
                  ],
                  [
                    160,
                    320
                  ]
                ]
              }
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionPA",
      "category": "function",
      "title": "PA - point contained in simple polygon",
      "id": "11-001",
      "a": {
        "wkt": "POINT (100 100)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            100,
            100
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((50 50, 200 50, 200 200, 50 200, 50 50))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                50,
                50
              ],
              [
                200,
                50
              ],
              [
                200,
                200
              ],
              [
                50,
                200
              ],
              [
                50,
                50
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": false,
        "overlaps": false,
        "de9im": "0FFFFF212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POINT (100 100)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              100,
              100
            ]
          }
        },
        "intersection": {
          "wkt": "POINT (100 100)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              100,
              100
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((50 50, 50 200, 200 200, 200 50, 50 50))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  50,
                  50
                ],
                [
                  50,
                  200
                ],
                [
                  200,
                  200
                ],
                [
                  200,
                  50
                ],
                [
                  50,
                  50
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "GEOMETRYCOLLECTION EMPTY",
          "geometry": null
        },
        "symDifference": {
          "wkt": "POLYGON ((50 50, 50 200, 200 200, 200 50, 50 50))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  50,
                  50
                ],
                [
                  50,
                  200
                ],
                [
                  200,
                  200
                ],
                [
                  200,
                  50
                ],
                [
                  50,
                  50
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionPA",
      "category": "function",
      "title": "mPmA - points on I, B and E of touching triangles",
      "id": "11-002",
      "a": {
        "wkt": "MULTIPOLYGON (((120 320, 180 200, 240 320, 120 320)),((180 200, 240 80, 300 200, 180 200)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  120,
                  320
                ],
                [
                  180,
                  200
                ],
                [
                  240,
                  320
                ],
                [
                  120,
                  320
                ]
              ]
            ],
            [
              [
                [
                  180,
                  200
                ],
                [
                  240,
                  80
                ],
                [
                  300,
                  200
                ],
                [
                  180,
                  200
                ]
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOINT (120 320, 180 260, 180 320, 180 200, 300 200, 200 220)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              120,
              320
            ],
            [
              180,
              260
            ],
            [
              180,
              320
            ],
            [
              180,
              200
            ],
            [
              300,
              200
            ],
            [
              200,
              220
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F20F10F2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((240 80, 120 320, 240 320, 300 200, 240 80))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  240,
                  80
                ],
                [
                  120,
                  320
                ],
                [
                  240,
                  320
                ],
                [
                  300,
                  200
                ],
                [
                  240,
                  80
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOINT (120 320, 180 200, 180 260, 180 320, 300 200)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                120,
                320
              ],
              [
                180,
                200
              ],
              [
                180,
                260
              ],
              [
                180,
                320
              ],
              [
                300,
                200
              ]
            ]
          }
        },
        "union": {
          "wkt": "GEOMETRYCOLLECTION (POINT (200 220), POLYGON ((180 200, 120 320, 240 320, 180 200)), POLYGON ((180 200, 300 200, 240 80, 180 200)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  200,
                  220
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      180,
                      200
                    ],
                    [
                      120,
                      320
                    ],
                    [
                      240,
                      320
                    ],
                    [
                      180,
                      200
                    ]
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      180,
                      200
                    ],
                    [
                      300,
                      200
                    ],
                    [
                      240,
                      80
                    ],
                    [
                      180,
                      200
                    ]
                  ]
                ]
              }
            ]
          }
        },
        "difference": {
          "wkt": "MULTIPOLYGON (((180 200, 120 320, 240 320, 180 200)),((180 200, 300 200, 240 80, 180 200)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    180,
                    200
                  ],
                  [
                    120,
                    320
                  ],
                  [
                    240,
                    320
                  ],
                  [
                    180,
                    200
                  ]
                ]
              ],
              [
                [
                  [
                    180,
                    200
                  ],
                  [
                    300,
                    200
                  ],
                  [
                    240,
                    80
                  ],
                  [
                    180,
                    200
                  ]
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "GEOMETRYCOLLECTION (POINT (200 220), POLYGON ((180 200, 120 320, 240 320, 180 200)), POLYGON ((180 200, 300 200, 240 80, 180 200)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  200,
                  220
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      180,
                      200
                    ],
                    [
                      120,
                      320
                    ],
                    [
                      240,
                      320
                    ],
                    [
                      180,
                      200
                    ]
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      180,
                      200
                    ],
                    [
                      300,
                      200
                    ],
                    [
                      240,
                      80
                    ],
                    [
                      180,
                      200
                    ]
                  ]
                ]
              }
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionPA",
      "category": "function",
      "title": "mPmA - points on I, B and E of concentric doughnuts",
      "id": "11-003",
      "a": {
        "wkt": "MULTIPOLYGON (((120 80, 420 80, 420 340, 120 340, 120 80),(160 300, 160 120, 380 120, 380 300, 160 300)),((200 260, 200 160, 340 160, 340 260, 200 260),(240 220, 240 200, 300 200, 300 220, 240 220)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  120,
                  80
                ],
                [
                  420,
                  80
                ],
                [
                  420,
                  340
                ],
                [
                  120,
                  340
                ],
                [
                  120,
                  80
                ]
              ],
              [
                [
                  160,
                  300
                ],
                [
                  160,
                  120
                ],
                [
                  380,
                  120
                ],
                [
                  380,
                  300
                ],
                [
                  160,
                  300
                ]
              ]
            ],
            [
              [
                [
                  200,
                  260
                ],
                [
                  200,
                  160
                ],
                [
                  340,
                  160
                ],
                [
                  340,
                  260
                ],
                [
                  200,
                  260
                ]
              ],
              [
                [
                  240,
                  220
                ],
                [
                  240,
                  200
                ],
                [
                  300,
                  200
                ],
                [
                  300,
                  220
                ],
                [
                  240,
                  220
                ]
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOINT (200 360, 420 340, 400 100, 340 120, 200 140, 200 160, 220 180, 260 200, 200 360, 420 340, 400 100, 340 120, 200 140, 200 160, 220 180, 260 200)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              200,
              360
            ],
            [
              420,
              340
            ],
            [
              400,
              100
            ],
            [
              340,
              120
            ],
            [
              200,
              140
            ],
            [
              200,
              160
            ],
            [
              220,
              180
            ],
            [
              260,
              200
            ],
            [
              200,
              360
            ],
            [
              420,
              340
            ],
            [
              400,
              100
            ],
            [
              340,
              120
            ],
            [
              200,
              140
            ],
            [
              200,
              160
            ],
            [
              220,
              180
            ],
            [
              260,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F20F10F2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((120 80, 120 340, 420 340, 420 80, 120 80))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  120,
                  80
                ],
                [
                  120,
                  340
                ],
                [
                  420,
                  340
                ],
                [
                  420,
                  80
                ],
                [
                  120,
                  80
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOINT (200 160, 220 180, 260 200, 340 120, 400 100, 420 340)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                200,
                160
              ],
              [
                220,
                180
              ],
              [
                260,
                200
              ],
              [
                340,
                120
              ],
              [
                400,
                100
              ],
              [
                420,
                340
              ]
            ]
          }
        },
        "union": {
          "wkt": "GEOMETRYCOLLECTION (POINT (200 140), POINT (200 360), POLYGON ((120 80, 120 340, 420 340, 420 80, 120 80),(160 300, 160 120, 380 120, 380 300, 160 300)), POLYGON ((200 260, 340 260, 340 160, 200 160, 200 260),(240 220, 240 200, 300 200, 300 220, 240 220)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  200,
                  140
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  200,
                  360
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      120,
                      80
                    ],
                    [
                      120,
                      340
                    ],
                    [
                      420,
                      340
                    ],
                    [
                      420,
                      80
                    ],
                    [
                      120,
                      80
                    ]
                  ],
                  [
                    [
                      160,
                      300
                    ],
                    [
                      160,
                      120
                    ],
                    [
                      380,
                      120
                    ],
                    [
                      380,
                      300
                    ],
                    [
                      160,
                      300
                    ]
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      200,
                      260
                    ],
                    [
                      340,
                      260
                    ],
                    [
                      340,
                      160
                    ],
                    [
                      200,
                      160
                    ],
                    [
                      200,
                      260
                    ]
                  ],
                  [
                    [
                      240,
                      220
                    ],
                    [
                      240,
                      200
                    ],
                    [
                      300,
                      200
                    ],
                    [
                      300,
                      220
                    ],
                    [
                      240,
                      220
                    ]
                  ]
                ]
              }
            ]
          }
        },
        "difference": {
          "wkt": "MULTIPOLYGON (((120 80, 120 340, 420 340, 420 80, 120 80),(160 300, 160 120, 380 120, 380 300, 160 300)),((200 260, 340 260, 340 160, 200 160, 200 260),(240 220, 240 200, 300 200, 300 220, 240 220)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    120,
                    80
                  ],
                  [
                    120,
                    340
                  ],
                  [
                    420,
                    340
                  ],
                  [
                    420,
                    80
                  ],
                  [
                    120,
                    80
                  ]
                ],
                [
                  [
                    160,
                    300
                  ],
                  [
                    160,
                    120
                  ],
                  [
                    380,
                    120
                  ],
                  [
                    380,
                    300
                  ],
                  [
                    160,
                    300
                  ]
                ]
              ],
              [
                [
                  [
                    200,
                    260
                  ],
                  [
                    340,
                    260
                  ],
                  [
                    340,
                    160
                  ],
                  [
                    200,
                    160
                  ],
                  [
                    200,
                    260
                  ]
                ],
                [
                  [
                    240,
                    220
                  ],
                  [
                    240,
                    200
                  ],
                  [
                    300,
                    200
                  ],
                  [
                    300,
                    220
                  ],
                  [
                    240,
                    220
                  ]
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "GEOMETRYCOLLECTION (POINT (200 140), POINT (200 360), POLYGON ((120 80, 120 340, 420 340, 420 80, 120 80),(160 300, 160 120, 380 120, 380 300, 160 300)), POLYGON ((200 260, 340 260, 340 160, 200 160, 200 260),(240 220, 240 200, 300 200, 300 220, 240 220)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  200,
                  140
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  200,
                  360
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      120,
                      80
                    ],
                    [
                      120,
                      340
                    ],
                    [
                      420,
                      340
                    ],
                    [
                      420,
                      80
                    ],
                    [
                      120,
                      80
                    ]
                  ],
                  [
                    [
                      160,
                      300
                    ],
                    [
                      160,
                      120
                    ],
                    [
                      380,
                      120
                    ],
                    [
                      380,
                      300
                    ],
                    [
                      160,
                      300
                    ]
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      200,
                      260
                    ],
                    [
                      340,
                      260
                    ],
                    [
                      340,
                      160
                    ],
                    [
                      200,
                      160
                    ],
                    [
                      200,
                      260
                    ]
                  ],
                  [
                    [
                      240,
                      220
                    ],
                    [
                      240,
                      200
                    ],
                    [
                      300,
                      200
                    ],
                    [
                      300,
                      220
                    ],
                    [
                      240,
                      220
                    ]
                  ]
                ]
              }
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionLL",
      "category": "function",
      "title": "LL - A crosses B",
      "id": "12-001",
      "a": {
        "wkt": "LINESTRING (0 0, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              0,
              0
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (0 100, 100 0)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              0,
              100
            ],
            [
              100,
              0
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FF0102"
      },
      "functions": {
        "convexHull": {
          "wkt": "LINESTRING (0 0, 100 100)",
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                0,
                0
              ],
              [
                100,
                100
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "POINT (50 50)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              50,
              50
            ]
          }
        },
        "union": {
          "wkt": "MULTILINESTRING ((0 0, 50 50),(50 50, 100 100),(0 100, 50 50),(50 50, 100 0))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  0,
                  0
                ],
                [
                  50,
                  50
                ]
              ],
              [
                [
                  50,
                  50
                ],
                [
                  100,
                  100
                ]
              ],
              [
                [
                  0,
                  100
                ],
                [
                  50,
                  50
                ]
              ],
              [
                [
                  50,
                  50
                ],
                [
                  100,
                  0
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "MULTILINESTRING ((0 0, 50 50),(50 50, 100 100))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  0,
                  0
                ],
                [
                  50,
                  50
                ]
              ],
              [
                [
                  50,
                  50
                ],
                [
                  100,
                  100
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTILINESTRING ((0 0, 50 50),(50 50, 100 100),(0 100, 50 50),(50 50, 100 0))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  0,
                  0
                ],
                [
                  50,
                  50
                ]
              ],
              [
                [
                  50,
                  50
                ],
                [
                  100,
                  100
                ]
              ],
              [
                [
                  0,
                  100
                ],
                [
                  50,
                  50
                ]
              ],
              [
                [
                  50,
                  50
                ],
                [
                  100,
                  0
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionLL",
      "category": "function",
      "title": "LL - A shares one segment with B",
      "id": "12-002",
      "a": {
        "wkt": "LINESTRING (0 0, 100 100, 200 0)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              0,
              0
            ],
            [
              100,
              100
            ],
            [
              200,
              0
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (0 0, 100 100, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              0,
              0
            ],
            [
              100,
              100
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1F1F00102"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((0 0, 100 100, 200 0, 0 0))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  0,
                  0
                ],
                [
                  100,
                  100
                ],
                [
                  200,
                  0
                ],
                [
                  0,
                  0
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "LINESTRING (0 0, 100 100)",
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                0,
                0
              ],
              [
                100,
                100
              ]
            ]
          }
        },
        "union": {
          "wkt": "MULTILINESTRING ((0 0, 100 100),(100 100, 200 0),(100 100, 200 200))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  0,
                  0
                ],
                [
                  100,
                  100
                ]
              ],
              [
                [
                  100,
                  100
                ],
                [
                  200,
                  0
                ]
              ],
              [
                [
                  100,
                  100
                ],
                [
                  200,
                  200
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "LINESTRING (100 100, 200 0)",
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                100,
                100
              ],
              [
                200,
                0
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTILINESTRING ((100 100, 200 0),(100 100, 200 200))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  100,
                  100
                ],
                [
                  200,
                  0
                ]
              ],
              [
                [
                  100,
                  100
                ],
                [
                  200,
                  200
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionLL",
      "category": "function",
      "title": "LL - A and B disjoint",
      "id": "12-003",
      "a": {
        "wkt": "LINESTRING (40 360, 40 220, 120 360)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              360
            ],
            [
              40,
              220
            ],
            [
              120,
              360
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (120 340, 60 220, 140 220, 140 360)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              120,
              340
            ],
            [
              60,
              220
            ],
            [
              140,
              220
            ],
            [
              140,
              360
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1FF0102"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((40 220, 40 360, 120 360, 40 220))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  40,
                  220
                ],
                [
                  40,
                  360
                ],
                [
                  120,
                  360
                ],
                [
                  40,
                  220
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "GEOMETRYCOLLECTION EMPTY",
          "geometry": null
        },
        "union": {
          "wkt": "MULTILINESTRING ((40 360, 40 220, 120 360),(120 340, 60 220, 140 220, 140 360))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  40,
                  360
                ],
                [
                  40,
                  220
                ],
                [
                  120,
                  360
                ]
              ],
              [
                [
                  120,
                  340
                ],
                [
                  60,
                  220
                ],
                [
                  140,
                  220
                ],
                [
                  140,
                  360
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "LINESTRING (40 360, 40 220, 120 360)",
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                40,
                360
              ],
              [
                40,
                220
              ],
              [
                120,
                360
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTILINESTRING ((40 360, 40 220, 120 360),(120 340, 60 220, 140 220, 140 360))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  40,
                  360
                ],
                [
                  40,
                  220
                ],
                [
                  120,
                  360
                ]
              ],
              [
                [
                  120,
                  340
                ],
                [
                  60,
                  220
                ],
                [
                  140,
                  220
                ],
                [
                  140,
                  360
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionLL",
      "category": "function",
      "title": "LL - A and B intersect frequently",
      "id": "12-004",
      "a": {
        "wkt": "LINESTRING (220 240, 200 220, 60 320, 40 300, 180 200, 160 180, 20 280)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              220,
              240
            ],
            [
              200,
              220
            ],
            [
              60,
              320
            ],
            [
              40,
              300
            ],
            [
              180,
              200
            ],
            [
              160,
              180
            ],
            [
              20,
              280
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (220 240, 140 160, 120 180, 220 280, 200 300, 100 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              220,
              240
            ],
            [
              140,
              160
            ],
            [
              120,
              180
            ],
            [
              220,
              280
            ],
            [
              200,
              300
            ],
            [
              100,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "1F1F00102"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((160 180, 20 280, 60 320, 220 240, 160 180))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  160,
                  180
                ],
                [
                  20,
                  280
                ],
                [
                  60,
                  320
                ],
                [
                  220,
                  240
                ],
                [
                  160,
                  180
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "GEOMETRYCOLLECTION (POINT (113.33333333333333 213.33333333333334), POINT (133.33333333333334 233.33333333333334), POINT (136.66666666666666 196.66666666666666), POINT (153.33333333333334 253.33333333333334), POINT (156.66666666666666 216.66666666666666), POINT (176.66666666666666 236.66666666666666), LINESTRING (220 240, 200 220), LINESTRING (180 200, 160 180))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  113.33333333333333,
                  213.33333333333334
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  133.33333333333334,
                  233.33333333333334
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  136.66666666666666,
                  196.66666666666666
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  153.33333333333334,
                  253.33333333333334
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  156.66666666666666,
                  216.66666666666666
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  176.66666666666666,
                  236.66666666666666
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    240
                  ],
                  [
                    200,
                    220
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    180,
                    200
                  ],
                  [
                    160,
                    180
                  ]
                ]
              }
            ]
          }
        },
        "union": {
          "wkt": "MULTILINESTRING ((220 240, 200 220),(200 220, 176.66666666666666 236.66666666666666),(176.66666666666666 236.66666666666666, 153.33333333333334 253.33333333333334),(153.33333333333334 253.33333333333334, 60 320, 40 300, 133.33333333333334 233.33333333333334),(133.33333333333334 233.33333333333334, 156.66666666666666 216.66666666666666),(156.66666666666666 216.66666666666666, 180 200),(180 200, 160 180),(160 180, 136.66666666666666 196.66666666666666),(136.66666666666666 196.66666666666666, 113.33333333333333 213.33333333333334),(113.33333333333333 213.33333333333334, 20 280),(200 220, 180 200),(160 180, 140 160, 120 180, 136.66666666666666 196.66666666666666),(136.66666666666666 196.66666666666666, 156.66666666666666 216.66666666666666),(156.66666666666666 216.66666666666666, 176.66666666666666 236.66666666666666),(176.66666666666666 236.66666666666666, 220 280, 200 300, 153.33333333333334 253.33333333333334),(153.33333333333334 253.33333333333334, 133.33333333333334 233.33333333333334),(133.33333333333334 233.33333333333334, 113.33333333333333 213.33333333333334),(113.33333333333333 213.33333333333334, 100 200))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  220,
                  240
                ],
                [
                  200,
                  220
                ]
              ],
              [
                [
                  200,
                  220
                ],
                [
                  176.66666666666666,
                  236.66666666666666
                ]
              ],
              [
                [
                  176.66666666666666,
                  236.66666666666666
                ],
                [
                  153.33333333333334,
                  253.33333333333334
                ]
              ],
              [
                [
                  153.33333333333334,
                  253.33333333333334
                ],
                [
                  60,
                  320
                ],
                [
                  40,
                  300
                ],
                [
                  133.33333333333334,
                  233.33333333333334
                ]
              ],
              [
                [
                  133.33333333333334,
                  233.33333333333334
                ],
                [
                  156.66666666666666,
                  216.66666666666666
                ]
              ],
              [
                [
                  156.66666666666666,
                  216.66666666666666
                ],
                [
                  180,
                  200
                ]
              ],
              [
                [
                  180,
                  200
                ],
                [
                  160,
                  180
                ]
              ],
              [
                [
                  160,
                  180
                ],
                [
                  136.66666666666666,
                  196.66666666666666
                ]
              ],
              [
                [
                  136.66666666666666,
                  196.66666666666666
                ],
                [
                  113.33333333333333,
                  213.33333333333334
                ]
              ],
              [
                [
                  113.33333333333333,
                  213.33333333333334
                ],
                [
                  20,
                  280
                ]
              ],
              [
                [
                  200,
                  220
                ],
                [
                  180,
                  200
                ]
              ],
              [
                [
                  160,
                  180
                ],
                [
                  140,
                  160
                ],
                [
                  120,
                  180
                ],
                [
                  136.66666666666666,
                  196.66666666666666
                ]
              ],
              [
                [
                  136.66666666666666,
                  196.66666666666666
                ],
                [
                  156.66666666666666,
                  216.66666666666666
                ]
              ],
              [
                [
                  156.66666666666666,
                  216.66666666666666
                ],
                [
                  176.66666666666666,
                  236.66666666666666
                ]
              ],
              [
                [
                  176.66666666666666,
                  236.66666666666666
                ],
                [
                  220,
                  280
                ],
                [
                  200,
                  300
                ],
                [
                  153.33333333333334,
                  253.33333333333334
                ]
              ],
              [
                [
                  153.33333333333334,
                  253.33333333333334
                ],
                [
                  133.33333333333334,
                  233.33333333333334
                ]
              ],
              [
                [
                  133.33333333333334,
                  233.33333333333334
                ],
                [
                  113.33333333333333,
                  213.33333333333334
                ]
              ],
              [
                [
                  113.33333333333333,
                  213.33333333333334
                ],
                [
                  100,
                  200
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "MULTILINESTRING ((200 220, 176.66666666666666 236.66666666666666),(176.66666666666666 236.66666666666666, 153.33333333333334 253.33333333333334),(153.33333333333334 253.33333333333334, 60 320, 40 300, 133.33333333333334 233.33333333333334),(133.33333333333334 233.33333333333334, 156.66666666666666 216.66666666666666),(156.66666666666666 216.66666666666666, 180 200),(160 180, 136.66666666666666 196.66666666666666),(136.66666666666666 196.66666666666666, 113.33333333333333 213.33333333333334),(113.33333333333333 213.33333333333334, 20 280))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  200,
                  220
                ],
                [
                  176.66666666666666,
                  236.66666666666666
                ]
              ],
              [
                [
                  176.66666666666666,
                  236.66666666666666
                ],
                [
                  153.33333333333334,
                  253.33333333333334
                ]
              ],
              [
                [
                  153.33333333333334,
                  253.33333333333334
                ],
                [
                  60,
                  320
                ],
                [
                  40,
                  300
                ],
                [
                  133.33333333333334,
                  233.33333333333334
                ]
              ],
              [
                [
                  133.33333333333334,
                  233.33333333333334
                ],
                [
                  156.66666666666666,
                  216.66666666666666
                ]
              ],
              [
                [
                  156.66666666666666,
                  216.66666666666666
                ],
                [
                  180,
                  200
                ]
              ],
              [
                [
                  160,
                  180
                ],
                [
                  136.66666666666666,
                  196.66666666666666
                ]
              ],
              [
                [
                  136.66666666666666,
                  196.66666666666666
                ],
                [
                  113.33333333333333,
                  213.33333333333334
                ]
              ],
              [
                [
                  113.33333333333333,
                  213.33333333333334
                ],
                [
                  20,
                  280
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTILINESTRING ((200 220, 176.66666666666666 236.66666666666666),(176.66666666666666 236.66666666666666, 153.33333333333334 253.33333333333334),(153.33333333333334 253.33333333333334, 60 320, 40 300, 133.33333333333334 233.33333333333334),(133.33333333333334 233.33333333333334, 156.66666666666666 216.66666666666666),(156.66666666666666 216.66666666666666, 180 200),(160 180, 136.66666666666666 196.66666666666666),(136.66666666666666 196.66666666666666, 113.33333333333333 213.33333333333334),(113.33333333333333 213.33333333333334, 20 280),(200 220, 180 200),(160 180, 140 160, 120 180, 136.66666666666666 196.66666666666666),(136.66666666666666 196.66666666666666, 156.66666666666666 216.66666666666666),(156.66666666666666 216.66666666666666, 176.66666666666666 236.66666666666666),(176.66666666666666 236.66666666666666, 220 280, 200 300, 153.33333333333334 253.33333333333334),(153.33333333333334 253.33333333333334, 133.33333333333334 233.33333333333334),(133.33333333333334 233.33333333333334, 113.33333333333333 213.33333333333334),(113.33333333333333 213.33333333333334, 100 200))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  200,
                  220
                ],
                [
                  176.66666666666666,
                  236.66666666666666
                ]
              ],
              [
                [
                  176.66666666666666,
                  236.66666666666666
                ],
                [
                  153.33333333333334,
                  253.33333333333334
                ]
              ],
              [
                [
                  153.33333333333334,
                  253.33333333333334
                ],
                [
                  60,
                  320
                ],
                [
                  40,
                  300
                ],
                [
                  133.33333333333334,
                  233.33333333333334
                ]
              ],
              [
                [
                  133.33333333333334,
                  233.33333333333334
                ],
                [
                  156.66666666666666,
                  216.66666666666666
                ]
              ],
              [
                [
                  156.66666666666666,
                  216.66666666666666
                ],
                [
                  180,
                  200
                ]
              ],
              [
                [
                  160,
                  180
                ],
                [
                  136.66666666666666,
                  196.66666666666666
                ]
              ],
              [
                [
                  136.66666666666666,
                  196.66666666666666
                ],
                [
                  113.33333333333333,
                  213.33333333333334
                ]
              ],
              [
                [
                  113.33333333333333,
                  213.33333333333334
                ],
                [
                  20,
                  280
                ]
              ],
              [
                [
                  200,
                  220
                ],
                [
                  180,
                  200
                ]
              ],
              [
                [
                  160,
                  180
                ],
                [
                  140,
                  160
                ],
                [
                  120,
                  180
                ],
                [
                  136.66666666666666,
                  196.66666666666666
                ]
              ],
              [
                [
                  136.66666666666666,
                  196.66666666666666
                ],
                [
                  156.66666666666666,
                  216.66666666666666
                ]
              ],
              [
                [
                  156.66666666666666,
                  216.66666666666666
                ],
                [
                  176.66666666666666,
                  236.66666666666666
                ]
              ],
              [
                [
                  176.66666666666666,
                  236.66666666666666
                ],
                [
                  220,
                  280
                ],
                [
                  200,
                  300
                ],
                [
                  153.33333333333334,
                  253.33333333333334
                ]
              ],
              [
                [
                  153.33333333333334,
                  253.33333333333334
                ],
                [
                  133.33333333333334,
                  233.33333333333334
                ]
              ],
              [
                [
                  133.33333333333334,
                  233.33333333333334
                ],
                [
                  113.33333333333333,
                  213.33333333333334
                ]
              ],
              [
                [
                  113.33333333333333,
                  213.33333333333334
                ],
                [
                  100,
                  200
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionLL",
      "category": "function",
      "title": "LL - A and B equal",
      "id": "12-005",
      "a": {
        "wkt": "LINESTRING (80 320, 220 320, 220 160, 80 300)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              320
            ],
            [
              220,
              320
            ],
            [
              220,
              160
            ],
            [
              80,
              300
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (80 320, 220 320, 220 160, 80 300)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              80,
              320
            ],
            [
              220,
              320
            ],
            [
              220,
              160
            ],
            [
              80,
              300
            ]
          ]
        }
      },
      "relationship": {
        "equals": true,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": true,
        "contains": true,
        "overlaps": false,
        "de9im": "1FFF0FFF2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((220 160, 80 300, 80 320, 220 320, 220 160))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  220,
                  160
                ],
                [
                  80,
                  300
                ],
                [
                  80,
                  320
                ],
                [
                  220,
                  320
                ],
                [
                  220,
                  160
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTILINESTRING ((80 320, 220 320),(220 320, 220 160),(220 160, 80 300))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  80,
                  320
                ],
                [
                  220,
                  320
                ]
              ],
              [
                [
                  220,
                  320
                ],
                [
                  220,
                  160
                ]
              ],
              [
                [
                  220,
                  160
                ],
                [
                  80,
                  300
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "MULTILINESTRING ((80 320, 220 320),(220 320, 220 160),(220 160, 80 300))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  80,
                  320
                ],
                [
                  220,
                  320
                ]
              ],
              [
                [
                  220,
                  320
                ],
                [
                  220,
                  160
                ]
              ],
              [
                [
                  220,
                  160
                ],
                [
                  80,
                  300
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "GEOMETRYCOLLECTION EMPTY",
          "geometry": null
        },
        "symDifference": {
          "wkt": "GEOMETRYCOLLECTION EMPTY",
          "geometry": null
        }
      }
    },
    {
      "group": "TestFunctionLL",
      "category": "function",
      "title": "LL - A and B touch ends",
      "id": "12-006",
      "a": {
        "wkt": "LINESTRING (60 200, 60 260, 140 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              200
            ],
            [
              60,
              260
            ],
            [
              140,
              200
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (60 200, 60 140, 140 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              60,
              200
            ],
            [
              60,
              140
            ],
            [
              140,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1F0F1F2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((60 200, 60 260, 140 200, 60 200))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  60,
                  200
                ],
                [
                  60,
                  260
                ],
                [
                  140,
                  200
                ],
                [
                  60,
                  200
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOINT (60 200, 140 200)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                60,
                200
              ],
              [
                140,
                200
              ]
            ]
          }
        },
        "union": {
          "wkt": "MULTILINESTRING ((60 200, 60 260, 140 200),(60 200, 60 140, 140 200))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  60,
                  200
                ],
                [
                  60,
                  260
                ],
                [
                  140,
                  200
                ]
              ],
              [
                [
                  60,
                  200
                ],
                [
                  60,
                  140
                ],
                [
                  140,
                  200
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "LINESTRING (60 200, 60 260, 140 200)",
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                60,
                200
              ],
              [
                60,
                260
              ],
              [
                140,
                200
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTILINESTRING ((60 200, 60 260, 140 200),(60 200, 60 140, 140 200))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  60,
                  200
                ],
                [
                  60,
                  260
                ],
                [
                  140,
                  200
                ]
              ],
              [
                [
                  60,
                  200
                ],
                [
                  60,
                  140
                ],
                [
                  140,
                  200
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionLL",
      "category": "function",
      "title": "LL - intersecting rings",
      "id": "12-007",
      "a": {
        "wkt": "LINESTRING (180 200, 100 280, 20 200, 100 120, 180 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              180,
              200
            ],
            [
              100,
              280
            ],
            [
              20,
              200
            ],
            [
              100,
              120
            ],
            [
              180,
              200
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (100 200, 220 200, 220 80, 100 80, 100 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              100,
              200
            ],
            [
              220,
              200
            ],
            [
              220,
              80
            ],
            [
              100,
              80
            ],
            [
              100,
              200
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "0F1FFF1F2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((100 120, 20 200, 100 280, 180 200, 100 120))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  100,
                  120
                ],
                [
                  20,
                  200
                ],
                [
                  100,
                  280
                ],
                [
                  180,
                  200
                ],
                [
                  100,
                  120
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOINT (100 120, 180 200)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                100,
                120
              ],
              [
                180,
                200
              ]
            ]
          }
        },
        "union": {
          "wkt": "MULTILINESTRING ((180 200, 100 280, 20 200, 100 120),(100 120, 180 200),(100 200, 180 200),(180 200, 220 200, 220 80, 100 80, 100 120),(100 120, 100 200))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  180,
                  200
                ],
                [
                  100,
                  280
                ],
                [
                  20,
                  200
                ],
                [
                  100,
                  120
                ]
              ],
              [
                [
                  100,
                  120
                ],
                [
                  180,
                  200
                ]
              ],
              [
                [
                  100,
                  200
                ],
                [
                  180,
                  200
                ]
              ],
              [
                [
                  180,
                  200
                ],
                [
                  220,
                  200
                ],
                [
                  220,
                  80
                ],
                [
                  100,
                  80
                ],
                [
                  100,
                  120
                ]
              ],
              [
                [
                  100,
                  120
                ],
                [
                  100,
                  200
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "MULTILINESTRING ((180 200, 100 280, 20 200, 100 120),(100 120, 180 200))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  180,
                  200
                ],
                [
                  100,
                  280
                ],
                [
                  20,
                  200
                ],
                [
                  100,
                  120
                ]
              ],
              [
                [
                  100,
                  120
                ],
                [
                  180,
                  200
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTILINESTRING ((180 200, 100 280, 20 200, 100 120),(100 120, 180 200),(100 200, 180 200),(180 200, 220 200, 220 80, 100 80, 100 120),(100 120, 100 200))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  180,
                  200
                ],
                [
                  100,
                  280
                ],
                [
                  20,
                  200
                ],
                [
                  100,
                  120
                ]
              ],
              [
                [
                  100,
                  120
                ],
                [
                  180,
                  200
                ]
              ],
              [
                [
                  100,
                  200
                ],
                [
                  180,
                  200
                ]
              ],
              [
                [
                  180,
                  200
                ],
                [
                  220,
                  200
                ],
                [
                  220,
                  80
                ],
                [
                  100,
                  80
                ],
                [
                  100,
                  120
                ]
              ],
              [
                [
                  100,
                  120
                ],
                [
                  100,
                  200
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionLA",
      "category": "function",
      "title": "LA - A and B simple",
      "id": "13-001",
      "a": {
        "wkt": "LINESTRING (240 190, 120 120)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              240,
              190
            ],
            [
              120,
              120
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 240, 50 80, 240 70, 110 240))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                240
              ],
              [
                50,
                80
              ],
              [
                240,
                70
              ],
              [
                110,
                240
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "1010F0212"
      },
      "functions": {
        "convexHull": {
          "wkt": "LINESTRING (240 190, 120 120)",
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                240,
                190
              ],
              [
                120,
                120
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "LINESTRING (176.54237288135593 152.98305084745763, 120 120)",
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                176.54237288135593,
                152.98305084745763
              ],
              [
                120,
                120
              ]
            ]
          }
        },
        "union": {
          "wkt": "GEOMETRYCOLLECTION (LINESTRING (240 190, 176.54237288135593 152.98305084745763), POLYGON ((176.54237288135593 152.98305084745763, 240 70, 50 80, 110 240, 176.54237288135593 152.98305084745763)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    240,
                    190
                  ],
                  [
                    176.54237288135593,
                    152.98305084745763
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      176.54237288135593,
                      152.98305084745763
                    ],
                    [
                      240,
                      70
                    ],
                    [
                      50,
                      80
                    ],
                    [
                      110,
                      240
                    ],
                    [
                      176.54237288135593,
                      152.98305084745763
                    ]
                  ]
                ]
              }
            ]
          }
        },
        "difference": {
          "wkt": "LINESTRING (240 190, 176.54237288135593 152.98305084745763)",
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                240,
                190
              ],
              [
                176.54237288135593,
                152.98305084745763
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "GEOMETRYCOLLECTION (LINESTRING (240 190, 176.54237288135593 152.98305084745763), POLYGON ((176.54237288135593 152.98305084745763, 240 70, 50 80, 110 240, 176.54237288135593 152.98305084745763)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    240,
                    190
                  ],
                  [
                    176.54237288135593,
                    152.98305084745763
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      176.54237288135593,
                      152.98305084745763
                    ],
                    [
                      240,
                      70
                    ],
                    [
                      50,
                      80
                    ],
                    [
                      110,
                      240
                    ],
                    [
                      176.54237288135593,
                      152.98305084745763
                    ]
                  ]
                ]
              }
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionLA",
      "category": "function",
      "title": "LA - A intersects B-hole",
      "id": "13-002",
      "a": {
        "wkt": "LINESTRING (0 100, 100 100, 200 200)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              0,
              100
            ],
            [
              100,
              100
            ],
            [
              200,
              200
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((30 240, 260 30, 30 30, 30 240),(80 140, 80 80, 140 80, 80 140))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                30,
                240
              ],
              [
                260,
                30
              ],
              [
                30,
                30
              ],
              [
                30,
                240
              ]
            ],
            [
              [
                80,
                140
              ],
              [
                80,
                80
              ],
              [
                140,
                80
              ],
              [
                80,
                140
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "101FF0212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((0 100, 200 200, 100 100, 0 100))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  0,
                  100
                ],
                [
                  200,
                  200
                ],
                [
                  100,
                  100
                ],
                [
                  0,
                  100
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTILINESTRING ((30 100, 80 100),(110 110, 139.77272727272728 139.77272727272728))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  30,
                  100
                ],
                [
                  80,
                  100
                ]
              ],
              [
                [
                  110,
                  110
                ],
                [
                  139.77272727272728,
                  139.77272727272728
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "GEOMETRYCOLLECTION (LINESTRING (0 100, 30 100), LINESTRING (80 100, 100 100, 110 110), LINESTRING (139.77272727272728 139.77272727272728, 200 200), POLYGON ((30 240, 139.77272727272728 139.77272727272728, 260 30, 30 30, 30 100, 30 240),(80 140, 80 100, 80 80, 140 80, 110 110, 80 140)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    0,
                    100
                  ],
                  [
                    30,
                    100
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    80,
                    100
                  ],
                  [
                    100,
                    100
                  ],
                  [
                    110,
                    110
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    139.77272727272728,
                    139.77272727272728
                  ],
                  [
                    200,
                    200
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      30,
                      240
                    ],
                    [
                      139.77272727272728,
                      139.77272727272728
                    ],
                    [
                      260,
                      30
                    ],
                    [
                      30,
                      30
                    ],
                    [
                      30,
                      100
                    ],
                    [
                      30,
                      240
                    ]
                  ],
                  [
                    [
                      80,
                      140
                    ],
                    [
                      80,
                      100
                    ],
                    [
                      80,
                      80
                    ],
                    [
                      140,
                      80
                    ],
                    [
                      110,
                      110
                    ],
                    [
                      80,
                      140
                    ]
                  ]
                ]
              }
            ]
          }
        },
        "difference": {
          "wkt": "MULTILINESTRING ((0 100, 30 100),(80 100, 100 100, 110 110),(139.77272727272728 139.77272727272728, 200 200))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  0,
                  100
                ],
                [
                  30,
                  100
                ]
              ],
              [
                [
                  80,
                  100
                ],
                [
                  100,
                  100
                ],
                [
                  110,
                  110
                ]
              ],
              [
                [
                  139.77272727272728,
                  139.77272727272728
                ],
                [
                  200,
                  200
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "GEOMETRYCOLLECTION (LINESTRING (0 100, 30 100), LINESTRING (80 100, 100 100, 110 110), LINESTRING (139.77272727272728 139.77272727272728, 200 200), POLYGON ((30 240, 139.77272727272728 139.77272727272728, 260 30, 30 30, 30 100, 30 240),(80 140, 80 100, 80 80, 140 80, 110 110, 80 140)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    0,
                    100
                  ],
                  [
                    30,
                    100
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    80,
                    100
                  ],
                  [
                    100,
                    100
                  ],
                  [
                    110,
                    110
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    139.77272727272728,
                    139.77272727272728
                  ],
                  [
                    200,
                    200
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      30,
                      240
                    ],
                    [
                      139.77272727272728,
                      139.77272727272728
                    ],
                    [
                      260,
                      30
                    ],
                    [
                      30,
                      30
                    ],
                    [
                      30,
                      100
                    ],
                    [
                      30,
                      240
                    ]
                  ],
                  [
                    [
                      80,
                      140
                    ],
                    [
                      80,
                      100
                    ],
                    [
                      80,
                      80
                    ],
                    [
                      140,
                      80
                    ],
                    [
                      110,
                      110
                    ],
                    [
                      80,
                      140
                    ]
                  ]
                ]
              }
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionLA",
      "category": "function",
      "title": "LA - A intersects B-hole #2",
      "id": "13-003",
      "a": {
        "wkt": "LINESTRING (40 340, 200 250, 120 180, 160 110, 270 40)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              340
            ],
            [
              200,
              250
            ],
            [
              120,
              180
            ],
            [
              160,
              110
            ],
            [
              270,
              40
            ]
          ]
        }
      },
      "b": {
        "wkt": "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))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                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
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "101FF0212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((270 40, 160 110, 120 180, 40 340, 200 250, 270 40))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  270,
                  40
                ],
                [
                  160,
                  110
                ],
                [
                  120,
                  180
                ],
                [
                  40,
                  340
                ],
                [
                  200,
                  250
                ],
                [
                  270,
                  40
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTILINESTRING ((114.45544554455445 298.1188118811881, 200 250, 172.6027397260274 226.02739726027397),(181.78217821782178 96.13861386138613, 225.25423728813558 68.47457627118644))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  114.45544554455445,
                  298.1188118811881
                ],
                [
                  200,
                  250
                ],
                [
                  172.6027397260274,
                  226.02739726027397
                ]
              ],
              [
                [
                  181.78217821782178,
                  96.13861386138613
                ],
                [
                  225.25423728813558,
                  68.47457627118644
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "GEOMETRYCOLLECTION (LINESTRING (40 340, 114.45544554455445 298.1188118811881), LINESTRING (172.6027397260274 226.02739726027397, 120 180, 160 110, 181.78217821782178 96.13861386138613), LINESTRING (225.25423728813558 68.47457627118644, 270 40), POLYGON ((114.45544554455445 298.1188118811881, 160 330, 260 250, 270 130, 225.25423728813558 68.47457627118644, 190 20, 60 40, 20 150, 60 260, 114.45544554455445 298.1188118811881),(140 240, 80 190, 90 100, 160 70, 181.78217821782178 96.13861386138613, 210 130, 210 210, 172.6027397260274 226.02739726027397, 140 240)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    40,
                    340
                  ],
                  [
                    114.45544554455445,
                    298.1188118811881
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    172.6027397260274,
                    226.02739726027397
                  ],
                  [
                    120,
                    180
                  ],
                  [
                    160,
                    110
                  ],
                  [
                    181.78217821782178,
                    96.13861386138613
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    225.25423728813558,
                    68.47457627118644
                  ],
                  [
                    270,
                    40
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      114.45544554455445,
                      298.1188118811881
                    ],
                    [
                      160,
                      330
                    ],
                    [
                      260,
                      250
                    ],
                    [
                      270,
                      130
                    ],
                    [
                      225.25423728813558,
                      68.47457627118644
                    ],
                    [
                      190,
                      20
                    ],
                    [
                      60,
                      40
                    ],
                    [
                      20,
                      150
                    ],
                    [
                      60,
                      260
                    ],
                    [
                      114.45544554455445,
                      298.1188118811881
                    ]
                  ],
                  [
                    [
                      140,
                      240
                    ],
                    [
                      80,
                      190
                    ],
                    [
                      90,
                      100
                    ],
                    [
                      160,
                      70
                    ],
                    [
                      181.78217821782178,
                      96.13861386138613
                    ],
                    [
                      210,
                      130
                    ],
                    [
                      210,
                      210
                    ],
                    [
                      172.6027397260274,
                      226.02739726027397
                    ],
                    [
                      140,
                      240
                    ]
                  ]
                ]
              }
            ]
          }
        },
        "difference": {
          "wkt": "MULTILINESTRING ((40 340, 114.45544554455445 298.1188118811881),(172.6027397260274 226.02739726027397, 120 180, 160 110, 181.78217821782178 96.13861386138613),(225.25423728813558 68.47457627118644, 270 40))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  40,
                  340
                ],
                [
                  114.45544554455445,
                  298.1188118811881
                ]
              ],
              [
                [
                  172.6027397260274,
                  226.02739726027397
                ],
                [
                  120,
                  180
                ],
                [
                  160,
                  110
                ],
                [
                  181.78217821782178,
                  96.13861386138613
                ]
              ],
              [
                [
                  225.25423728813558,
                  68.47457627118644
                ],
                [
                  270,
                  40
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "GEOMETRYCOLLECTION (LINESTRING (40 340, 114.45544554455445 298.1188118811881), LINESTRING (172.6027397260274 226.02739726027397, 120 180, 160 110, 181.78217821782178 96.13861386138613), LINESTRING (225.25423728813558 68.47457627118644, 270 40), POLYGON ((114.45544554455445 298.1188118811881, 160 330, 260 250, 270 130, 225.25423728813558 68.47457627118644, 190 20, 60 40, 20 150, 60 260, 114.45544554455445 298.1188118811881),(140 240, 80 190, 90 100, 160 70, 181.78217821782178 96.13861386138613, 210 130, 210 210, 172.6027397260274 226.02739726027397, 140 240)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    40,
                    340
                  ],
                  [
                    114.45544554455445,
                    298.1188118811881
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    172.6027397260274,
                    226.02739726027397
                  ],
                  [
                    120,
                    180
                  ],
                  [
                    160,
                    110
                  ],
                  [
                    181.78217821782178,
                    96.13861386138613
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    225.25423728813558,
                    68.47457627118644
                  ],
                  [
                    270,
                    40
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      114.45544554455445,
                      298.1188118811881
                    ],
                    [
                      160,
                      330
                    ],
                    [
                      260,
                      250
                    ],
                    [
                      270,
                      130
                    ],
                    [
                      225.25423728813558,
                      68.47457627118644
                    ],
                    [
                      190,
                      20
                    ],
                    [
                      60,
                      40
                    ],
                    [
                      20,
                      150
                    ],
                    [
                      60,
                      260
                    ],
                    [
                      114.45544554455445,
                      298.1188118811881
                    ]
                  ],
                  [
                    [
                      140,
                      240
                    ],
                    [
                      80,
                      190
                    ],
                    [
                      90,
                      100
                    ],
                    [
                      160,
                      70
                    ],
                    [
                      181.78217821782178,
                      96.13861386138613
                    ],
                    [
                      210,
                      130
                    ],
                    [
                      210,
                      210
                    ],
                    [
                      172.6027397260274,
                      226.02739726027397
                    ],
                    [
                      140,
                      240
                    ]
                  ]
                ]
              }
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionLA",
      "category": "function",
      "title": "mLmA - A and B complex, disjoint",
      "id": "13-004",
      "a": {
        "wkt": "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)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  60,
                  320
                ],
                [
                  60,
                  80
                ],
                [
                  300,
                  80
                ],
                [
                  60,
                  320
                ]
              ],
              [
                [
                  80,
                  280
                ],
                [
                  80,
                  100
                ],
                [
                  260,
                  100
                ],
                [
                  80,
                  280
                ]
              ]
            ],
            [
              [
                [
                  120,
                  160
                ],
                [
                  140,
                  160
                ],
                [
                  140,
                  140
                ],
                [
                  120,
                  160
                ]
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "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))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                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
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2FF1102"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((60 80, 60 320, 300 80, 60 80))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  60,
                  80
                ],
                [
                  60,
                  320
                ],
                [
                  300,
                  80
                ],
                [
                  60,
                  80
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "GEOMETRYCOLLECTION EMPTY",
          "geometry": null
        },
        "union": {
          "wkt": "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)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    100,
                    240
                  ],
                  [
                    100,
                    180
                  ],
                  [
                    160,
                    180
                  ],
                  [
                    160,
                    120
                  ],
                  [
                    220,
                    120
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    40,
                    360
                  ],
                  [
                    40,
                    60
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    40,
                    60
                  ],
                  [
                    340,
                    60
                  ],
                  [
                    40,
                    360
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    40,
                    60
                  ],
                  [
                    40,
                    20
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    120
                  ],
                  [
                    120,
                    140
                  ],
                  [
                    100,
                    140
                  ],
                  [
                    100,
                    120
                  ],
                  [
                    120,
                    120
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    120
                  ],
                  [
                    140,
                    120
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      60,
                      320
                    ],
                    [
                      300,
                      80
                    ],
                    [
                      60,
                      80
                    ],
                    [
                      60,
                      320
                    ]
                  ],
                  [
                    [
                      80,
                      280
                    ],
                    [
                      80,
                      100
                    ],
                    [
                      260,
                      100
                    ],
                    [
                      80,
                      280
                    ]
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      120,
                      160
                    ],
                    [
                      140,
                      160
                    ],
                    [
                      140,
                      140
                    ],
                    [
                      120,
                      160
                    ]
                  ]
                ]
              }
            ]
          }
        },
        "difference": {
          "wkt": "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)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    60,
                    320
                  ],
                  [
                    300,
                    80
                  ],
                  [
                    60,
                    80
                  ],
                  [
                    60,
                    320
                  ]
                ],
                [
                  [
                    80,
                    280
                  ],
                  [
                    80,
                    100
                  ],
                  [
                    260,
                    100
                  ],
                  [
                    80,
                    280
                  ]
                ]
              ],
              [
                [
                  [
                    120,
                    160
                  ],
                  [
                    140,
                    160
                  ],
                  [
                    140,
                    140
                  ],
                  [
                    120,
                    160
                  ]
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "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)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    100,
                    240
                  ],
                  [
                    100,
                    180
                  ],
                  [
                    160,
                    180
                  ],
                  [
                    160,
                    120
                  ],
                  [
                    220,
                    120
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    40,
                    360
                  ],
                  [
                    40,
                    60
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    40,
                    60
                  ],
                  [
                    340,
                    60
                  ],
                  [
                    40,
                    360
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    40,
                    60
                  ],
                  [
                    40,
                    20
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    120
                  ],
                  [
                    120,
                    140
                  ],
                  [
                    100,
                    140
                  ],
                  [
                    100,
                    120
                  ],
                  [
                    120,
                    120
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    120
                  ],
                  [
                    140,
                    120
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      60,
                      320
                    ],
                    [
                      300,
                      80
                    ],
                    [
                      60,
                      80
                    ],
                    [
                      60,
                      320
                    ]
                  ],
                  [
                    [
                      80,
                      280
                    ],
                    [
                      80,
                      100
                    ],
                    [
                      260,
                      100
                    ],
                    [
                      80,
                      280
                    ]
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      120,
                      160
                    ],
                    [
                      140,
                      160
                    ],
                    [
                      140,
                      140
                    ],
                    [
                      120,
                      160
                    ]
                  ]
                ]
              }
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionLA",
      "category": "function",
      "title": "mLmA - A and B complex, overlapping and touching #1",
      "id": "13-005",
      "a": {
        "wkt": "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)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  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
                ]
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "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))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                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
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "1F21F1102"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((60 120, 60 260, 220 260, 220 120, 60 120))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  60,
                  120
                ],
                [
                  60,
                  260
                ],
                [
                  220,
                  260
                ],
                [
                  220,
                  120
                ],
                [
                  60,
                  120
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "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))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  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
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "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)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    40,
                    260
                  ],
                  [
                    60,
                    260
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    260
                  ],
                  [
                    240,
                    260
                  ],
                  [
                    240,
                    240
                  ],
                  [
                    220,
                    240
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    60,
                    240
                  ],
                  [
                    40,
                    240
                  ],
                  [
                    40,
                    220
                  ],
                  [
                    60,
                    220
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    80,
                    220
                  ],
                  [
                    100,
                    220
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    180,
                    220
                  ],
                  [
                    200,
                    220
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    220
                  ],
                  [
                    240,
                    220
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    300
                  ],
                  [
                    120,
                    260
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    240
                  ],
                  [
                    120,
                    220
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    160
                  ],
                  [
                    120,
                    140
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    120
                  ],
                  [
                    120,
                    80
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    80
                  ],
                  [
                    140,
                    80
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    140,
                    80
                  ],
                  [
                    140,
                    120
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    140,
                    140
                  ],
                  [
                    140,
                    160
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    140,
                    180
                  ],
                  [
                    140,
                    200
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    140,
                    220
                  ],
                  [
                    140,
                    240
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    140,
                    260
                  ],
                  [
                    140,
                    300
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    300
                  ],
                  [
                    120,
                    320
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      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
                    ]
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      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
                    ]
                  ]
                ]
              }
            ]
          }
        },
        "difference": {
          "wkt": "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)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    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
                  ]
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "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)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    40,
                    260
                  ],
                  [
                    60,
                    260
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    260
                  ],
                  [
                    240,
                    260
                  ],
                  [
                    240,
                    240
                  ],
                  [
                    220,
                    240
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    60,
                    240
                  ],
                  [
                    40,
                    240
                  ],
                  [
                    40,
                    220
                  ],
                  [
                    60,
                    220
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    80,
                    220
                  ],
                  [
                    100,
                    220
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    180,
                    220
                  ],
                  [
                    200,
                    220
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    220
                  ],
                  [
                    240,
                    220
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    300
                  ],
                  [
                    120,
                    260
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    240
                  ],
                  [
                    120,
                    220
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    160
                  ],
                  [
                    120,
                    140
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    120
                  ],
                  [
                    120,
                    80
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    80
                  ],
                  [
                    140,
                    80
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    140,
                    80
                  ],
                  [
                    140,
                    120
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    140,
                    140
                  ],
                  [
                    140,
                    160
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    140,
                    180
                  ],
                  [
                    140,
                    200
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    140,
                    220
                  ],
                  [
                    140,
                    240
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    140,
                    260
                  ],
                  [
                    140,
                    300
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    300
                  ],
                  [
                    120,
                    320
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      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
                    ]
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      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
                    ]
                  ]
                ]
              }
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionLA",
      "category": "function",
      "title": "mLmA - A and B complex, overlapping and touching #2",
      "id": "13-006",
      "a": {
        "wkt": "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)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  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
                ]
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((80 300, 80 160, 260 160, 260 300, 80 300, 80 140),(220 360, 220 240, 300 240, 300 360))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                80,
                300
              ],
              [
                80,
                160
              ],
              [
                260,
                160
              ],
              [
                260,
                300
              ],
              [
                80,
                300
              ],
              [
                80,
                140
              ]
            ],
            [
              [
                220,
                360
              ],
              [
                220,
                240
              ],
              [
                300,
                240
              ],
              [
                300,
                360
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "102001102"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((60 120, 60 320, 280 400, 320 400, 320 220, 280 120, 60 120))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  60,
                  120
                ],
                [
                  60,
                  320
                ],
                [
                  280,
                  400
                ],
                [
                  320,
                  400
                ],
                [
                  320,
                  220
                ],
                [
                  280,
                  120
                ],
                [
                  60,
                  120
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "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))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  300,
                  240
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  300,
                  360
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    80,
                    300
                  ],
                  [
                    80,
                    160
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    80,
                    160
                  ],
                  [
                    260,
                    160
                  ],
                  [
                    260,
                    240
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    260,
                    240
                  ],
                  [
                    260,
                    300
                  ],
                  [
                    220,
                    300
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    300
                  ],
                  [
                    80,
                    300
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    80,
                    160
                  ],
                  [
                    80,
                    140
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    320
                  ],
                  [
                    220,
                    300
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    300
                  ],
                  [
                    220,
                    260
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    240,
                    240
                  ],
                  [
                    260,
                    240
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    260,
                    240
                  ],
                  [
                    280,
                    240
                  ]
                ]
              }
            ]
          }
        },
        "union": {
          "wkt": "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)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    360
                  ],
                  [
                    220,
                    320
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    260
                  ],
                  [
                    220,
                    240
                  ],
                  [
                    240,
                    240
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    280,
                    240
                  ],
                  [
                    300,
                    240
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    300,
                    240
                  ],
                  [
                    300,
                    360
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      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
                    ]
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      280,
                      400
                    ],
                    [
                      320,
                      400
                    ],
                    [
                      320,
                      360
                    ],
                    [
                      300,
                      360
                    ],
                    [
                      280,
                      360
                    ],
                    [
                      280,
                      400
                    ]
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      300,
                      240
                    ],
                    [
                      320,
                      240
                    ],
                    [
                      320,
                      220
                    ],
                    [
                      300,
                      220
                    ],
                    [
                      300,
                      240
                    ]
                  ]
                ]
              }
            ]
          }
        },
        "difference": {
          "wkt": "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)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    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
                  ]
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "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)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    360
                  ],
                  [
                    220,
                    320
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    260
                  ],
                  [
                    220,
                    240
                  ],
                  [
                    240,
                    240
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    280,
                    240
                  ],
                  [
                    300,
                    240
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    300,
                    240
                  ],
                  [
                    300,
                    360
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      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
                    ]
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      280,
                      400
                    ],
                    [
                      320,
                      400
                    ],
                    [
                      320,
                      360
                    ],
                    [
                      300,
                      360
                    ],
                    [
                      280,
                      360
                    ],
                    [
                      280,
                      400
                    ]
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      300,
                      240
                    ],
                    [
                      320,
                      240
                    ],
                    [
                      320,
                      220
                    ],
                    [
                      300,
                      220
                    ],
                    [
                      300,
                      240
                    ]
                  ]
                ]
              }
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionLA",
      "category": "function",
      "title": "mLmA - A and B complex, overlapping and touching #3",
      "id": "13-007",
      "a": {
        "wkt": "MULTIPOLYGON (((120 180, 60 80, 180 80, 120 180)),((100 240, 140 240, 120 220, 100 240)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  120,
                  180
                ],
                [
                  60,
                  80
                ],
                [
                  180,
                  80
                ],
                [
                  120,
                  180
                ]
              ]
            ],
            [
              [
                [
                  100,
                  240
                ],
                [
                  140,
                  240
                ],
                [
                  120,
                  220
                ],
                [
                  100,
                  240
                ]
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTILINESTRING ((180 260, 120 180, 60 260, 180 260),(60 300, 60 40),(100 100, 140 100))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                180,
                260
              ],
              [
                120,
                180
              ],
              [
                60,
                260
              ],
              [
                180,
                260
              ]
            ],
            [
              [
                60,
                300
              ],
              [
                60,
                40
              ]
            ],
            [
              [
                100,
                100
              ],
              [
                140,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "1020F1102"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((60 80, 100 240, 140 240, 180 80, 60 80))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  60,
                  80
                ],
                [
                  100,
                  240
                ],
                [
                  140,
                  240
                ],
                [
                  180,
                  80
                ],
                [
                  60,
                  80
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "GEOMETRYCOLLECTION (POINT (60 80), POINT (120 180), LINESTRING (100 100, 140 100))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  60,
                  80
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  120,
                  180
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    100,
                    100
                  ],
                  [
                    140,
                    100
                  ]
                ]
              }
            ]
          }
        },
        "union": {
          "wkt": "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)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    180,
                    260
                  ],
                  [
                    120,
                    180
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    180
                  ],
                  [
                    60,
                    260
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    60,
                    260
                  ],
                  [
                    180,
                    260
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    60,
                    300
                  ],
                  [
                    60,
                    260
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    60,
                    260
                  ],
                  [
                    60,
                    80
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    60,
                    80
                  ],
                  [
                    60,
                    40
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      60,
                      80
                    ],
                    [
                      120,
                      180
                    ],
                    [
                      180,
                      80
                    ],
                    [
                      60,
                      80
                    ]
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      100,
                      240
                    ],
                    [
                      140,
                      240
                    ],
                    [
                      120,
                      220
                    ],
                    [
                      100,
                      240
                    ]
                  ]
                ]
              }
            ]
          }
        },
        "difference": {
          "wkt": "MULTIPOLYGON (((60 80, 120 180, 180 80, 60 80)),((100 240, 140 240, 120 220, 100 240)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    60,
                    80
                  ],
                  [
                    120,
                    180
                  ],
                  [
                    180,
                    80
                  ],
                  [
                    60,
                    80
                  ]
                ]
              ],
              [
                [
                  [
                    100,
                    240
                  ],
                  [
                    140,
                    240
                  ],
                  [
                    120,
                    220
                  ],
                  [
                    100,
                    240
                  ]
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "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)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    180,
                    260
                  ],
                  [
                    120,
                    180
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    180
                  ],
                  [
                    60,
                    260
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    60,
                    260
                  ],
                  [
                    180,
                    260
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    60,
                    300
                  ],
                  [
                    60,
                    260
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    60,
                    260
                  ],
                  [
                    60,
                    80
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    60,
                    80
                  ],
                  [
                    60,
                    40
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      60,
                      80
                    ],
                    [
                      120,
                      180
                    ],
                    [
                      180,
                      80
                    ],
                    [
                      60,
                      80
                    ]
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      100,
                      240
                    ],
                    [
                      140,
                      240
                    ],
                    [
                      120,
                      220
                    ],
                    [
                      100,
                      240
                    ]
                  ]
                ]
              }
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAA",
      "category": "function",
      "title": "AA - simple polygons",
      "id": "14-001",
      "a": {
        "wkt": "POLYGON ((10 10, 100 10, 100 100, 10 100, 10 10))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                10,
                10
              ],
              [
                100,
                10
              ],
              [
                100,
                100
              ],
              [
                10,
                100
              ],
              [
                10,
                10
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((50 50, 200 50, 200 200, 50 200, 50 50))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                50,
                50
              ],
              [
                200,
                50
              ],
              [
                200,
                200
              ],
              [
                50,
                200
              ],
              [
                50,
                50
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((10 10, 10 100, 100 100, 100 10, 10 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  10,
                  10
                ],
                [
                  10,
                  100
                ],
                [
                  100,
                  100
                ],
                [
                  100,
                  10
                ],
                [
                  10,
                  10
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "POLYGON ((50 100, 100 100, 100 50, 50 50, 50 100))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  50,
                  100
                ],
                [
                  100,
                  100
                ],
                [
                  100,
                  50
                ],
                [
                  50,
                  50
                ],
                [
                  50,
                  100
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((100 50, 100 10, 10 10, 10 100, 50 100, 50 200, 200 200, 200 50, 100 50))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  100,
                  50
                ],
                [
                  100,
                  10
                ],
                [
                  10,
                  10
                ],
                [
                  10,
                  100
                ],
                [
                  50,
                  100
                ],
                [
                  50,
                  200
                ],
                [
                  200,
                  200
                ],
                [
                  200,
                  50
                ],
                [
                  100,
                  50
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((100 50, 100 10, 10 10, 10 100, 50 100, 50 50, 100 50))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  100,
                  50
                ],
                [
                  100,
                  10
                ],
                [
                  10,
                  10
                ],
                [
                  10,
                  100
                ],
                [
                  50,
                  100
                ],
                [
                  50,
                  50
                ],
                [
                  100,
                  50
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((100 50, 100 10, 10 10, 10 100, 50 100, 50 50, 100 50)),((100 50, 100 100, 50 100, 50 200, 200 200, 200 50, 100 50)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    100,
                    50
                  ],
                  [
                    100,
                    10
                  ],
                  [
                    10,
                    10
                  ],
                  [
                    10,
                    100
                  ],
                  [
                    50,
                    100
                  ],
                  [
                    50,
                    50
                  ],
                  [
                    100,
                    50
                  ]
                ]
              ],
              [
                [
                  [
                    100,
                    50
                  ],
                  [
                    100,
                    100
                  ],
                  [
                    50,
                    100
                  ],
                  [
                    50,
                    200
                  ],
                  [
                    200,
                    200
                  ],
                  [
                    200,
                    50
                  ],
                  [
                    100,
                    50
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAA",
      "category": "function",
      "title": "AA - A with hole intersecting B",
      "id": "14-002",
      "a": {
        "wkt": "POLYGON ((20 20, 20 160, 160 160, 160 20, 20 20),(140 140, 40 140, 40 40, 140 40, 140 140))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                20,
                160
              ],
              [
                160,
                160
              ],
              [
                160,
                20
              ],
              [
                20,
                20
              ]
            ],
            [
              [
                140,
                140
              ],
              [
                40,
                140
              ],
              [
                40,
                40
              ],
              [
                140,
                40
              ],
              [
                140,
                140
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((80 100, 220 100, 220 240, 80 240, 80 100))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                80,
                100
              ],
              [
                220,
                100
              ],
              [
                220,
                240
              ],
              [
                80,
                240
              ],
              [
                80,
                100
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((20 20, 20 160, 160 160, 160 20, 20 20))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  20,
                  20
                ],
                [
                  20,
                  160
                ],
                [
                  160,
                  160
                ],
                [
                  160,
                  20
                ],
                [
                  20,
                  20
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "POLYGON ((80 160, 160 160, 160 100, 140 100, 140 140, 80 140, 80 160))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  80,
                  160
                ],
                [
                  160,
                  160
                ],
                [
                  160,
                  100
                ],
                [
                  140,
                  100
                ],
                [
                  140,
                  140
                ],
                [
                  80,
                  140
                ],
                [
                  80,
                  160
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((20 20, 20 160, 80 160, 80 240, 220 240, 220 100, 160 100, 160 20, 20 20),(80 140, 40 140, 40 40, 140 40, 140 100, 80 100, 80 140))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  20,
                  20
                ],
                [
                  20,
                  160
                ],
                [
                  80,
                  160
                ],
                [
                  80,
                  240
                ],
                [
                  220,
                  240
                ],
                [
                  220,
                  100
                ],
                [
                  160,
                  100
                ],
                [
                  160,
                  20
                ],
                [
                  20,
                  20
                ]
              ],
              [
                [
                  80,
                  140
                ],
                [
                  40,
                  140
                ],
                [
                  40,
                  40
                ],
                [
                  140,
                  40
                ],
                [
                  140,
                  100
                ],
                [
                  80,
                  100
                ],
                [
                  80,
                  140
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((20 20, 20 160, 80 160, 80 140, 40 140, 40 40, 140 40, 140 100, 160 100, 160 20, 20 20))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  20,
                  20
                ],
                [
                  20,
                  160
                ],
                [
                  80,
                  160
                ],
                [
                  80,
                  140
                ],
                [
                  40,
                  140
                ],
                [
                  40,
                  40
                ],
                [
                  140,
                  40
                ],
                [
                  140,
                  100
                ],
                [
                  160,
                  100
                ],
                [
                  160,
                  20
                ],
                [
                  20,
                  20
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((20 20, 20 160, 80 160, 80 140, 40 140, 40 40, 140 40, 140 100, 160 100, 160 20, 20 20)),((160 100, 160 160, 80 160, 80 240, 220 240, 220 100, 160 100)),((80 140, 140 140, 140 100, 80 100, 80 140)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    20,
                    20
                  ],
                  [
                    20,
                    160
                  ],
                  [
                    80,
                    160
                  ],
                  [
                    80,
                    140
                  ],
                  [
                    40,
                    140
                  ],
                  [
                    40,
                    40
                  ],
                  [
                    140,
                    40
                  ],
                  [
                    140,
                    100
                  ],
                  [
                    160,
                    100
                  ],
                  [
                    160,
                    20
                  ],
                  [
                    20,
                    20
                  ]
                ]
              ],
              [
                [
                  [
                    160,
                    100
                  ],
                  [
                    160,
                    160
                  ],
                  [
                    80,
                    160
                  ],
                  [
                    80,
                    240
                  ],
                  [
                    220,
                    240
                  ],
                  [
                    220,
                    100
                  ],
                  [
                    160,
                    100
                  ]
                ]
              ],
              [
                [
                  [
                    80,
                    140
                  ],
                  [
                    140,
                    140
                  ],
                  [
                    140,
                    100
                  ],
                  [
                    80,
                    100
                  ],
                  [
                    80,
                    140
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAA",
      "category": "function",
      "title": "AA - simple polygons #2",
      "id": "14-003",
      "a": {
        "wkt": "POLYGON ((20 340, 330 380, 50 40, 20 340))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                340
              ],
              [
                330,
                380
              ],
              [
                50,
                40
              ],
              [
                20,
                340
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((210 320, 140 270, 0 270, 140 220, 210 320))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                210,
                320
              ],
              [
                140,
                270
              ],
              [
                0,
                270
              ],
              [
                140,
                220
              ],
              [
                210,
                320
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((50 40, 20 340, 330 380, 50 40))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  50,
                  40
                ],
                [
                  20,
                  340
                ],
                [
                  330,
                  380
                ],
                [
                  50,
                  40
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "POLYGON ((28 260, 27 270, 140 270, 210 320, 140 220, 28 260))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  28,
                  260
                ],
                [
                  27,
                  270
                ],
                [
                  140,
                  270
                ],
                [
                  210,
                  320
                ],
                [
                  140,
                  220
                ],
                [
                  28,
                  260
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((20 340, 330 380, 50 40, 28 260, 0 270, 27 270, 20 340))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  20,
                  340
                ],
                [
                  330,
                  380
                ],
                [
                  50,
                  40
                ],
                [
                  28,
                  260
                ],
                [
                  0,
                  270
                ],
                [
                  27,
                  270
                ],
                [
                  20,
                  340
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((20 340, 330 380, 50 40, 28 260, 140 220, 210 320, 140 270, 27 270, 20 340))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  20,
                  340
                ],
                [
                  330,
                  380
                ],
                [
                  50,
                  40
                ],
                [
                  28,
                  260
                ],
                [
                  140,
                  220
                ],
                [
                  210,
                  320
                ],
                [
                  140,
                  270
                ],
                [
                  27,
                  270
                ],
                [
                  20,
                  340
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "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)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    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
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAA",
      "category": "function",
      "title": "AA - simple polygons intersecting in P, L and A",
      "id": "14-004",
      "a": {
        "wkt": "POLYGON ((0 0, 110 0, 110 60, 40 60, 180 140, 40 220, 110 260, 0 260, 0 0))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                0,
                0
              ],
              [
                110,
                0
              ],
              [
                110,
                60
              ],
              [
                40,
                60
              ],
              [
                180,
                140
              ],
              [
                40,
                220
              ],
              [
                110,
                260
              ],
              [
                0,
                260
              ],
              [
                0,
                0
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((220 0, 110 0, 110 60, 180 60, 40 140, 180 220, 110 260, 220 260, 220 0))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                220,
                0
              ],
              [
                110,
                0
              ],
              [
                110,
                60
              ],
              [
                180,
                60
              ],
              [
                40,
                140
              ],
              [
                180,
                220
              ],
              [
                110,
                260
              ],
              [
                220,
                260
              ],
              [
                220,
                0
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((0 0, 0 260, 110 260, 180 140, 110 0, 0 0))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  0,
                  0
                ],
                [
                  0,
                  260
                ],
                [
                  110,
                  260
                ],
                [
                  180,
                  140
                ],
                [
                  110,
                  0
                ],
                [
                  0,
                  0
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "GEOMETRYCOLLECTION (POINT (110 260), LINESTRING (110 0, 110 60), POLYGON ((110 180, 180 140, 110 100, 40 140, 110 180)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  110,
                  260
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    110,
                    0
                  ],
                  [
                    110,
                    60
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      110,
                      180
                    ],
                    [
                      180,
                      140
                    ],
                    [
                      110,
                      100
                    ],
                    [
                      40,
                      140
                    ],
                    [
                      110,
                      180
                    ]
                  ]
                ]
              }
            ]
          }
        },
        "union": {
          "wkt": "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))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  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
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((110 0, 0 0, 0 260, 110 260, 40 220, 110 180, 40 140, 110 100, 40 60, 110 60, 110 0))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  110,
                  0
                ],
                [
                  0,
                  0
                ],
                [
                  0,
                  260
                ],
                [
                  110,
                  260
                ],
                [
                  40,
                  220
                ],
                [
                  110,
                  180
                ],
                [
                  40,
                  140
                ],
                [
                  110,
                  100
                ],
                [
                  40,
                  60
                ],
                [
                  110,
                  60
                ],
                [
                  110,
                  0
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "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))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  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
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAA",
      "category": "function",
      "title": "AA - simple polygons with two touching holes in their symDifference",
      "id": "14-005",
      "a": {
        "wkt": "POLYGON ((0 0, 120 0, 120 50, 50 50, 120 100, 50 150, 120 150, 120 190, 0 190, 0 0))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                0,
                0
              ],
              [
                120,
                0
              ],
              [
                120,
                50
              ],
              [
                50,
                50
              ],
              [
                120,
                100
              ],
              [
                50,
                150
              ],
              [
                120,
                150
              ],
              [
                120,
                190
              ],
              [
                0,
                190
              ],
              [
                0,
                0
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((230 0, 120 0, 120 50, 190 50, 120 100, 190 150, 120 150, 120 190, 230 190, 230 0))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                230,
                0
              ],
              [
                120,
                0
              ],
              [
                120,
                50
              ],
              [
                190,
                50
              ],
              [
                120,
                100
              ],
              [
                190,
                150
              ],
              [
                120,
                150
              ],
              [
                120,
                190
              ],
              [
                230,
                190
              ],
              [
                230,
                0
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((0 0, 0 190, 120 190, 120 0, 0 0))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  0,
                  0
                ],
                [
                  0,
                  190
                ],
                [
                  120,
                  190
                ],
                [
                  120,
                  0
                ],
                [
                  0,
                  0
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "GEOMETRYCOLLECTION (POINT (120 100), LINESTRING (120 0, 120 50), LINESTRING (120 150, 120 190))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  120,
                  100
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    0
                  ],
                  [
                    120,
                    50
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    150
                  ],
                  [
                    120,
                    190
                  ]
                ]
              }
            ]
          }
        },
        "union": {
          "wkt": "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))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  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
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((120 0, 0 0, 0 190, 120 190, 120 150, 50 150, 120 100, 50 50, 120 50, 120 0))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  120,
                  0
                ],
                [
                  0,
                  0
                ],
                [
                  0,
                  190
                ],
                [
                  120,
                  190
                ],
                [
                  120,
                  150
                ],
                [
                  50,
                  150
                ],
                [
                  120,
                  100
                ],
                [
                  50,
                  50
                ],
                [
                  120,
                  50
                ],
                [
                  120,
                  0
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "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))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  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
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAA",
      "category": "function",
      "title": "AmA - A simple, symDiff contains inversion",
      "id": "14-006",
      "a": {
        "wkt": "POLYGON ((0 0, 210 0, 210 230, 0 230, 0 0))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                0,
                0
              ],
              [
                210,
                0
              ],
              [
                210,
                230
              ],
              [
                0,
                230
              ],
              [
                0,
                0
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "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)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  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
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F01FF2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((0 0, 0 230, 210 230, 210 0, 0 0))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  0,
                  0
                ],
                [
                  0,
                  230
                ],
                [
                  210,
                  230
                ],
                [
                  210,
                  0
                ],
                [
                  0,
                  0
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOLYGON (((40 20, 0 0, 20 40, 60 60, 40 20)),((60 60, 60 90, 90 90, 90 60, 60 60)),((90 90, 70 120, 100 120, 90 90)),((120 70, 90 90, 120 100, 120 70)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    40,
                    20
                  ],
                  [
                    0,
                    0
                  ],
                  [
                    20,
                    40
                  ],
                  [
                    60,
                    60
                  ],
                  [
                    40,
                    20
                  ]
                ]
              ],
              [
                [
                  [
                    60,
                    60
                  ],
                  [
                    60,
                    90
                  ],
                  [
                    90,
                    90
                  ],
                  [
                    90,
                    60
                  ],
                  [
                    60,
                    60
                  ]
                ]
              ],
              [
                [
                  [
                    90,
                    90
                  ],
                  [
                    70,
                    120
                  ],
                  [
                    100,
                    120
                  ],
                  [
                    90,
                    90
                  ]
                ]
              ],
              [
                [
                  [
                    120,
                    70
                  ],
                  [
                    90,
                    90
                  ],
                  [
                    120,
                    100
                  ],
                  [
                    120,
                    70
                  ]
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((0 0, 0 230, 210 230, 210 0, 0 0))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  0,
                  0
                ],
                [
                  0,
                  230
                ],
                [
                  210,
                  230
                ],
                [
                  210,
                  0
                ],
                [
                  0,
                  0
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "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))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  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
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "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))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  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
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAA",
      "category": "function",
      "title": "AmA - A simple, B connected multiPolygon touching A at vertex",
      "id": "14-007",
      "a": {
        "wkt": "POLYGON ((0 0, 340 0, 340 300, 0 300, 0 0))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                0,
                0
              ],
              [
                340,
                0
              ],
              [
                340,
                300
              ],
              [
                0,
                300
              ],
              [
                0,
                0
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((40 20, 0 0, 20 40, 60 60, 40 20)),((60 100, 60 60, 100 60, 100 100, 60 100)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  40,
                  20
                ],
                [
                  0,
                  0
                ],
                [
                  20,
                  40
                ],
                [
                  60,
                  60
                ],
                [
                  40,
                  20
                ]
              ]
            ],
            [
              [
                [
                  60,
                  100
                ],
                [
                  60,
                  60
                ],
                [
                  100,
                  60
                ],
                [
                  100,
                  100
                ],
                [
                  60,
                  100
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F01FF2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((0 0, 0 300, 340 300, 340 0, 0 0))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  0,
                  0
                ],
                [
                  0,
                  300
                ],
                [
                  340,
                  300
                ],
                [
                  340,
                  0
                ],
                [
                  0,
                  0
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOLYGON (((40 20, 0 0, 20 40, 60 60, 40 20)),((60 60, 60 100, 100 100, 100 60, 60 60)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    40,
                    20
                  ],
                  [
                    0,
                    0
                  ],
                  [
                    20,
                    40
                  ],
                  [
                    60,
                    60
                  ],
                  [
                    40,
                    20
                  ]
                ]
              ],
              [
                [
                  [
                    60,
                    60
                  ],
                  [
                    60,
                    100
                  ],
                  [
                    100,
                    100
                  ],
                  [
                    100,
                    60
                  ],
                  [
                    60,
                    60
                  ]
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((0 0, 0 300, 340 300, 340 0, 0 0))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  0,
                  0
                ],
                [
                  0,
                  300
                ],
                [
                  340,
                  300
                ],
                [
                  340,
                  0
                ],
                [
                  0,
                  0
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "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))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  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
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "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))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  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
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAA",
      "category": "function",
      "title": "AmA - A simple, B connected multiPolygon touching A at interior of edge",
      "id": "14-008",
      "a": {
        "wkt": "POLYGON ((0 0, 120 0, 120 120, 0 120, 0 0))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                0,
                0
              ],
              [
                120,
                0
              ],
              [
                120,
                120
              ],
              [
                0,
                120
              ],
              [
                0,
                0
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "MULTIPOLYGON (((60 20, 0 20, 60 60, 60 20)),((60 100, 60 60, 100 60, 100 100, 60 100)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  60,
                  20
                ],
                [
                  0,
                  20
                ],
                [
                  60,
                  60
                ],
                [
                  60,
                  20
                ]
              ]
            ],
            [
              [
                [
                  60,
                  100
                ],
                [
                  60,
                  60
                ],
                [
                  100,
                  60
                ],
                [
                  100,
                  100
                ],
                [
                  60,
                  100
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": true,
        "overlaps": false,
        "de9im": "212F01FF2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((0 0, 0 120, 120 120, 120 0, 0 0))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  0,
                  0
                ],
                [
                  0,
                  120
                ],
                [
                  120,
                  120
                ],
                [
                  120,
                  0
                ],
                [
                  0,
                  0
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOLYGON (((60 20, 0 20, 60 60, 60 20)),((60 60, 60 100, 100 100, 100 60, 60 60)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    60,
                    20
                  ],
                  [
                    0,
                    20
                  ],
                  [
                    60,
                    60
                  ],
                  [
                    60,
                    20
                  ]
                ]
              ],
              [
                [
                  [
                    60,
                    60
                  ],
                  [
                    60,
                    100
                  ],
                  [
                    100,
                    100
                  ],
                  [
                    100,
                    60
                  ],
                  [
                    60,
                    60
                  ]
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((0 20, 0 120, 120 120, 120 0, 0 0, 0 20))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  0,
                  20
                ],
                [
                  0,
                  120
                ],
                [
                  120,
                  120
                ],
                [
                  120,
                  0
                ],
                [
                  0,
                  0
                ],
                [
                  0,
                  20
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "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))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  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
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "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))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  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
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAA",
      "category": "function",
      "title": "AA - simple polygons with holes",
      "id": "14-009",
      "a": {
        "wkt": "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))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                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": {
        "wkt": "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))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                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
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((190 20, 60 40, 20 150, 60 260, 160 330, 260 250, 270 130, 190 20))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  190,
                  20
                ],
                [
                  60,
                  40
                ],
                [
                  20,
                  150
                ],
                [
                  60,
                  260
                ],
                [
                  160,
                  330
                ],
                [
                  260,
                  250
                ],
                [
                  270,
                  130
                ],
                [
                  190,
                  20
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "POLYGON ((250.7594936708861 103.54430379746836, 216.66666666666666 56.666666666666664, 176 89.2, 210 130, 210 210, 172.4390243902439 226.09756097560975, 190 270, 216.75675675675674 284.5945945945946, 260 250, 262.65625 218.125, 240 200, 240 110, 250.7594936708861 103.54430379746836))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  250.7594936708861,
                  103.54430379746836
                ],
                [
                  216.66666666666666,
                  56.666666666666664
                ],
                [
                  176,
                  89.2
                ],
                [
                  210,
                  130
                ],
                [
                  210,
                  210
                ],
                [
                  172.4390243902439,
                  226.09756097560975
                ],
                [
                  190,
                  270
                ],
                [
                  216.75675675675674,
                  284.5945945945946
                ],
                [
                  260,
                  250
                ],
                [
                  262.65625,
                  218.125
                ],
                [
                  240,
                  200
                ],
                [
                  240,
                  110
                ],
                [
                  250.7594936708861,
                  103.54430379746836
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((216.66666666666666 56.666666666666664, 190 20, 60 40, 20 150, 60 260, 160 330, 216.75675675675674 284.5945945945946, 300 330, 380 250, 380 50, 250 30, 216.66666666666666 56.666666666666664),(262.65625 218.125, 270 130, 250.7594936708861 103.54430379746836, 290 80, 330 170, 290 240, 262.65625 218.125),(140 240, 80 190, 90 100, 160 70, 176 89.2, 150 110, 150 170, 172.4390243902439 226.09756097560975, 140 240))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  216.66666666666666,
                  56.666666666666664
                ],
                [
                  190,
                  20
                ],
                [
                  60,
                  40
                ],
                [
                  20,
                  150
                ],
                [
                  60,
                  260
                ],
                [
                  160,
                  330
                ],
                [
                  216.75675675675674,
                  284.5945945945946
                ],
                [
                  300,
                  330
                ],
                [
                  380,
                  250
                ],
                [
                  380,
                  50
                ],
                [
                  250,
                  30
                ],
                [
                  216.66666666666666,
                  56.666666666666664
                ]
              ],
              [
                [
                  262.65625,
                  218.125
                ],
                [
                  270,
                  130
                ],
                [
                  250.7594936708861,
                  103.54430379746836
                ],
                [
                  290,
                  80
                ],
                [
                  330,
                  170
                ],
                [
                  290,
                  240
                ],
                [
                  262.65625,
                  218.125
                ]
              ],
              [
                [
                  140,
                  240
                ],
                [
                  80,
                  190
                ],
                [
                  90,
                  100
                ],
                [
                  160,
                  70
                ],
                [
                  176,
                  89.2
                ],
                [
                  150,
                  110
                ],
                [
                  150,
                  170
                ],
                [
                  172.4390243902439,
                  226.09756097560975
                ],
                [
                  140,
                  240
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "MULTIPOLYGON (((216.66666666666666 56.666666666666664, 190 20, 60 40, 20 150, 60 260, 160 330, 216.75675675675674 284.5945945945946, 190 270, 172.4390243902439 226.09756097560975, 140 240, 80 190, 90 100, 160 70, 176 89.2, 216.66666666666666 56.666666666666664)),((262.65625 218.125, 270 130, 250.7594936708861 103.54430379746836, 240 110, 240 200, 262.65625 218.125)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    216.66666666666666,
                    56.666666666666664
                  ],
                  [
                    190,
                    20
                  ],
                  [
                    60,
                    40
                  ],
                  [
                    20,
                    150
                  ],
                  [
                    60,
                    260
                  ],
                  [
                    160,
                    330
                  ],
                  [
                    216.75675675675674,
                    284.5945945945946
                  ],
                  [
                    190,
                    270
                  ],
                  [
                    172.4390243902439,
                    226.09756097560975
                  ],
                  [
                    140,
                    240
                  ],
                  [
                    80,
                    190
                  ],
                  [
                    90,
                    100
                  ],
                  [
                    160,
                    70
                  ],
                  [
                    176,
                    89.2
                  ],
                  [
                    216.66666666666666,
                    56.666666666666664
                  ]
                ]
              ],
              [
                [
                  [
                    262.65625,
                    218.125
                  ],
                  [
                    270,
                    130
                  ],
                  [
                    250.7594936708861,
                    103.54430379746836
                  ],
                  [
                    240,
                    110
                  ],
                  [
                    240,
                    200
                  ],
                  [
                    262.65625,
                    218.125
                  ]
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((216.66666666666666 56.666666666666664, 190 20, 60 40, 20 150, 60 260, 160 330, 216.75675675675674 284.5945945945946, 190 270, 172.4390243902439 226.09756097560975, 140 240, 80 190, 90 100, 160 70, 176 89.2, 216.66666666666666 56.666666666666664)),((216.66666666666666 56.666666666666664, 250.7594936708861 103.54430379746836, 290 80, 330 170, 290 240, 262.65625 218.125, 260 250, 216.75675675675674 284.5945945945946, 300 330, 380 250, 380 50, 250 30, 216.66666666666666 56.666666666666664)),((262.65625 218.125, 270 130, 250.7594936708861 103.54430379746836, 240 110, 240 200, 262.65625 218.125)),((172.4390243902439 226.09756097560975, 210 210, 210 130, 176 89.2, 150 110, 150 170, 172.4390243902439 226.09756097560975)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    216.66666666666666,
                    56.666666666666664
                  ],
                  [
                    190,
                    20
                  ],
                  [
                    60,
                    40
                  ],
                  [
                    20,
                    150
                  ],
                  [
                    60,
                    260
                  ],
                  [
                    160,
                    330
                  ],
                  [
                    216.75675675675674,
                    284.5945945945946
                  ],
                  [
                    190,
                    270
                  ],
                  [
                    172.4390243902439,
                    226.09756097560975
                  ],
                  [
                    140,
                    240
                  ],
                  [
                    80,
                    190
                  ],
                  [
                    90,
                    100
                  ],
                  [
                    160,
                    70
                  ],
                  [
                    176,
                    89.2
                  ],
                  [
                    216.66666666666666,
                    56.666666666666664
                  ]
                ]
              ],
              [
                [
                  [
                    216.66666666666666,
                    56.666666666666664
                  ],
                  [
                    250.7594936708861,
                    103.54430379746836
                  ],
                  [
                    290,
                    80
                  ],
                  [
                    330,
                    170
                  ],
                  [
                    290,
                    240
                  ],
                  [
                    262.65625,
                    218.125
                  ],
                  [
                    260,
                    250
                  ],
                  [
                    216.75675675675674,
                    284.5945945945946
                  ],
                  [
                    300,
                    330
                  ],
                  [
                    380,
                    250
                  ],
                  [
                    380,
                    50
                  ],
                  [
                    250,
                    30
                  ],
                  [
                    216.66666666666666,
                    56.666666666666664
                  ]
                ]
              ],
              [
                [
                  [
                    262.65625,
                    218.125
                  ],
                  [
                    270,
                    130
                  ],
                  [
                    250.7594936708861,
                    103.54430379746836
                  ],
                  [
                    240,
                    110
                  ],
                  [
                    240,
                    200
                  ],
                  [
                    262.65625,
                    218.125
                  ]
                ]
              ],
              [
                [
                  [
                    172.4390243902439,
                    226.09756097560975
                  ],
                  [
                    210,
                    210
                  ],
                  [
                    210,
                    130
                  ],
                  [
                    176,
                    89.2
                  ],
                  [
                    150,
                    110
                  ],
                  [
                    150,
                    170
                  ],
                  [
                    172.4390243902439,
                    226.09756097560975
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAA",
      "category": "function",
      "title": "mAmA - complex polygons touching and overlapping",
      "id": "14-010",
      "a": {
        "wkt": "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)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  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
                ]
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "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)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  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
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((220 100, 120 200, 120 340, 220 340, 360 200, 360 100, 220 100))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  220,
                  100
                ],
                [
                  120,
                  200
                ],
                [
                  120,
                  340
                ],
                [
                  220,
                  340
                ],
                [
                  360,
                  200
                ],
                [
                  360,
                  100
                ],
                [
                  220,
                  100
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "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)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  200,
                  240
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    300,
                    200
                  ],
                  [
                    220,
                    200
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    280,
                    180
                  ],
                  [
                    300,
                    180
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    300,
                    180
                  ],
                  [
                    300,
                    160
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    300,
                    160
                  ],
                  [
                    280,
                    160
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    140
                  ],
                  [
                    240,
                    140
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    240,
                    120
                  ],
                  [
                    220,
                    120
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      120,
                      200
                    ],
                    [
                      120,
                      220
                    ],
                    [
                      140,
                      220
                    ],
                    [
                      140,
                      200
                    ],
                    [
                      120,
                      200
                    ]
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      160,
                      200
                    ],
                    [
                      160,
                      220
                    ],
                    [
                      180,
                      220
                    ],
                    [
                      180,
                      200
                    ],
                    [
                      160,
                      200
                    ]
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      180,
                      240
                    ],
                    [
                      180,
                      220
                    ],
                    [
                      160,
                      240
                    ],
                    [
                      180,
                      240
                    ]
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      200,
                      200
                    ],
                    [
                      200,
                      220
                    ],
                    [
                      220,
                      220
                    ],
                    [
                      220,
                      200
                    ],
                    [
                      200,
                      200
                    ]
                  ]
                ]
              }
            ]
          }
        },
        "union": {
          "wkt": "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))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  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
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "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)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    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
                  ]
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "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)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    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
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAA",
      "category": "function",
      "title": "mAmA - complex polygons touching",
      "id": "14-011",
      "a": {
        "wkt": "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)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  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
                ]
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "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)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  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
                ]
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": true,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF2F11212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((60 140, 60 240, 220 240, 280 220, 300 200, 260 160, 220 140, 60 140))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  60,
                  140
                ],
                [
                  60,
                  240
                ],
                [
                  220,
                  240
                ],
                [
                  280,
                  220
                ],
                [
                  300,
                  200
                ],
                [
                  260,
                  160
                ],
                [
                  220,
                  140
                ],
                [
                  60,
                  140
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "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))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "Point",
                "coordinates": [
                  240,
                  180
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  260,
                  160
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  280,
                  220
                ]
              },
              {
                "type": "Point",
                "coordinates": [
                  300,
                  200
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    100,
                    200
                  ],
                  [
                    100,
                    180
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    100,
                    180
                  ],
                  [
                    120,
                    180
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    180
                  ],
                  [
                    120,
                    200
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    120,
                    200
                  ],
                  [
                    100,
                    200
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    140
                  ],
                  [
                    220,
                    160
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    160
                  ],
                  [
                    160,
                    160
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    160,
                    160
                  ],
                  [
                    160,
                    180
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    160,
                    180
                  ],
                  [
                    200,
                    180
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    200,
                    200
                  ],
                  [
                    160,
                    200
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    160,
                    200
                  ],
                  [
                    160,
                    220
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    160,
                    220
                  ],
                  [
                    220,
                    220
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    220,
                    220
                  ],
                  [
                    220,
                    240
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    80,
                    220
                  ],
                  [
                    80,
                    160
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    80,
                    160
                  ],
                  [
                    140,
                    160
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    140,
                    160
                  ],
                  [
                    140,
                    220
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    140,
                    220
                  ],
                  [
                    80,
                    220
                  ]
                ]
              }
            ]
          }
        },
        "union": {
          "wkt": "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)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    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
                  ]
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "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)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    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
                  ]
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "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)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    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
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAA",
      "category": "function",
      "title": "AA - hole intersecting boundary to produce line",
      "id": "14-012",
      "a": {
        "wkt": "POLYGON ((60 160, 140 160, 140 60, 60 60, 60 160))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                160
              ],
              [
                140,
                160
              ],
              [
                140,
                60
              ],
              [
                60,
                60
              ],
              [
                60,
                160
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((160 160, 100 160, 100 100, 160 100, 160 160),(140 140, 120 140, 120 120, 140 120, 140 140))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                160,
                160
              ],
              [
                100,
                160
              ],
              [
                100,
                100
              ],
              [
                160,
                100
              ],
              [
                160,
                160
              ]
            ],
            [
              [
                140,
                140
              ],
              [
                120,
                140
              ],
              [
                120,
                120
              ],
              [
                140,
                120
              ],
              [
                140,
                140
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((60 60, 60 160, 140 160, 140 60, 60 60))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  60,
                  60
                ],
                [
                  60,
                  160
                ],
                [
                  140,
                  160
                ],
                [
                  140,
                  60
                ],
                [
                  60,
                  60
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "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)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    140,
                    140
                  ],
                  [
                    140,
                    120
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      100,
                      160
                    ],
                    [
                      140,
                      160
                    ],
                    [
                      140,
                      140
                    ],
                    [
                      120,
                      140
                    ],
                    [
                      120,
                      120
                    ],
                    [
                      140,
                      120
                    ],
                    [
                      140,
                      100
                    ],
                    [
                      100,
                      100
                    ],
                    [
                      100,
                      160
                    ]
                  ]
                ]
              }
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((60 160, 100 160, 140 160, 160 160, 160 100, 140 100, 140 60, 60 60, 60 160))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  60,
                  160
                ],
                [
                  100,
                  160
                ],
                [
                  140,
                  160
                ],
                [
                  160,
                  160
                ],
                [
                  160,
                  100
                ],
                [
                  140,
                  100
                ],
                [
                  140,
                  60
                ],
                [
                  60,
                  60
                ],
                [
                  60,
                  160
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "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)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    60,
                    160
                  ],
                  [
                    100,
                    160
                  ],
                  [
                    100,
                    100
                  ],
                  [
                    140,
                    100
                  ],
                  [
                    140,
                    60
                  ],
                  [
                    60,
                    60
                  ],
                  [
                    60,
                    160
                  ]
                ]
              ],
              [
                [
                  [
                    140,
                    140
                  ],
                  [
                    140,
                    120
                  ],
                  [
                    120,
                    120
                  ],
                  [
                    120,
                    140
                  ],
                  [
                    140,
                    140
                  ]
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "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)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    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
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionPLPrec",
      "category": "function",
      "title": "PP - Point just off line. Causes non-robust algorithms to fail.",
      "id": "15-001",
      "a": {
        "wkt": "LINESTRING (-123456789 -40, 381039468754763 123456789)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              -123456789,
              -40
            ],
            [
              381039468754763,
              123456789
            ]
          ]
        }
      },
      "b": {
        "wkt": "POINT (0 0)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            0,
            0
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": true,
        "intersects": false,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "FF1FF00F2"
      },
      "functions": {}
    },
    {
      "group": "TestFunctionLLPrec",
      "category": "function",
      "title": "LL - narrow V",
      "id": "16-001",
      "a": {
        "wkt": "LINESTRING (0 10, 620 10, 0 11)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              0,
              10
            ],
            [
              620,
              10
            ],
            [
              0,
              11
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (400 60, 400 10)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              400,
              60
            ],
            [
              400,
              10
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "001FF0102"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((0 10, 0 11, 620 10, 0 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  0,
                  10
                ],
                [
                  0,
                  11
                ],
                [
                  620,
                  10
                ],
                [
                  0,
                  10
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOINT (400 10, 400 10.35483870967742)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                400,
                10
              ],
              [
                400,
                10.35483870967742
              ]
            ]
          }
        },
        "union": {
          "wkt": "MULTILINESTRING ((0 10, 400 10),(400 10, 620 10, 400 10.35483870967742),(400 10.35483870967742, 0 11),(400 60, 400 10.35483870967742),(400 10.35483870967742, 400 10))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  0,
                  10
                ],
                [
                  400,
                  10
                ]
              ],
              [
                [
                  400,
                  10
                ],
                [
                  620,
                  10
                ],
                [
                  400,
                  10.35483870967742
                ]
              ],
              [
                [
                  400,
                  10.35483870967742
                ],
                [
                  0,
                  11
                ]
              ],
              [
                [
                  400,
                  60
                ],
                [
                  400,
                  10.35483870967742
                ]
              ],
              [
                [
                  400,
                  10.35483870967742
                ],
                [
                  400,
                  10
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "MULTILINESTRING ((0 10, 400 10),(400 10, 620 10, 400 10.35483870967742),(400 10.35483870967742, 0 11))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  0,
                  10
                ],
                [
                  400,
                  10
                ]
              ],
              [
                [
                  400,
                  10
                ],
                [
                  620,
                  10
                ],
                [
                  400,
                  10.35483870967742
                ]
              ],
              [
                [
                  400,
                  10.35483870967742
                ],
                [
                  0,
                  11
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTILINESTRING ((0 10, 400 10),(400 10, 620 10, 400 10.35483870967742),(400 10.35483870967742, 0 11),(400 60, 400 10.35483870967742),(400 10.35483870967742, 400 10))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  0,
                  10
                ],
                [
                  400,
                  10
                ]
              ],
              [
                [
                  400,
                  10
                ],
                [
                  620,
                  10
                ],
                [
                  400,
                  10.35483870967742
                ]
              ],
              [
                [
                  400,
                  10.35483870967742
                ],
                [
                  0,
                  11
                ]
              ],
              [
                [
                  400,
                  60
                ],
                [
                  400,
                  10.35483870967742
                ]
              ],
              [
                [
                  400,
                  10.35483870967742
                ],
                [
                  400,
                  10
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionLAPrec",
      "category": "function",
      "title": "LA - line and sliver intersecting, dimensional collapse",
      "id": "17-001",
      "a": {
        "wkt": "POLYGON ((95 9, 81 414, 87 414, 95 9))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                95,
                9
              ],
              [
                81,
                414
              ],
              [
                87,
                414
              ],
              [
                95,
                9
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (93 13, 96 13)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              93,
              13
            ],
            [
              96,
              13
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "1F20F1102"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((95 9, 81 414, 87 414, 95 9))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  95,
                  9
                ],
                [
                  81,
                  414
                ],
                [
                  87,
                  414
                ],
                [
                  95,
                  9
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "LINESTRING (94.86172839506173 13, 94.92098765432098 13)",
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                94.86172839506173,
                13
              ],
              [
                94.92098765432098,
                13
              ]
            ]
          }
        },
        "union": {
          "wkt": "GEOMETRYCOLLECTION (LINESTRING (93 13, 94.86172839506173 13), LINESTRING (94.92098765432098 13, 96 13), POLYGON ((95 9, 94.86172839506173 13, 81 414, 87 414, 94.92098765432098 13, 95 9)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    93,
                    13
                  ],
                  [
                    94.86172839506173,
                    13
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    94.92098765432098,
                    13
                  ],
                  [
                    96,
                    13
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      95,
                      9
                    ],
                    [
                      94.86172839506173,
                      13
                    ],
                    [
                      81,
                      414
                    ],
                    [
                      87,
                      414
                    ],
                    [
                      94.92098765432098,
                      13
                    ],
                    [
                      95,
                      9
                    ]
                  ]
                ]
              }
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((95 9, 94.86172839506173 13, 81 414, 87 414, 94.92098765432098 13, 95 9))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  95,
                  9
                ],
                [
                  94.86172839506173,
                  13
                ],
                [
                  81,
                  414
                ],
                [
                  87,
                  414
                ],
                [
                  94.92098765432098,
                  13
                ],
                [
                  95,
                  9
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "GEOMETRYCOLLECTION (LINESTRING (93 13, 94.86172839506173 13), LINESTRING (94.92098765432098 13, 96 13), POLYGON ((95 9, 94.86172839506173 13, 81 414, 87 414, 94.92098765432098 13, 95 9)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    93,
                    13
                  ],
                  [
                    94.86172839506173,
                    13
                  ]
                ]
              },
              {
                "type": "LineString",
                "coordinates": [
                  [
                    94.92098765432098,
                    13
                  ],
                  [
                    96,
                    13
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      95,
                      9
                    ],
                    [
                      94.86172839506173,
                      13
                    ],
                    [
                      81,
                      414
                    ],
                    [
                      87,
                      414
                    ],
                    [
                      94.92098765432098,
                      13
                    ],
                    [
                      95,
                      9
                    ]
                  ]
                ]
              }
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAAPrec",
      "category": "function",
      "title": "AA - sliver triangle, cut by polygon",
      "id": "18-001",
      "a": {
        "wkt": "POLYGON ((10 10, 100 10, 10 11, 10 10))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                10,
                10
              ],
              [
                100,
                10
              ],
              [
                10,
                11
              ],
              [
                10,
                10
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((90 0, 200 0, 200 200, 90 200, 90 0))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                90,
                0
              ],
              [
                200,
                0
              ],
              [
                200,
                200
              ],
              [
                90,
                200
              ],
              [
                90,
                0
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((10 10, 10 11, 100 10, 10 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  10,
                  10
                ],
                [
                  10,
                  11
                ],
                [
                  100,
                  10
                ],
                [
                  10,
                  10
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "POLYGON ((90 10.11111111111111, 100 10, 90 10, 90 10.11111111111111))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  90,
                  10.11111111111111
                ],
                [
                  100,
                  10
                ],
                [
                  90,
                  10
                ],
                [
                  90,
                  10.11111111111111
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((90 10, 10 10, 10 11, 90 10.11111111111111, 90 200, 200 200, 200 0, 90 0, 90 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  90,
                  10
                ],
                [
                  10,
                  10
                ],
                [
                  10,
                  11
                ],
                [
                  90,
                  10.11111111111111
                ],
                [
                  90,
                  200
                ],
                [
                  200,
                  200
                ],
                [
                  200,
                  0
                ],
                [
                  90,
                  0
                ],
                [
                  90,
                  10
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((90 10, 10 10, 10 11, 90 10.11111111111111, 90 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  90,
                  10
                ],
                [
                  10,
                  10
                ],
                [
                  10,
                  11
                ],
                [
                  90,
                  10.11111111111111
                ],
                [
                  90,
                  10
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((90 10, 10 10, 10 11, 90 10.11111111111111, 90 10)),((90 10, 100 10, 90 10.11111111111111, 90 200, 200 200, 200 0, 90 0, 90 10)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    90,
                    10
                  ],
                  [
                    10,
                    10
                  ],
                  [
                    10,
                    11
                  ],
                  [
                    90,
                    10.11111111111111
                  ],
                  [
                    90,
                    10
                  ]
                ]
              ],
              [
                [
                  [
                    90,
                    10
                  ],
                  [
                    100,
                    10
                  ],
                  [
                    90,
                    10.11111111111111
                  ],
                  [
                    90,
                    200
                  ],
                  [
                    200,
                    200
                  ],
                  [
                    200,
                    0
                  ],
                  [
                    90,
                    0
                  ],
                  [
                    90,
                    10
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAAPrec",
      "category": "function",
      "title": "AA - polygon with outward sliver, cut by polygon",
      "id": "18-002",
      "a": {
        "wkt": "POLYGON ((100 10, 10 10, 90 11, 90 20, 100 20, 100 10))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                10
              ],
              [
                10,
                10
              ],
              [
                90,
                11
              ],
              [
                90,
                20
              ],
              [
                100,
                20
              ],
              [
                100,
                10
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 0 20, 0 0, 20 0, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                0,
                20
              ],
              [
                0,
                0
              ],
              [
                20,
                0
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((10 10, 90 20, 100 20, 100 10, 10 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  10,
                  10
                ],
                [
                  90,
                  20
                ],
                [
                  100,
                  20
                ],
                [
                  100,
                  10
                ],
                [
                  10,
                  10
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "POLYGON ((20 10, 10 10, 20 10.125, 20 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  20,
                  10
                ],
                [
                  10,
                  10
                ],
                [
                  20,
                  10.125
                ],
                [
                  20,
                  10
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((100 10, 20 10, 20 0, 0 0, 0 20, 20 20, 20 10.125, 90 11, 90 20, 100 20, 100 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  100,
                  10
                ],
                [
                  20,
                  10
                ],
                [
                  20,
                  0
                ],
                [
                  0,
                  0
                ],
                [
                  0,
                  20
                ],
                [
                  20,
                  20
                ],
                [
                  20,
                  10.125
                ],
                [
                  90,
                  11
                ],
                [
                  90,
                  20
                ],
                [
                  100,
                  20
                ],
                [
                  100,
                  10
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((100 10, 20 10, 20 10.125, 90 11, 90 20, 100 20, 100 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  100,
                  10
                ],
                [
                  20,
                  10
                ],
                [
                  20,
                  10.125
                ],
                [
                  90,
                  11
                ],
                [
                  90,
                  20
                ],
                [
                  100,
                  20
                ],
                [
                  100,
                  10
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((100 10, 20 10, 20 10.125, 90 11, 90 20, 100 20, 100 10)),((20 10.125, 10 10, 20 10, 20 0, 0 0, 0 20, 20 20, 20 10.125)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    100,
                    10
                  ],
                  [
                    20,
                    10
                  ],
                  [
                    20,
                    10.125
                  ],
                  [
                    90,
                    11
                  ],
                  [
                    90,
                    20
                  ],
                  [
                    100,
                    20
                  ],
                  [
                    100,
                    10
                  ]
                ]
              ],
              [
                [
                  [
                    20,
                    10.125
                  ],
                  [
                    10,
                    10
                  ],
                  [
                    20,
                    10
                  ],
                  [
                    20,
                    0
                  ],
                  [
                    0,
                    0
                  ],
                  [
                    0,
                    20
                  ],
                  [
                    20,
                    20
                  ],
                  [
                    20,
                    10.125
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAAPrec",
      "category": "function",
      "title": "AA - narrow wedge in polygon",
      "id": "18-003",
      "a": {
        "wkt": "POLYGON ((10 10, 50 10, 50 50, 10 50, 10 31, 49 30, 10 30, 10 10))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                10,
                10
              ],
              [
                50,
                10
              ],
              [
                50,
                50
              ],
              [
                10,
                50
              ],
              [
                10,
                31
              ],
              [
                49,
                30
              ],
              [
                10,
                30
              ],
              [
                10,
                10
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((60 40, 40 40, 40 20, 60 20, 60 40))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                60,
                40
              ],
              [
                40,
                40
              ],
              [
                40,
                20
              ],
              [
                60,
                20
              ],
              [
                60,
                40
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((10 10, 10 50, 50 50, 50 10, 10 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  10,
                  10
                ],
                [
                  10,
                  50
                ],
                [
                  50,
                  50
                ],
                [
                  50,
                  10
                ],
                [
                  10,
                  10
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "POLYGON ((50 40, 50 20, 40 20, 40 30, 49 30, 40 30.23076923076923, 40 40, 50 40))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  50,
                  40
                ],
                [
                  50,
                  20
                ],
                [
                  40,
                  20
                ],
                [
                  40,
                  30
                ],
                [
                  49,
                  30
                ],
                [
                  40,
                  30.23076923076923
                ],
                [
                  40,
                  40
                ],
                [
                  50,
                  40
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((50 20, 50 10, 10 10, 10 30, 40 30, 40 30.23076923076923, 10 31, 10 50, 50 50, 50 40, 60 40, 60 20, 50 20))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  50,
                  20
                ],
                [
                  50,
                  10
                ],
                [
                  10,
                  10
                ],
                [
                  10,
                  30
                ],
                [
                  40,
                  30
                ],
                [
                  40,
                  30.23076923076923
                ],
                [
                  10,
                  31
                ],
                [
                  10,
                  50
                ],
                [
                  50,
                  50
                ],
                [
                  50,
                  40
                ],
                [
                  60,
                  40
                ],
                [
                  60,
                  20
                ],
                [
                  50,
                  20
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "MULTIPOLYGON (((50 20, 50 10, 10 10, 10 30, 40 30, 40 20, 50 20)),((40 30.23076923076923, 10 31, 10 50, 50 50, 50 40, 40 40, 40 30.23076923076923)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    50,
                    20
                  ],
                  [
                    50,
                    10
                  ],
                  [
                    10,
                    10
                  ],
                  [
                    10,
                    30
                  ],
                  [
                    40,
                    30
                  ],
                  [
                    40,
                    20
                  ],
                  [
                    50,
                    20
                  ]
                ]
              ],
              [
                [
                  [
                    40,
                    30.23076923076923
                  ],
                  [
                    10,
                    31
                  ],
                  [
                    10,
                    50
                  ],
                  [
                    50,
                    50
                  ],
                  [
                    50,
                    40
                  ],
                  [
                    40,
                    40
                  ],
                  [
                    40,
                    30.23076923076923
                  ]
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((50 20, 50 10, 10 10, 10 30, 40 30, 40 20, 50 20)),((50 20, 50 40, 60 40, 60 20, 50 20)),((40 30.23076923076923, 10 31, 10 50, 50 50, 50 40, 40 40, 40 30.23076923076923)),((40 30.23076923076923, 49 30, 40 30, 40 30.23076923076923)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    50,
                    20
                  ],
                  [
                    50,
                    10
                  ],
                  [
                    10,
                    10
                  ],
                  [
                    10,
                    30
                  ],
                  [
                    40,
                    30
                  ],
                  [
                    40,
                    20
                  ],
                  [
                    50,
                    20
                  ]
                ]
              ],
              [
                [
                  [
                    50,
                    20
                  ],
                  [
                    50,
                    40
                  ],
                  [
                    60,
                    40
                  ],
                  [
                    60,
                    20
                  ],
                  [
                    50,
                    20
                  ]
                ]
              ],
              [
                [
                  [
                    40,
                    30.23076923076923
                  ],
                  [
                    10,
                    31
                  ],
                  [
                    10,
                    50
                  ],
                  [
                    50,
                    50
                  ],
                  [
                    50,
                    40
                  ],
                  [
                    40,
                    40
                  ],
                  [
                    40,
                    30.23076923076923
                  ]
                ]
              ],
              [
                [
                  [
                    40,
                    30.23076923076923
                  ],
                  [
                    49,
                    30
                  ],
                  [
                    40,
                    30
                  ],
                  [
                    40,
                    30.23076923076923
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAAPrec",
      "category": "function",
      "title": "AA - hole close to shell",
      "id": "18-004",
      "a": {
        "wkt": "POLYGON ((10 100, 10 10, 100 10, 100 100, 10 100),(90 90, 11 90, 10 10, 90 11, 90 90))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                10,
                100
              ],
              [
                10,
                10
              ],
              [
                100,
                10
              ],
              [
                100,
                100
              ],
              [
                10,
                100
              ]
            ],
            [
              [
                90,
                90
              ],
              [
                11,
                90
              ],
              [
                10,
                10
              ],
              [
                90,
                11
              ],
              [
                90,
                90
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((0 30, 0 0, 30 0, 30 30, 0 30))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                0,
                30
              ],
              [
                0,
                0
              ],
              [
                30,
                0
              ],
              [
                30,
                30
              ],
              [
                0,
                30
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((10 10, 10 100, 100 100, 100 10, 10 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  10,
                  10
                ],
                [
                  10,
                  100
                ],
                [
                  100,
                  100
                ],
                [
                  100,
                  10
                ],
                [
                  10,
                  10
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOLYGON (((10 10, 10 30, 10.25 30, 10 10)),((30 10, 10 10, 30 10.25, 30 10)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    10,
                    10
                  ],
                  [
                    10,
                    30
                  ],
                  [
                    10.25,
                    30
                  ],
                  [
                    10,
                    10
                  ]
                ]
              ],
              [
                [
                  [
                    30,
                    10
                  ],
                  [
                    10,
                    10
                  ],
                  [
                    30,
                    10.25
                  ],
                  [
                    30,
                    10
                  ]
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((10 30, 10 100, 100 100, 100 10, 30 10, 30 0, 0 0, 0 30, 10 30),(90 90, 11 90, 10.25 30, 30 30, 30 10.25, 90 11, 90 90))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  10,
                  30
                ],
                [
                  10,
                  100
                ],
                [
                  100,
                  100
                ],
                [
                  100,
                  10
                ],
                [
                  30,
                  10
                ],
                [
                  30,
                  0
                ],
                [
                  0,
                  0
                ],
                [
                  0,
                  30
                ],
                [
                  10,
                  30
                ]
              ],
              [
                [
                  90,
                  90
                ],
                [
                  11,
                  90
                ],
                [
                  10.25,
                  30
                ],
                [
                  30,
                  30
                ],
                [
                  30,
                  10.25
                ],
                [
                  90,
                  11
                ],
                [
                  90,
                  90
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((10 30, 10 100, 100 100, 100 10, 30 10, 30 10.25, 90 11, 90 90, 11 90, 10.25 30, 10 30))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  10,
                  30
                ],
                [
                  10,
                  100
                ],
                [
                  100,
                  100
                ],
                [
                  100,
                  10
                ],
                [
                  30,
                  10
                ],
                [
                  30,
                  10.25
                ],
                [
                  90,
                  11
                ],
                [
                  90,
                  90
                ],
                [
                  11,
                  90
                ],
                [
                  10.25,
                  30
                ],
                [
                  10,
                  30
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((10 30, 10 100, 100 100, 100 10, 30 10, 30 10.25, 90 11, 90 90, 11 90, 10.25 30, 10 30)),((10 30, 10 10, 30 10, 30 0, 0 0, 0 30, 10 30)),((10 10, 10.25 30, 30 30, 30 10.25, 10 10)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    10,
                    30
                  ],
                  [
                    10,
                    100
                  ],
                  [
                    100,
                    100
                  ],
                  [
                    100,
                    10
                  ],
                  [
                    30,
                    10
                  ],
                  [
                    30,
                    10.25
                  ],
                  [
                    90,
                    11
                  ],
                  [
                    90,
                    90
                  ],
                  [
                    11,
                    90
                  ],
                  [
                    10.25,
                    30
                  ],
                  [
                    10,
                    30
                  ]
                ]
              ],
              [
                [
                  [
                    10,
                    30
                  ],
                  [
                    10,
                    10
                  ],
                  [
                    30,
                    10
                  ],
                  [
                    30,
                    0
                  ],
                  [
                    0,
                    0
                  ],
                  [
                    0,
                    30
                  ],
                  [
                    10,
                    30
                  ]
                ]
              ],
              [
                [
                  [
                    10,
                    10
                  ],
                  [
                    10.25,
                    30
                  ],
                  [
                    30,
                    30
                  ],
                  [
                    30,
                    10.25
                  ],
                  [
                    10,
                    10
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAAPrec",
      "category": "function",
      "title": "mAA - shells close together",
      "id": "18-005",
      "a": {
        "wkt": "MULTIPOLYGON (((0 0, 100 0, 100 20, 0 20, 0 0)),((0 40, 0 21, 100 20, 100 40, 0 40)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  0,
                  0
                ],
                [
                  100,
                  0
                ],
                [
                  100,
                  20
                ],
                [
                  0,
                  20
                ],
                [
                  0,
                  0
                ]
              ]
            ],
            [
              [
                [
                  0,
                  40
                ],
                [
                  0,
                  21
                ],
                [
                  100,
                  20
                ],
                [
                  100,
                  40
                ],
                [
                  0,
                  40
                ]
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((110 30, 90 30, 90 10, 110 10, 110 30))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                110,
                30
              ],
              [
                90,
                30
              ],
              [
                90,
                10
              ],
              [
                110,
                10
              ],
              [
                110,
                30
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((0 0, 0 40, 100 40, 100 0, 0 0))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  0,
                  0
                ],
                [
                  0,
                  40
                ],
                [
                  100,
                  40
                ],
                [
                  100,
                  0
                ],
                [
                  0,
                  0
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOLYGON (((100 20, 100 10, 90 10, 90 20, 100 20)),((100 20, 90 20.1, 90 30, 100 30, 100 20)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    100,
                    20
                  ],
                  [
                    100,
                    10
                  ],
                  [
                    90,
                    10
                  ],
                  [
                    90,
                    20
                  ],
                  [
                    100,
                    20
                  ]
                ]
              ],
              [
                [
                  [
                    100,
                    20
                  ],
                  [
                    90,
                    20.1
                  ],
                  [
                    90,
                    30
                  ],
                  [
                    100,
                    30
                  ],
                  [
                    100,
                    20
                  ]
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((100 10, 100 0, 0 0, 0 20, 90 20, 90 20.1, 0 21, 0 40, 100 40, 100 30, 110 30, 110 10, 100 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  100,
                  10
                ],
                [
                  100,
                  0
                ],
                [
                  0,
                  0
                ],
                [
                  0,
                  20
                ],
                [
                  90,
                  20
                ],
                [
                  90,
                  20.1
                ],
                [
                  0,
                  21
                ],
                [
                  0,
                  40
                ],
                [
                  100,
                  40
                ],
                [
                  100,
                  30
                ],
                [
                  110,
                  30
                ],
                [
                  110,
                  10
                ],
                [
                  100,
                  10
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "MULTIPOLYGON (((100 10, 100 0, 0 0, 0 20, 90 20, 90 10, 100 10)),((90 20.1, 0 21, 0 40, 100 40, 100 30, 90 30, 90 20.1)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    100,
                    10
                  ],
                  [
                    100,
                    0
                  ],
                  [
                    0,
                    0
                  ],
                  [
                    0,
                    20
                  ],
                  [
                    90,
                    20
                  ],
                  [
                    90,
                    10
                  ],
                  [
                    100,
                    10
                  ]
                ]
              ],
              [
                [
                  [
                    90,
                    20.1
                  ],
                  [
                    0,
                    21
                  ],
                  [
                    0,
                    40
                  ],
                  [
                    100,
                    40
                  ],
                  [
                    100,
                    30
                  ],
                  [
                    90,
                    30
                  ],
                  [
                    90,
                    20.1
                  ]
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((100 10, 100 0, 0 0, 0 20, 90 20, 90 10, 100 10)),((100 10, 100 20, 100 30, 110 30, 110 10, 100 10)),((100 20, 90 20, 90 20.1, 100 20)),((90 20.1, 0 21, 0 40, 100 40, 100 30, 90 30, 90 20.1)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    100,
                    10
                  ],
                  [
                    100,
                    0
                  ],
                  [
                    0,
                    0
                  ],
                  [
                    0,
                    20
                  ],
                  [
                    90,
                    20
                  ],
                  [
                    90,
                    10
                  ],
                  [
                    100,
                    10
                  ]
                ]
              ],
              [
                [
                  [
                    100,
                    10
                  ],
                  [
                    100,
                    20
                  ],
                  [
                    100,
                    30
                  ],
                  [
                    110,
                    30
                  ],
                  [
                    110,
                    10
                  ],
                  [
                    100,
                    10
                  ]
                ]
              ],
              [
                [
                  [
                    100,
                    20
                  ],
                  [
                    90,
                    20
                  ],
                  [
                    90,
                    20.1
                  ],
                  [
                    100,
                    20
                  ]
                ]
              ],
              [
                [
                  [
                    90,
                    20.1
                  ],
                  [
                    0,
                    21
                  ],
                  [
                    0,
                    40
                  ],
                  [
                    100,
                    40
                  ],
                  [
                    100,
                    30
                  ],
                  [
                    90,
                    30
                  ],
                  [
                    90,
                    20.1
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAAPrec",
      "category": "function",
      "title": "AA - A sliver triangle cutting all the way across B",
      "id": "18-006",
      "a": {
        "wkt": "POLYGON ((100 10, 0 10, 100 11, 100 10))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                10
              ],
              [
                0,
                10
              ],
              [
                100,
                11
              ],
              [
                100,
                10
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 0 20, 0 0, 20 0, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                0,
                20
              ],
              [
                0,
                0
              ],
              [
                20,
                0
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((0 10, 100 11, 100 10, 0 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  0,
                  10
                ],
                [
                  100,
                  11
                ],
                [
                  100,
                  10
                ],
                [
                  0,
                  10
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "POLYGON ((20 10, 0 10, 20 10.2, 20 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  20,
                  10
                ],
                [
                  0,
                  10
                ],
                [
                  20,
                  10.2
                ],
                [
                  20,
                  10
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((100 10, 20 10, 20 0, 0 0, 0 10, 0 20, 20 20, 20 10.2, 100 11, 100 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  100,
                  10
                ],
                [
                  20,
                  10
                ],
                [
                  20,
                  0
                ],
                [
                  0,
                  0
                ],
                [
                  0,
                  10
                ],
                [
                  0,
                  20
                ],
                [
                  20,
                  20
                ],
                [
                  20,
                  10.2
                ],
                [
                  100,
                  11
                ],
                [
                  100,
                  10
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((100 10, 20 10, 20 10.2, 100 11, 100 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  100,
                  10
                ],
                [
                  20,
                  10
                ],
                [
                  20,
                  10.2
                ],
                [
                  100,
                  11
                ],
                [
                  100,
                  10
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((100 10, 20 10, 20 10.2, 100 11, 100 10)),((0 10, 20 10, 20 0, 0 0, 0 10)),((20 10.2, 0 10, 0 20, 20 20, 20 10.2)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    100,
                    10
                  ],
                  [
                    20,
                    10
                  ],
                  [
                    20,
                    10.2
                  ],
                  [
                    100,
                    11
                  ],
                  [
                    100,
                    10
                  ]
                ]
              ],
              [
                [
                  [
                    0,
                    10
                  ],
                  [
                    20,
                    10
                  ],
                  [
                    20,
                    0
                  ],
                  [
                    0,
                    0
                  ],
                  [
                    0,
                    10
                  ]
                ]
              ],
              [
                [
                  [
                    20,
                    10.2
                  ],
                  [
                    0,
                    10
                  ],
                  [
                    0,
                    20
                  ],
                  [
                    20,
                    20
                  ],
                  [
                    20,
                    10.2
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAAPrec",
      "category": "function",
      "title": "AA - A polygon with sliver cutting all the way across B",
      "id": "18-007",
      "a": {
        "wkt": "POLYGON ((100 10, 0 10, 90 11, 90 20, 100 20, 100 10))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                100,
                10
              ],
              [
                0,
                10
              ],
              [
                90,
                11
              ],
              [
                90,
                20
              ],
              [
                100,
                20
              ],
              [
                100,
                10
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((20 20, 0 20, 0 0, 20 0, 20 20))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                20
              ],
              [
                0,
                20
              ],
              [
                0,
                0
              ],
              [
                20,
                0
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((0 10, 90 20, 100 20, 100 10, 0 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  0,
                  10
                ],
                [
                  90,
                  20
                ],
                [
                  100,
                  20
                ],
                [
                  100,
                  10
                ],
                [
                  0,
                  10
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "POLYGON ((20 10, 0 10, 20 10.222222222222221, 20 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  20,
                  10
                ],
                [
                  0,
                  10
                ],
                [
                  20,
                  10.222222222222221
                ],
                [
                  20,
                  10
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((100 10, 20 10, 20 0, 0 0, 0 10, 0 20, 20 20, 20 10.222222222222221, 90 11, 90 20, 100 20, 100 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  100,
                  10
                ],
                [
                  20,
                  10
                ],
                [
                  20,
                  0
                ],
                [
                  0,
                  0
                ],
                [
                  0,
                  10
                ],
                [
                  0,
                  20
                ],
                [
                  20,
                  20
                ],
                [
                  20,
                  10.222222222222221
                ],
                [
                  90,
                  11
                ],
                [
                  90,
                  20
                ],
                [
                  100,
                  20
                ],
                [
                  100,
                  10
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((100 10, 20 10, 20 10.222222222222221, 90 11, 90 20, 100 20, 100 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  100,
                  10
                ],
                [
                  20,
                  10
                ],
                [
                  20,
                  10.222222222222221
                ],
                [
                  90,
                  11
                ],
                [
                  90,
                  20
                ],
                [
                  100,
                  20
                ],
                [
                  100,
                  10
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((100 10, 20 10, 20 10.222222222222221, 90 11, 90 20, 100 20, 100 10)),((0 10, 20 10, 20 0, 0 0, 0 10)),((20 10.222222222222221, 0 10, 0 20, 20 20, 20 10.222222222222221)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    100,
                    10
                  ],
                  [
                    20,
                    10
                  ],
                  [
                    20,
                    10.222222222222221
                  ],
                  [
                    90,
                    11
                  ],
                  [
                    90,
                    20
                  ],
                  [
                    100,
                    20
                  ],
                  [
                    100,
                    10
                  ]
                ]
              ],
              [
                [
                  [
                    0,
                    10
                  ],
                  [
                    20,
                    10
                  ],
                  [
                    20,
                    0
                  ],
                  [
                    0,
                    0
                  ],
                  [
                    0,
                    10
                  ]
                ]
              ],
              [
                [
                  [
                    20,
                    10.222222222222221
                  ],
                  [
                    0,
                    10
                  ],
                  [
                    0,
                    20
                  ],
                  [
                    20,
                    20
                  ],
                  [
                    20,
                    10.222222222222221
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAAPrec",
      "category": "function",
      "title": "AA - hole close to shell, B coincident with A",
      "id": "18-008",
      "a": {
        "wkt": "POLYGON ((10 100, 10 10, 100 10, 100 100, 10 100),(90 90, 11 90, 10 10, 90 11, 90 90))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                10,
                100
              ],
              [
                10,
                10
              ],
              [
                100,
                10
              ],
              [
                100,
                100
              ],
              [
                10,
                100
              ]
            ],
            [
              [
                90,
                90
              ],
              [
                11,
                90
              ],
              [
                10,
                10
              ],
              [
                90,
                11
              ],
              [
                90,
                90
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((10 30, 10 0, 30 10, 30 30, 10 30))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                10,
                30
              ],
              [
                10,
                0
              ],
              [
                30,
                10
              ],
              [
                30,
                30
              ],
              [
                10,
                30
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((10 10, 10 100, 100 100, 100 10, 10 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  10,
                  10
                ],
                [
                  10,
                  100
                ],
                [
                  100,
                  100
                ],
                [
                  100,
                  10
                ],
                [
                  10,
                  10
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOLYGON (((10 10, 10 30, 10.25 30, 10 10)),((30 10, 10 10, 30 10.25, 30 10)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    10,
                    10
                  ],
                  [
                    10,
                    30
                  ],
                  [
                    10.25,
                    30
                  ],
                  [
                    10,
                    10
                  ]
                ]
              ],
              [
                [
                  [
                    30,
                    10
                  ],
                  [
                    10,
                    10
                  ],
                  [
                    30,
                    10.25
                  ],
                  [
                    30,
                    10
                  ]
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((10 30, 10 100, 100 100, 100 10, 30 10, 10 0, 10 10, 10 30),(90 90, 11 90, 10.25 30, 30 30, 30 10.25, 90 11, 90 90))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  10,
                  30
                ],
                [
                  10,
                  100
                ],
                [
                  100,
                  100
                ],
                [
                  100,
                  10
                ],
                [
                  30,
                  10
                ],
                [
                  10,
                  0
                ],
                [
                  10,
                  10
                ],
                [
                  10,
                  30
                ]
              ],
              [
                [
                  90,
                  90
                ],
                [
                  11,
                  90
                ],
                [
                  10.25,
                  30
                ],
                [
                  30,
                  30
                ],
                [
                  30,
                  10.25
                ],
                [
                  90,
                  11
                ],
                [
                  90,
                  90
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((10 30, 10 100, 100 100, 100 10, 30 10, 30 10.25, 90 11, 90 90, 11 90, 10.25 30, 10 30))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  10,
                  30
                ],
                [
                  10,
                  100
                ],
                [
                  100,
                  100
                ],
                [
                  100,
                  10
                ],
                [
                  30,
                  10
                ],
                [
                  30,
                  10.25
                ],
                [
                  90,
                  11
                ],
                [
                  90,
                  90
                ],
                [
                  11,
                  90
                ],
                [
                  10.25,
                  30
                ],
                [
                  10,
                  30
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((10 30, 10 100, 100 100, 100 10, 30 10, 30 10.25, 90 11, 90 90, 11 90, 10.25 30, 10 30)),((10 10, 30 10, 10 0, 10 10)),((10 10, 10.25 30, 30 30, 30 10.25, 10 10)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    10,
                    30
                  ],
                  [
                    10,
                    100
                  ],
                  [
                    100,
                    100
                  ],
                  [
                    100,
                    10
                  ],
                  [
                    30,
                    10
                  ],
                  [
                    30,
                    10.25
                  ],
                  [
                    90,
                    11
                  ],
                  [
                    90,
                    90
                  ],
                  [
                    11,
                    90
                  ],
                  [
                    10.25,
                    30
                  ],
                  [
                    10,
                    30
                  ]
                ]
              ],
              [
                [
                  [
                    10,
                    10
                  ],
                  [
                    30,
                    10
                  ],
                  [
                    10,
                    0
                  ],
                  [
                    10,
                    10
                  ]
                ]
              ],
              [
                [
                  [
                    10,
                    10
                  ],
                  [
                    10.25,
                    30
                  ],
                  [
                    30,
                    30
                  ],
                  [
                    30,
                    10.25
                  ],
                  [
                    10,
                    10
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAAPrec",
      "category": "function",
      "title": "AA - A hole close to shell, B coincident with A",
      "id": "18-009",
      "a": {
        "wkt": "POLYGON ((10 100, 10 10, 100 10, 100 100, 10 100),(90 90, 11 90, 10 10, 90 11, 90 90))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                10,
                100
              ],
              [
                10,
                10
              ],
              [
                100,
                10
              ],
              [
                100,
                100
              ],
              [
                10,
                100
              ]
            ],
            [
              [
                90,
                90
              ],
              [
                11,
                90
              ],
              [
                10,
                10
              ],
              [
                90,
                11
              ],
              [
                90,
                90
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((10 30, 10 10, 30 10, 30 30, 10 30))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                10,
                30
              ],
              [
                10,
                10
              ],
              [
                30,
                10
              ],
              [
                30,
                30
              ],
              [
                10,
                30
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((10 10, 10 100, 100 100, 100 10, 10 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  10,
                  10
                ],
                [
                  10,
                  100
                ],
                [
                  100,
                  100
                ],
                [
                  100,
                  10
                ],
                [
                  10,
                  10
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOLYGON (((10 10, 10 30, 10.25 30, 10 10)),((30 10, 10 10, 30 10.25, 30 10)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    10,
                    10
                  ],
                  [
                    10,
                    30
                  ],
                  [
                    10.25,
                    30
                  ],
                  [
                    10,
                    10
                  ]
                ]
              ],
              [
                [
                  [
                    30,
                    10
                  ],
                  [
                    10,
                    10
                  ],
                  [
                    30,
                    10.25
                  ],
                  [
                    30,
                    10
                  ]
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((10 30, 10 100, 100 100, 100 10, 30 10, 10 10, 10 30),(90 90, 11 90, 10.25 30, 30 30, 30 10.25, 90 11, 90 90))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  10,
                  30
                ],
                [
                  10,
                  100
                ],
                [
                  100,
                  100
                ],
                [
                  100,
                  10
                ],
                [
                  30,
                  10
                ],
                [
                  10,
                  10
                ],
                [
                  10,
                  30
                ]
              ],
              [
                [
                  90,
                  90
                ],
                [
                  11,
                  90
                ],
                [
                  10.25,
                  30
                ],
                [
                  30,
                  30
                ],
                [
                  30,
                  10.25
                ],
                [
                  90,
                  11
                ],
                [
                  90,
                  90
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((10 30, 10 100, 100 100, 100 10, 30 10, 30 10.25, 90 11, 90 90, 11 90, 10.25 30, 10 30))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  10,
                  30
                ],
                [
                  10,
                  100
                ],
                [
                  100,
                  100
                ],
                [
                  100,
                  10
                ],
                [
                  30,
                  10
                ],
                [
                  30,
                  10.25
                ],
                [
                  90,
                  11
                ],
                [
                  90,
                  90
                ],
                [
                  11,
                  90
                ],
                [
                  10.25,
                  30
                ],
                [
                  10,
                  30
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((10 30, 10 100, 100 100, 100 10, 30 10, 30 10.25, 90 11, 90 90, 11 90, 10.25 30, 10 30)),((10 10, 10.25 30, 30 30, 30 10.25, 10 10)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    10,
                    30
                  ],
                  [
                    10,
                    100
                  ],
                  [
                    100,
                    100
                  ],
                  [
                    100,
                    10
                  ],
                  [
                    30,
                    10
                  ],
                  [
                    30,
                    10.25
                  ],
                  [
                    90,
                    11
                  ],
                  [
                    90,
                    90
                  ],
                  [
                    11,
                    90
                  ],
                  [
                    10.25,
                    30
                  ],
                  [
                    10,
                    30
                  ]
                ]
              ],
              [
                [
                  [
                    10,
                    10
                  ],
                  [
                    10.25,
                    30
                  ],
                  [
                    30,
                    30
                  ],
                  [
                    30,
                    10.25
                  ],
                  [
                    10,
                    10
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAAPrec",
      "category": "function",
      "title": "AA - B hole close to shell, A coincident with B",
      "id": "18-010",
      "a": {
        "wkt": "POLYGON ((10 30, 10 10, 30 10, 30 30, 10 30))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                10,
                30
              ],
              [
                10,
                10
              ],
              [
                30,
                10
              ],
              [
                30,
                30
              ],
              [
                10,
                30
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((10 100, 10 10, 100 10, 100 100, 10 100),(90 90, 11 90, 10 10, 90 11, 90 90))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                10,
                100
              ],
              [
                10,
                10
              ],
              [
                100,
                10
              ],
              [
                100,
                100
              ],
              [
                10,
                100
              ]
            ],
            [
              [
                90,
                90
              ],
              [
                11,
                90
              ],
              [
                10,
                10
              ],
              [
                90,
                11
              ],
              [
                90,
                90
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212111212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((10 10, 10 30, 30 30, 30 10, 10 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  10,
                  10
                ],
                [
                  10,
                  30
                ],
                [
                  30,
                  30
                ],
                [
                  30,
                  10
                ],
                [
                  10,
                  10
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOLYGON (((10 10, 10 30, 10.25 30, 10 10)),((30 10, 10 10, 30 10.25, 30 10)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    10,
                    10
                  ],
                  [
                    10,
                    30
                  ],
                  [
                    10.25,
                    30
                  ],
                  [
                    10,
                    10
                  ]
                ]
              ],
              [
                [
                  [
                    30,
                    10
                  ],
                  [
                    10,
                    10
                  ],
                  [
                    30,
                    10.25
                  ],
                  [
                    30,
                    10
                  ]
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((10 10, 10 30, 10 100, 100 100, 100 10, 30 10, 10 10),(10.25 30, 30 30, 30 10.25, 90 11, 90 90, 11 90, 10.25 30))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  10,
                  10
                ],
                [
                  10,
                  30
                ],
                [
                  10,
                  100
                ],
                [
                  100,
                  100
                ],
                [
                  100,
                  10
                ],
                [
                  30,
                  10
                ],
                [
                  10,
                  10
                ]
              ],
              [
                [
                  10.25,
                  30
                ],
                [
                  30,
                  30
                ],
                [
                  30,
                  10.25
                ],
                [
                  90,
                  11
                ],
                [
                  90,
                  90
                ],
                [
                  11,
                  90
                ],
                [
                  10.25,
                  30
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((10.25 30, 30 30, 30 10.25, 10 10, 10.25 30))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  10.25,
                  30
                ],
                [
                  30,
                  30
                ],
                [
                  30,
                  10.25
                ],
                [
                  10,
                  10
                ],
                [
                  10.25,
                  30
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((30 10, 30 10.25, 90 11, 90 90, 11 90, 10.25 30, 10 30, 10 100, 100 100, 100 10, 30 10)),((10.25 30, 30 30, 30 10.25, 10 10, 10.25 30)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    30,
                    10
                  ],
                  [
                    30,
                    10.25
                  ],
                  [
                    90,
                    11
                  ],
                  [
                    90,
                    90
                  ],
                  [
                    11,
                    90
                  ],
                  [
                    10.25,
                    30
                  ],
                  [
                    10,
                    30
                  ],
                  [
                    10,
                    100
                  ],
                  [
                    100,
                    100
                  ],
                  [
                    100,
                    10
                  ],
                  [
                    30,
                    10
                  ]
                ]
              ],
              [
                [
                  [
                    10.25,
                    30
                  ],
                  [
                    30,
                    30
                  ],
                  [
                    30,
                    10.25
                  ],
                  [
                    10,
                    10
                  ],
                  [
                    10.25,
                    30
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAAPrec",
      "category": "function",
      "title": "AA - B sliver crossing A triangle in line segment with length &lt; 1",
      "id": "18-011",
      "a": {
        "wkt": "POLYGON ((0 0, 200 0, 0 198, 0 0))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                0,
                0
              ],
              [
                200,
                0
              ],
              [
                0,
                198
              ],
              [
                0,
                0
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((280 60, 139 60, 280 70, 280 60))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                280,
                60
              ],
              [
                139,
                60
              ],
              [
                280,
                70
              ],
              [
                280,
                60
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((0 0, 0 198, 200 0, 0 0))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  0,
                  0
                ],
                [
                  0,
                  198
                ],
                [
                  200,
                  0
                ],
                [
                  0,
                  0
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "POLYGON ((139.3676047864162 60.02607126144796, 139.3939393939394 60, 139 60, 139.3676047864162 60.02607126144796))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  139.3676047864162,
                  60.02607126144796
                ],
                [
                  139.3939393939394,
                  60
                ],
                [
                  139,
                  60
                ],
                [
                  139.3676047864162,
                  60.02607126144796
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((139.3939393939394 60, 200 0, 0 0, 0 198, 139.3676047864162 60.02607126144796, 280 70, 280 60, 139.3939393939394 60))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  139.3939393939394,
                  60
                ],
                [
                  200,
                  0
                ],
                [
                  0,
                  0
                ],
                [
                  0,
                  198
                ],
                [
                  139.3676047864162,
                  60.02607126144796
                ],
                [
                  280,
                  70
                ],
                [
                  280,
                  60
                ],
                [
                  139.3939393939394,
                  60
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((139.3939393939394 60, 200 0, 0 0, 0 198, 139.3676047864162 60.02607126144796, 139 60, 139.3939393939394 60))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  139.3939393939394,
                  60
                ],
                [
                  200,
                  0
                ],
                [
                  0,
                  0
                ],
                [
                  0,
                  198
                ],
                [
                  139.3676047864162,
                  60.02607126144796
                ],
                [
                  139,
                  60
                ],
                [
                  139.3939393939394,
                  60
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((139.3939393939394 60, 200 0, 0 0, 0 198, 139.3676047864162 60.02607126144796, 139 60, 139.3939393939394 60)),((139.3939393939394 60, 139.3676047864162 60.02607126144796, 280 70, 280 60, 139.3939393939394 60)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    139.3939393939394,
                    60
                  ],
                  [
                    200,
                    0
                  ],
                  [
                    0,
                    0
                  ],
                  [
                    0,
                    198
                  ],
                  [
                    139.3676047864162,
                    60.02607126144796
                  ],
                  [
                    139,
                    60
                  ],
                  [
                    139.3939393939394,
                    60
                  ]
                ]
              ],
              [
                [
                  [
                    139.3939393939394,
                    60
                  ],
                  [
                    139.3676047864162,
                    60.02607126144796
                  ],
                  [
                    280,
                    70
                  ],
                  [
                    280,
                    60
                  ],
                  [
                    139.3939393939394,
                    60
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAAPrec",
      "category": "function",
      "title": "AA - sliver triangles, at angle to each other",
      "id": "18-012",
      "a": {
        "wkt": "POLYGON ((0 0, 140 10, 0 20, 0 0))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                0,
                0
              ],
              [
                140,
                10
              ],
              [
                0,
                20
              ],
              [
                0,
                0
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((280 0, 139 10, 280 1, 280 0))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                280,
                0
              ],
              [
                139,
                10
              ],
              [
                280,
                1
              ],
              [
                280,
                0
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((0 0, 0 20, 140 10, 0 0))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  0,
                  0
                ],
                [
                  0,
                  20
                ],
                [
                  140,
                  10
                ],
                [
                  0,
                  0
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "POLYGON ((139.52808988764045 9.96629213483146, 139.5017793594306 9.9644128113879, 139 10, 139.52808988764045 9.96629213483146))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  139.52808988764045,
                  9.96629213483146
                ],
                [
                  139.5017793594306,
                  9.9644128113879
                ],
                [
                  139,
                  10
                ],
                [
                  139.52808988764045,
                  9.96629213483146
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((139.5017793594306 9.9644128113879, 0 0, 0 20, 140 10, 139.52808988764045 9.96629213483146, 280 1, 280 0, 139.5017793594306 9.9644128113879))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  139.5017793594306,
                  9.9644128113879
                ],
                [
                  0,
                  0
                ],
                [
                  0,
                  20
                ],
                [
                  140,
                  10
                ],
                [
                  139.52808988764045,
                  9.96629213483146
                ],
                [
                  280,
                  1
                ],
                [
                  280,
                  0
                ],
                [
                  139.5017793594306,
                  9.9644128113879
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((139.5017793594306 9.9644128113879, 0 0, 0 20, 140 10, 139.52808988764045 9.96629213483146, 139 10, 139.5017793594306 9.9644128113879))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  139.5017793594306,
                  9.9644128113879
                ],
                [
                  0,
                  0
                ],
                [
                  0,
                  20
                ],
                [
                  140,
                  10
                ],
                [
                  139.52808988764045,
                  9.96629213483146
                ],
                [
                  139,
                  10
                ],
                [
                  139.5017793594306,
                  9.9644128113879
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((139.5017793594306 9.9644128113879, 0 0, 0 20, 140 10, 139.52808988764045 9.96629213483146, 139 10, 139.5017793594306 9.9644128113879)),((139.5017793594306 9.9644128113879, 139.52808988764045 9.96629213483146, 280 1, 280 0, 139.5017793594306 9.9644128113879)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    139.5017793594306,
                    9.9644128113879
                  ],
                  [
                    0,
                    0
                  ],
                  [
                    0,
                    20
                  ],
                  [
                    140,
                    10
                  ],
                  [
                    139.52808988764045,
                    9.96629213483146
                  ],
                  [
                    139,
                    10
                  ],
                  [
                    139.5017793594306,
                    9.9644128113879
                  ]
                ]
              ],
              [
                [
                  [
                    139.5017793594306,
                    9.9644128113879
                  ],
                  [
                    139.52808988764045,
                    9.96629213483146
                  ],
                  [
                    280,
                    1
                  ],
                  [
                    280,
                    0
                  ],
                  [
                    139.5017793594306,
                    9.9644128113879
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAAPrec",
      "category": "function",
      "title": "AA - sliver triangle with multiple intersecting boxes",
      "id": "18-013",
      "a": {
        "wkt": "MULTIPOLYGON (((1 4, 1 1, 2 1, 2 4, 1 4)),((3 4, 3 1, 4 1, 4 4, 3 4)),((5 4, 5 1, 6 1, 6 4, 5 4)),((7 4, 7 1, 8 1, 8 4, 7 4)),((9 4, 9 1, 10 1, 10 4, 9 4)))",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
            [
              [
                [
                  1,
                  4
                ],
                [
                  1,
                  1
                ],
                [
                  2,
                  1
                ],
                [
                  2,
                  4
                ],
                [
                  1,
                  4
                ]
              ]
            ],
            [
              [
                [
                  3,
                  4
                ],
                [
                  3,
                  1
                ],
                [
                  4,
                  1
                ],
                [
                  4,
                  4
                ],
                [
                  3,
                  4
                ]
              ]
            ],
            [
              [
                [
                  5,
                  4
                ],
                [
                  5,
                  1
                ],
                [
                  6,
                  1
                ],
                [
                  6,
                  4
                ],
                [
                  5,
                  4
                ]
              ]
            ],
            [
              [
                [
                  7,
                  4
                ],
                [
                  7,
                  1
                ],
                [
                  8,
                  1
                ],
                [
                  8,
                  4
                ],
                [
                  7,
                  4
                ]
              ]
            ],
            [
              [
                [
                  9,
                  4
                ],
                [
                  9,
                  1
                ],
                [
                  10,
                  1
                ],
                [
                  10,
                  4
                ],
                [
                  9,
                  4
                ]
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((0 2, 11 3, 11 2, 0 2))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                0,
                2
              ],
              [
                11,
                3
              ],
              [
                11,
                2
              ],
              [
                0,
                2
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((1 1, 1 4, 10 4, 10 1, 1 1))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  1,
                  1
                ],
                [
                  1,
                  4
                ],
                [
                  10,
                  4
                ],
                [
                  10,
                  1
                ],
                [
                  1,
                  1
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOLYGON (((1 2, 1 2.090909090909091, 2 2.1818181818181817, 2 2, 1 2)),((3 2, 3 2.272727272727273, 4 2.3636363636363638, 4 2, 3 2)),((5 2, 5 2.4545454545454546, 6 2.5454545454545454, 6 2, 5 2)),((7 2, 7 2.6363636363636362, 8 2.727272727272727, 8 2, 7 2)),((9 2, 9 2.8181818181818183, 10 2.909090909090909, 10 2, 9 2)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    1,
                    2
                  ],
                  [
                    1,
                    2.090909090909091
                  ],
                  [
                    2,
                    2.1818181818181817
                  ],
                  [
                    2,
                    2
                  ],
                  [
                    1,
                    2
                  ]
                ]
              ],
              [
                [
                  [
                    3,
                    2
                  ],
                  [
                    3,
                    2.272727272727273
                  ],
                  [
                    4,
                    2.3636363636363638
                  ],
                  [
                    4,
                    2
                  ],
                  [
                    3,
                    2
                  ]
                ]
              ],
              [
                [
                  [
                    5,
                    2
                  ],
                  [
                    5,
                    2.4545454545454546
                  ],
                  [
                    6,
                    2.5454545454545454
                  ],
                  [
                    6,
                    2
                  ],
                  [
                    5,
                    2
                  ]
                ]
              ],
              [
                [
                  [
                    7,
                    2
                  ],
                  [
                    7,
                    2.6363636363636362
                  ],
                  [
                    8,
                    2.727272727272727
                  ],
                  [
                    8,
                    2
                  ],
                  [
                    7,
                    2
                  ]
                ]
              ],
              [
                [
                  [
                    9,
                    2
                  ],
                  [
                    9,
                    2.8181818181818183
                  ],
                  [
                    10,
                    2.909090909090909
                  ],
                  [
                    10,
                    2
                  ],
                  [
                    9,
                    2
                  ]
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((1 2.090909090909091, 1 4, 2 4, 2 2.1818181818181817, 3 2.272727272727273, 3 4, 4 4, 4 2.3636363636363638, 5 2.4545454545454546, 5 4, 6 4, 6 2.5454545454545454, 7 2.6363636363636362, 7 4, 8 4, 8 2.727272727272727, 9 2.8181818181818183, 9 4, 10 4, 10 2.909090909090909, 11 3, 11 2, 10 2, 10 1, 9 1, 9 2, 8 2, 8 1, 7 1, 7 2, 6 2, 6 1, 5 1, 5 2, 4 2, 4 1, 3 1, 3 2, 2 2, 2 1, 1 1, 1 2, 0 2, 1 2.090909090909091))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  1,
                  2.090909090909091
                ],
                [
                  1,
                  4
                ],
                [
                  2,
                  4
                ],
                [
                  2,
                  2.1818181818181817
                ],
                [
                  3,
                  2.272727272727273
                ],
                [
                  3,
                  4
                ],
                [
                  4,
                  4
                ],
                [
                  4,
                  2.3636363636363638
                ],
                [
                  5,
                  2.4545454545454546
                ],
                [
                  5,
                  4
                ],
                [
                  6,
                  4
                ],
                [
                  6,
                  2.5454545454545454
                ],
                [
                  7,
                  2.6363636363636362
                ],
                [
                  7,
                  4
                ],
                [
                  8,
                  4
                ],
                [
                  8,
                  2.727272727272727
                ],
                [
                  9,
                  2.8181818181818183
                ],
                [
                  9,
                  4
                ],
                [
                  10,
                  4
                ],
                [
                  10,
                  2.909090909090909
                ],
                [
                  11,
                  3
                ],
                [
                  11,
                  2
                ],
                [
                  10,
                  2
                ],
                [
                  10,
                  1
                ],
                [
                  9,
                  1
                ],
                [
                  9,
                  2
                ],
                [
                  8,
                  2
                ],
                [
                  8,
                  1
                ],
                [
                  7,
                  1
                ],
                [
                  7,
                  2
                ],
                [
                  6,
                  2
                ],
                [
                  6,
                  1
                ],
                [
                  5,
                  1
                ],
                [
                  5,
                  2
                ],
                [
                  4,
                  2
                ],
                [
                  4,
                  1
                ],
                [
                  3,
                  1
                ],
                [
                  3,
                  2
                ],
                [
                  2,
                  2
                ],
                [
                  2,
                  1
                ],
                [
                  1,
                  1
                ],
                [
                  1,
                  2
                ],
                [
                  0,
                  2
                ],
                [
                  1,
                  2.090909090909091
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "MULTIPOLYGON (((1 2.090909090909091, 1 4, 2 4, 2 2.1818181818181817, 1 2.090909090909091)),((2 2, 2 1, 1 1, 1 2, 2 2)),((3 2.272727272727273, 3 4, 4 4, 4 2.3636363636363638, 3 2.272727272727273)),((4 2, 4 1, 3 1, 3 2, 4 2)),((5 2.4545454545454546, 5 4, 6 4, 6 2.5454545454545454, 5 2.4545454545454546)),((6 2, 6 1, 5 1, 5 2, 6 2)),((7 2.6363636363636362, 7 4, 8 4, 8 2.727272727272727, 7 2.6363636363636362)),((8 2, 8 1, 7 1, 7 2, 8 2)),((9 2.8181818181818183, 9 4, 10 4, 10 2.909090909090909, 9 2.8181818181818183)),((10 2, 10 1, 9 1, 9 2, 10 2)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    1,
                    2.090909090909091
                  ],
                  [
                    1,
                    4
                  ],
                  [
                    2,
                    4
                  ],
                  [
                    2,
                    2.1818181818181817
                  ],
                  [
                    1,
                    2.090909090909091
                  ]
                ]
              ],
              [
                [
                  [
                    2,
                    2
                  ],
                  [
                    2,
                    1
                  ],
                  [
                    1,
                    1
                  ],
                  [
                    1,
                    2
                  ],
                  [
                    2,
                    2
                  ]
                ]
              ],
              [
                [
                  [
                    3,
                    2.272727272727273
                  ],
                  [
                    3,
                    4
                  ],
                  [
                    4,
                    4
                  ],
                  [
                    4,
                    2.3636363636363638
                  ],
                  [
                    3,
                    2.272727272727273
                  ]
                ]
              ],
              [
                [
                  [
                    4,
                    2
                  ],
                  [
                    4,
                    1
                  ],
                  [
                    3,
                    1
                  ],
                  [
                    3,
                    2
                  ],
                  [
                    4,
                    2
                  ]
                ]
              ],
              [
                [
                  [
                    5,
                    2.4545454545454546
                  ],
                  [
                    5,
                    4
                  ],
                  [
                    6,
                    4
                  ],
                  [
                    6,
                    2.5454545454545454
                  ],
                  [
                    5,
                    2.4545454545454546
                  ]
                ]
              ],
              [
                [
                  [
                    6,
                    2
                  ],
                  [
                    6,
                    1
                  ],
                  [
                    5,
                    1
                  ],
                  [
                    5,
                    2
                  ],
                  [
                    6,
                    2
                  ]
                ]
              ],
              [
                [
                  [
                    7,
                    2.6363636363636362
                  ],
                  [
                    7,
                    4
                  ],
                  [
                    8,
                    4
                  ],
                  [
                    8,
                    2.727272727272727
                  ],
                  [
                    7,
                    2.6363636363636362
                  ]
                ]
              ],
              [
                [
                  [
                    8,
                    2
                  ],
                  [
                    8,
                    1
                  ],
                  [
                    7,
                    1
                  ],
                  [
                    7,
                    2
                  ],
                  [
                    8,
                    2
                  ]
                ]
              ],
              [
                [
                  [
                    9,
                    2.8181818181818183
                  ],
                  [
                    9,
                    4
                  ],
                  [
                    10,
                    4
                  ],
                  [
                    10,
                    2.909090909090909
                  ],
                  [
                    9,
                    2.8181818181818183
                  ]
                ]
              ],
              [
                [
                  [
                    10,
                    2
                  ],
                  [
                    10,
                    1
                  ],
                  [
                    9,
                    1
                  ],
                  [
                    9,
                    2
                  ],
                  [
                    10,
                    2
                  ]
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((1 2.090909090909091, 1 4, 2 4, 2 2.1818181818181817, 1 2.090909090909091)),((1 2.090909090909091, 1 2, 0 2, 1 2.090909090909091)),((2 2, 2 1, 1 1, 1 2, 2 2)),((2 2, 2 2.1818181818181817, 3 2.272727272727273, 3 2, 2 2)),((3 2.272727272727273, 3 4, 4 4, 4 2.3636363636363638, 3 2.272727272727273)),((4 2, 4 1, 3 1, 3 2, 4 2)),((4 2, 4 2.3636363636363638, 5 2.4545454545454546, 5 2, 4 2)),((5 2.4545454545454546, 5 4, 6 4, 6 2.5454545454545454, 5 2.4545454545454546)),((6 2, 6 1, 5 1, 5 2, 6 2)),((6 2, 6 2.5454545454545454, 7 2.6363636363636362, 7 2, 6 2)),((7 2.6363636363636362, 7 4, 8 4, 8 2.727272727272727, 7 2.6363636363636362)),((8 2, 8 1, 7 1, 7 2, 8 2)),((8 2, 8 2.727272727272727, 9 2.8181818181818183, 9 2, 8 2)),((9 2.8181818181818183, 9 4, 10 4, 10 2.909090909090909, 9 2.8181818181818183)),((10 2, 10 1, 9 1, 9 2, 10 2)),((10 2, 10 2.909090909090909, 11 3, 11 2, 10 2)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    1,
                    2.090909090909091
                  ],
                  [
                    1,
                    4
                  ],
                  [
                    2,
                    4
                  ],
                  [
                    2,
                    2.1818181818181817
                  ],
                  [
                    1,
                    2.090909090909091
                  ]
                ]
              ],
              [
                [
                  [
                    1,
                    2.090909090909091
                  ],
                  [
                    1,
                    2
                  ],
                  [
                    0,
                    2
                  ],
                  [
                    1,
                    2.090909090909091
                  ]
                ]
              ],
              [
                [
                  [
                    2,
                    2
                  ],
                  [
                    2,
                    1
                  ],
                  [
                    1,
                    1
                  ],
                  [
                    1,
                    2
                  ],
                  [
                    2,
                    2
                  ]
                ]
              ],
              [
                [
                  [
                    2,
                    2
                  ],
                  [
                    2,
                    2.1818181818181817
                  ],
                  [
                    3,
                    2.272727272727273
                  ],
                  [
                    3,
                    2
                  ],
                  [
                    2,
                    2
                  ]
                ]
              ],
              [
                [
                  [
                    3,
                    2.272727272727273
                  ],
                  [
                    3,
                    4
                  ],
                  [
                    4,
                    4
                  ],
                  [
                    4,
                    2.3636363636363638
                  ],
                  [
                    3,
                    2.272727272727273
                  ]
                ]
              ],
              [
                [
                  [
                    4,
                    2
                  ],
                  [
                    4,
                    1
                  ],
                  [
                    3,
                    1
                  ],
                  [
                    3,
                    2
                  ],
                  [
                    4,
                    2
                  ]
                ]
              ],
              [
                [
                  [
                    4,
                    2
                  ],
                  [
                    4,
                    2.3636363636363638
                  ],
                  [
                    5,
                    2.4545454545454546
                  ],
                  [
                    5,
                    2
                  ],
                  [
                    4,
                    2
                  ]
                ]
              ],
              [
                [
                  [
                    5,
                    2.4545454545454546
                  ],
                  [
                    5,
                    4
                  ],
                  [
                    6,
                    4
                  ],
                  [
                    6,
                    2.5454545454545454
                  ],
                  [
                    5,
                    2.4545454545454546
                  ]
                ]
              ],
              [
                [
                  [
                    6,
                    2
                  ],
                  [
                    6,
                    1
                  ],
                  [
                    5,
                    1
                  ],
                  [
                    5,
                    2
                  ],
                  [
                    6,
                    2
                  ]
                ]
              ],
              [
                [
                  [
                    6,
                    2
                  ],
                  [
                    6,
                    2.5454545454545454
                  ],
                  [
                    7,
                    2.6363636363636362
                  ],
                  [
                    7,
                    2
                  ],
                  [
                    6,
                    2
                  ]
                ]
              ],
              [
                [
                  [
                    7,
                    2.6363636363636362
                  ],
                  [
                    7,
                    4
                  ],
                  [
                    8,
                    4
                  ],
                  [
                    8,
                    2.727272727272727
                  ],
                  [
                    7,
                    2.6363636363636362
                  ]
                ]
              ],
              [
                [
                  [
                    8,
                    2
                  ],
                  [
                    8,
                    1
                  ],
                  [
                    7,
                    1
                  ],
                  [
                    7,
                    2
                  ],
                  [
                    8,
                    2
                  ]
                ]
              ],
              [
                [
                  [
                    8,
                    2
                  ],
                  [
                    8,
                    2.727272727272727
                  ],
                  [
                    9,
                    2.8181818181818183
                  ],
                  [
                    9,
                    2
                  ],
                  [
                    8,
                    2
                  ]
                ]
              ],
              [
                [
                  [
                    9,
                    2.8181818181818183
                  ],
                  [
                    9,
                    4
                  ],
                  [
                    10,
                    4
                  ],
                  [
                    10,
                    2.909090909090909
                  ],
                  [
                    9,
                    2.8181818181818183
                  ]
                ]
              ],
              [
                [
                  [
                    10,
                    2
                  ],
                  [
                    10,
                    1
                  ],
                  [
                    9,
                    1
                  ],
                  [
                    9,
                    2
                  ],
                  [
                    10,
                    2
                  ]
                ]
              ],
              [
                [
                  [
                    10,
                    2
                  ],
                  [
                    10,
                    2.909090909090909
                  ],
                  [
                    11,
                    3
                  ],
                  [
                    11,
                    2
                  ],
                  [
                    10,
                    2
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAAPrec",
      "category": "function",
      "title": "AA - Polygon with hole with outward sliver, cut by polygon",
      "id": "18-014",
      "a": {
        "wkt": "POLYGON ((20 40, 20 200, 180 200, 180 40, 20 40),(180 120, 120 120, 120 160, 60 120, 120 80, 120 119, 180 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                40
              ],
              [
                20,
                200
              ],
              [
                180,
                200
              ],
              [
                180,
                40
              ],
              [
                20,
                40
              ]
            ],
            [
              [
                180,
                120
              ],
              [
                120,
                120
              ],
              [
                120,
                160
              ],
              [
                60,
                120
              ],
              [
                120,
                80
              ],
              [
                120,
                119
              ],
              [
                180,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((200 160, 160 160, 160 80, 200 80, 200 160))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                200,
                160
              ],
              [
                160,
                160
              ],
              [
                160,
                80
              ],
              [
                200,
                80
              ],
              [
                200,
                160
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((20 40, 20 200, 180 200, 180 40, 20 40))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  20,
                  40
                ],
                [
                  20,
                  200
                ],
                [
                  180,
                  200
                ],
                [
                  180,
                  40
                ],
                [
                  20,
                  40
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOLYGON (((180 160, 180 120, 160 120, 160 160, 180 160)),((180 120, 180 80, 160 80, 160 119.66666666666667, 180 120)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    180,
                    160
                  ],
                  [
                    180,
                    120
                  ],
                  [
                    160,
                    120
                  ],
                  [
                    160,
                    160
                  ],
                  [
                    180,
                    160
                  ]
                ]
              ],
              [
                [
                  [
                    180,
                    120
                  ],
                  [
                    180,
                    80
                  ],
                  [
                    160,
                    80
                  ],
                  [
                    160,
                    119.66666666666667
                  ],
                  [
                    180,
                    120
                  ]
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((20 40, 20 200, 180 200, 180 160, 200 160, 200 80, 180 80, 180 40, 20 40),(160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 119.66666666666667, 160 120))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  20,
                  40
                ],
                [
                  20,
                  200
                ],
                [
                  180,
                  200
                ],
                [
                  180,
                  160
                ],
                [
                  200,
                  160
                ],
                [
                  200,
                  80
                ],
                [
                  180,
                  80
                ],
                [
                  180,
                  40
                ],
                [
                  20,
                  40
                ]
              ],
              [
                [
                  160,
                  120
                ],
                [
                  120,
                  120
                ],
                [
                  120,
                  160
                ],
                [
                  60,
                  120
                ],
                [
                  120,
                  80
                ],
                [
                  120,
                  119
                ],
                [
                  160,
                  119.66666666666667
                ],
                [
                  160,
                  120
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((20 40, 20 200, 180 200, 180 160, 160 160, 160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 119.66666666666667, 160 80, 180 80, 180 40, 20 40))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  20,
                  40
                ],
                [
                  20,
                  200
                ],
                [
                  180,
                  200
                ],
                [
                  180,
                  160
                ],
                [
                  160,
                  160
                ],
                [
                  160,
                  120
                ],
                [
                  120,
                  120
                ],
                [
                  120,
                  160
                ],
                [
                  60,
                  120
                ],
                [
                  120,
                  80
                ],
                [
                  120,
                  119
                ],
                [
                  160,
                  119.66666666666667
                ],
                [
                  160,
                  80
                ],
                [
                  180,
                  80
                ],
                [
                  180,
                  40
                ],
                [
                  20,
                  40
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((20 40, 20 200, 180 200, 180 160, 160 160, 160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 119.66666666666667, 160 80, 180 80, 180 40, 20 40)),((180 120, 180 160, 200 160, 200 80, 180 80, 180 120)),((160 120, 180 120, 160 119.66666666666667, 160 120)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    20,
                    40
                  ],
                  [
                    20,
                    200
                  ],
                  [
                    180,
                    200
                  ],
                  [
                    180,
                    160
                  ],
                  [
                    160,
                    160
                  ],
                  [
                    160,
                    120
                  ],
                  [
                    120,
                    120
                  ],
                  [
                    120,
                    160
                  ],
                  [
                    60,
                    120
                  ],
                  [
                    120,
                    80
                  ],
                  [
                    120,
                    119
                  ],
                  [
                    160,
                    119.66666666666667
                  ],
                  [
                    160,
                    80
                  ],
                  [
                    180,
                    80
                  ],
                  [
                    180,
                    40
                  ],
                  [
                    20,
                    40
                  ]
                ]
              ],
              [
                [
                  [
                    180,
                    120
                  ],
                  [
                    180,
                    160
                  ],
                  [
                    200,
                    160
                  ],
                  [
                    200,
                    80
                  ],
                  [
                    180,
                    80
                  ],
                  [
                    180,
                    120
                  ]
                ]
              ],
              [
                [
                  [
                    160,
                    120
                  ],
                  [
                    180,
                    120
                  ],
                  [
                    160,
                    119.66666666666667
                  ],
                  [
                    160,
                    120
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAAPrec",
      "category": "function",
      "title": "AA - Polygon with hole with outward sliver, cut by line",
      "id": "18-015",
      "a": {
        "wkt": "POLYGON ((20 40, 20 200, 180 200, 180 40, 20 40),(180 120, 120 120, 120 160, 60 120, 120 80, 120 119, 180 120))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                40
              ],
              [
                20,
                200
              ],
              [
                180,
                200
              ],
              [
                180,
                40
              ],
              [
                20,
                40
              ]
            ],
            [
              [
                180,
                120
              ],
              [
                120,
                120
              ],
              [
                120,
                160
              ],
              [
                60,
                120
              ],
              [
                120,
                80
              ],
              [
                120,
                119
              ],
              [
                180,
                120
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "LINESTRING (160 140, 160 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              160,
              140
            ],
            [
              160,
              100
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": true,
        "within": false,
        "contains": false,
        "overlaps": false,
        "de9im": "1020F11F2"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((20 40, 20 200, 180 200, 180 40, 20 40))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  20,
                  40
                ],
                [
                  20,
                  200
                ],
                [
                  180,
                  200
                ],
                [
                  180,
                  40
                ],
                [
                  20,
                  40
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTILINESTRING ((160 140, 160 120),(160 119.66666666666667, 160 100))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  160,
                  140
                ],
                [
                  160,
                  120
                ]
              ],
              [
                [
                  160,
                  119.66666666666667
                ],
                [
                  160,
                  100
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "GEOMETRYCOLLECTION (LINESTRING (160 120, 160 119.66666666666667), POLYGON ((20 40, 20 200, 180 200, 180 120, 180 40, 20 40),(180 120, 160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 119.66666666666667, 180 120)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    160,
                    120
                  ],
                  [
                    160,
                    119.66666666666667
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      20,
                      40
                    ],
                    [
                      20,
                      200
                    ],
                    [
                      180,
                      200
                    ],
                    [
                      180,
                      120
                    ],
                    [
                      180,
                      40
                    ],
                    [
                      20,
                      40
                    ]
                  ],
                  [
                    [
                      180,
                      120
                    ],
                    [
                      160,
                      120
                    ],
                    [
                      120,
                      120
                    ],
                    [
                      120,
                      160
                    ],
                    [
                      60,
                      120
                    ],
                    [
                      120,
                      80
                    ],
                    [
                      120,
                      119
                    ],
                    [
                      160,
                      119.66666666666667
                    ],
                    [
                      180,
                      120
                    ]
                  ]
                ]
              }
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((20 40, 20 200, 180 200, 180 120, 180 40, 20 40),(180 120, 160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 119.66666666666667, 180 120))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  20,
                  40
                ],
                [
                  20,
                  200
                ],
                [
                  180,
                  200
                ],
                [
                  180,
                  120
                ],
                [
                  180,
                  40
                ],
                [
                  20,
                  40
                ]
              ],
              [
                [
                  180,
                  120
                ],
                [
                  160,
                  120
                ],
                [
                  120,
                  120
                ],
                [
                  120,
                  160
                ],
                [
                  60,
                  120
                ],
                [
                  120,
                  80
                ],
                [
                  120,
                  119
                ],
                [
                  160,
                  119.66666666666667
                ],
                [
                  180,
                  120
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "GEOMETRYCOLLECTION (LINESTRING (160 120, 160 119.66666666666667), POLYGON ((20 40, 20 200, 180 200, 180 120, 180 40, 20 40),(180 120, 160 120, 120 120, 120 160, 60 120, 120 80, 120 119, 160 119.66666666666667, 180 120)))",
          "geometry": {
            "type": "GeometryCollection",
            "geometries": [
              {
                "type": "LineString",
                "coordinates": [
                  [
                    160,
                    120
                  ],
                  [
                    160,
                    119.66666666666667
                  ]
                ]
              },
              {
                "type": "Polygon",
                "coordinates": [
                  [
                    [
                      20,
                      40
                    ],
                    [
                      20,
                      200
                    ],
                    [
                      180,
                      200
                    ],
                    [
                      180,
                      120
                    ],
                    [
                      180,
                      40
                    ],
                    [
                      20,
                      40
                    ]
                  ],
                  [
                    [
                      180,
                      120
                    ],
                    [
                      160,
                      120
                    ],
                    [
                      120,
                      120
                    ],
                    [
                      120,
                      160
                    ],
                    [
                      60,
                      120
                    ],
                    [
                      120,
                      80
                    ],
                    [
                      120,
                      119
                    ],
                    [
                      160,
                      119.66666666666667
                    ],
                    [
                      180,
                      120
                    ]
                  ]
                ]
              }
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAAPrec",
      "category": "function",
      "title": "AA - Polygon with inward sliver touching hole, cut by polygon",
      "id": "18-016",
      "a": {
        "wkt": "POLYGON ((20 40, 20 200, 180 200, 180 120, 140 120, 180 119, 180 40, 20 40),(140 160, 80 120, 140 80, 140 160))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                20,
                40
              ],
              [
                20,
                200
              ],
              [
                180,
                200
              ],
              [
                180,
                120
              ],
              [
                140,
                120
              ],
              [
                180,
                119
              ],
              [
                180,
                40
              ],
              [
                20,
                40
              ]
            ],
            [
              [
                140,
                160
              ],
              [
                80,
                120
              ],
              [
                140,
                80
              ],
              [
                140,
                160
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((200 160, 150 160, 150 80, 200 80, 200 160))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                200,
                160
              ],
              [
                150,
                160
              ],
              [
                150,
                80
              ],
              [
                200,
                80
              ],
              [
                200,
                160
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((20 40, 20 200, 180 200, 180 40, 20 40))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  20,
                  40
                ],
                [
                  20,
                  200
                ],
                [
                  180,
                  200
                ],
                [
                  180,
                  40
                ],
                [
                  20,
                  40
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "MULTIPOLYGON (((180 160, 180 120, 150 120, 150 160, 180 160)),((150 119.75, 180 119, 180 80, 150 80, 150 119.75)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    180,
                    160
                  ],
                  [
                    180,
                    120
                  ],
                  [
                    150,
                    120
                  ],
                  [
                    150,
                    160
                  ],
                  [
                    180,
                    160
                  ]
                ]
              ],
              [
                [
                  [
                    150,
                    119.75
                  ],
                  [
                    180,
                    119
                  ],
                  [
                    180,
                    80
                  ],
                  [
                    150,
                    80
                  ],
                  [
                    150,
                    119.75
                  ]
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((20 40, 20 200, 180 200, 180 160, 200 160, 200 80, 180 80, 180 40, 20 40),(150 120, 140 120, 150 119.75, 150 120),(140 120, 140 160, 80 120, 140 80, 140 120))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  20,
                  40
                ],
                [
                  20,
                  200
                ],
                [
                  180,
                  200
                ],
                [
                  180,
                  160
                ],
                [
                  200,
                  160
                ],
                [
                  200,
                  80
                ],
                [
                  180,
                  80
                ],
                [
                  180,
                  40
                ],
                [
                  20,
                  40
                ]
              ],
              [
                [
                  150,
                  120
                ],
                [
                  140,
                  120
                ],
                [
                  150,
                  119.75
                ],
                [
                  150,
                  120
                ]
              ],
              [
                [
                  140,
                  120
                ],
                [
                  140,
                  160
                ],
                [
                  80,
                  120
                ],
                [
                  140,
                  80
                ],
                [
                  140,
                  120
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "POLYGON ((20 40, 20 200, 180 200, 180 160, 150 160, 150 120, 140 120, 150 119.75, 150 80, 180 80, 180 40, 20 40),(140 120, 140 160, 80 120, 140 80, 140 120))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  20,
                  40
                ],
                [
                  20,
                  200
                ],
                [
                  180,
                  200
                ],
                [
                  180,
                  160
                ],
                [
                  150,
                  160
                ],
                [
                  150,
                  120
                ],
                [
                  140,
                  120
                ],
                [
                  150,
                  119.75
                ],
                [
                  150,
                  80
                ],
                [
                  180,
                  80
                ],
                [
                  180,
                  40
                ],
                [
                  20,
                  40
                ]
              ],
              [
                [
                  140,
                  120
                ],
                [
                  140,
                  160
                ],
                [
                  80,
                  120
                ],
                [
                  140,
                  80
                ],
                [
                  140,
                  120
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((20 40, 20 200, 180 200, 180 160, 150 160, 150 120, 140 120, 150 119.75, 150 80, 180 80, 180 40, 20 40),(140 120, 140 160, 80 120, 140 80, 140 120)),((150 120, 180 120, 180 160, 200 160, 200 80, 180 80, 180 119, 150 119.75, 150 120)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    20,
                    40
                  ],
                  [
                    20,
                    200
                  ],
                  [
                    180,
                    200
                  ],
                  [
                    180,
                    160
                  ],
                  [
                    150,
                    160
                  ],
                  [
                    150,
                    120
                  ],
                  [
                    140,
                    120
                  ],
                  [
                    150,
                    119.75
                  ],
                  [
                    150,
                    80
                  ],
                  [
                    180,
                    80
                  ],
                  [
                    180,
                    40
                  ],
                  [
                    20,
                    40
                  ]
                ],
                [
                  [
                    140,
                    120
                  ],
                  [
                    140,
                    160
                  ],
                  [
                    80,
                    120
                  ],
                  [
                    140,
                    80
                  ],
                  [
                    140,
                    120
                  ]
                ]
              ],
              [
                [
                  [
                    150,
                    120
                  ],
                  [
                    180,
                    120
                  ],
                  [
                    180,
                    160
                  ],
                  [
                    200,
                    160
                  ],
                  [
                    200,
                    80
                  ],
                  [
                    180,
                    80
                  ],
                  [
                    180,
                    119
                  ],
                  [
                    150,
                    119.75
                  ],
                  [
                    150,
                    120
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestFunctionAAPrec",
      "category": "function",
      "title": "AA - intersecting slivers, dimensional collapse",
      "id": "18-017",
      "a": {
        "wkt": "POLYGON ((83 33, 62 402, 68 402, 83 33))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                83,
                33
              ],
              [
                62,
                402
              ],
              [
                68,
                402
              ],
              [
                83,
                33
              ]
            ]
          ]
        }
      },
      "b": {
        "wkt": "POLYGON ((78 39, 574 76, 576 60, 78 39))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                78,
                39
              ],
              [
                574,
                76
              ],
              [
                576,
                60
              ],
              [
                78,
                39
              ]
            ]
          ]
        }
      },
      "relationship": {
        "equals": false,
        "disjoint": false,
        "intersects": true,
        "touches": false,
        "crosses": false,
        "within": false,
        "contains": false,
        "overlaps": true,
        "de9im": "212101212"
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((83 33, 62 402, 68 402, 83 33))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  83,
                  33
                ],
                [
                  62,
                  402
                ],
                [
                  68,
                  402
                ],
                [
                  83,
                  33
                ]
              ]
            ]
          }
        },
        "intersection": {
          "wkt": "POLYGON ((82.64738359310108 39.195974006937995, 82.63884309660992 39.34604273099711, 82.7417188240485 39.35371692840685, 82.74795873465995 39.200215127365176, 82.64738359310108 39.195974006937995))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  82.64738359310108,
                  39.195974006937995
                ],
                [
                  82.63884309660992,
                  39.34604273099711
                ],
                [
                  82.7417188240485,
                  39.35371692840685
                ],
                [
                  82.74795873465995,
                  39.200215127365176
                ],
                [
                  82.64738359310108,
                  39.195974006937995
                ]
              ]
            ]
          }
        },
        "union": {
          "wkt": "POLYGON ((83 33, 82.64738359310108 39.195974006937995, 78 39, 82.63884309660992 39.34604273099711, 62 402, 68 402, 82.7417188240485 39.35371692840685, 574 76, 576 60, 82.74795873465995 39.200215127365176, 83 33))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  83,
                  33
                ],
                [
                  82.64738359310108,
                  39.195974006937995
                ],
                [
                  78,
                  39
                ],
                [
                  82.63884309660992,
                  39.34604273099711
                ],
                [
                  62,
                  402
                ],
                [
                  68,
                  402
                ],
                [
                  82.7417188240485,
                  39.35371692840685
                ],
                [
                  574,
                  76
                ],
                [
                  576,
                  60
                ],
                [
                  82.74795873465995,
                  39.200215127365176
                ],
                [
                  83,
                  33
                ]
              ]
            ]
          }
        },
        "difference": {
          "wkt": "MULTIPOLYGON (((83 33, 82.64738359310108 39.195974006937995, 82.74795873465995 39.200215127365176, 83 33)),((82.63884309660992 39.34604273099711, 62 402, 68 402, 82.7417188240485 39.35371692840685, 82.63884309660992 39.34604273099711)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    83,
                    33
                  ],
                  [
                    82.64738359310108,
                    39.195974006937995
                  ],
                  [
                    82.74795873465995,
                    39.200215127365176
                  ],
                  [
                    83,
                    33
                  ]
                ]
              ],
              [
                [
                  [
                    82.63884309660992,
                    39.34604273099711
                  ],
                  [
                    62,
                    402
                  ],
                  [
                    68,
                    402
                  ],
                  [
                    82.7417188240485,
                    39.35371692840685
                  ],
                  [
                    82.63884309660992,
                    39.34604273099711
                  ]
                ]
              ]
            ]
          }
        },
        "symDifference": {
          "wkt": "MULTIPOLYGON (((83 33, 82.64738359310108 39.195974006937995, 82.74795873465995 39.200215127365176, 83 33)),((82.63884309660992 39.34604273099711, 82.64738359310108 39.195974006937995, 78 39, 82.63884309660992 39.34604273099711)),((82.63884309660992 39.34604273099711, 62 402, 68 402, 82.7417188240485 39.35371692840685, 82.63884309660992 39.34604273099711)),((82.74795873465995 39.200215127365176, 82.7417188240485 39.35371692840685, 574 76, 576 60, 82.74795873465995 39.200215127365176)))",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    83,
                    33
                  ],
                  [
                    82.64738359310108,
                    39.195974006937995
                  ],
                  [
                    82.74795873465995,
                    39.200215127365176
                  ],
                  [
                    83,
                    33
                  ]
                ]
              ],
              [
                [
                  [
                    82.63884309660992,
                    39.34604273099711
                  ],
                  [
                    82.64738359310108,
                    39.195974006937995
                  ],
                  [
                    78,
                    39
                  ],
                  [
                    82.63884309660992,
                    39.34604273099711
                  ]
                ]
              ],
              [
                [
                  [
                    82.63884309660992,
                    39.34604273099711
                  ],
                  [
                    62,
                    402
                  ],
                  [
                    68,
                    402
                  ],
                  [
                    82.7417188240485,
                    39.35371692840685
                  ],
                  [
                    82.63884309660992,
                    39.34604273099711
                  ]
                ]
              ],
              [
                [
                  [
                    82.74795873465995,
                    39.200215127365176
                  ],
                  [
                    82.7417188240485,
                    39.35371692840685
                  ],
                  [
                    574,
                    76
                  ],
                  [
                    576,
                    60
                  ],
                  [
                    82.74795873465995,
                    39.200215127365176
                  ]
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestBoundary",
      "category": "unary",
      "title": "P - point",
      "id": "19-001",
      "a": {
        "wkt": "POINT (10 10)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            10,
            10
          ]
        }
      },
      "functions": {
        "getBoundary": {
          "wkt": "GEOMETRYCOLLECTION EMPTY",
          "geometry": null
        }
      }
    },
    {
      "group": "TestBoundary",
      "category": "unary",
      "title": "mP - MultiPoint",
      "id": "19-002",
      "a": {
        "wkt": "MULTIPOINT (10 10, 20 20)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              10,
              10
            ],
            [
              20,
              20
            ]
          ]
        }
      },
      "functions": {
        "getBoundary": {
          "wkt": "GEOMETRYCOLLECTION EMPTY",
          "geometry": null
        }
      }
    },
    {
      "group": "TestBoundary",
      "category": "unary",
      "title": "L - Line",
      "id": "19-003",
      "a": {
        "wkt": "LINESTRING (10 10, 20 20)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              10,
              10
            ],
            [
              20,
              20
            ]
          ]
        }
      },
      "functions": {
        "getBoundary": {
          "wkt": "MULTIPOINT (10 10, 20 20)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                10,
                10
              ],
              [
                20,
                20
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestBoundary",
      "category": "unary",
      "title": "L - closed",
      "id": "19-004",
      "a": {
        "wkt": "LINESTRING (10 10, 20 20, 20 10, 10 10)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              10,
              10
            ],
            [
              20,
              20
            ],
            [
              20,
              10
            ],
            [
              10,
              10
            ]
          ]
        }
      },
      "functions": {
        "getBoundary": {
          "wkt": "MULTIPOINT EMPTY",
          "geometry": null
        }
      }
    },
    {
      "group": "TestBoundary",
      "category": "unary",
      "title": "L - self-intersecting with boundary",
      "id": "19-005",
      "a": {
        "wkt": "LINESTRING (40 40, 100 100, 180 100, 180 180, 100 180, 100 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              40,
              40
            ],
            [
              100,
              100
            ],
            [
              180,
              100
            ],
            [
              180,
              180
            ],
            [
              100,
              180
            ],
            [
              100,
              100
            ]
          ]
        }
      },
      "functions": {
        "getBoundary": {
          "wkt": "MULTIPOINT (40 40, 100 100)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                40,
                40
              ],
              [
                100,
                100
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestBoundary",
      "category": "unary",
      "title": "mL - 2 lines with common endpoint",
      "id": "19-006",
      "a": {
        "wkt": "MULTILINESTRING ((10 10, 20 20),(20 20, 30 30))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                10,
                10
              ],
              [
                20,
                20
              ]
            ],
            [
              [
                20,
                20
              ],
              [
                30,
                30
              ]
            ]
          ]
        }
      },
      "functions": {
        "getBoundary": {
          "wkt": "MULTIPOINT (10 10, 30 30)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                10,
                10
              ],
              [
                30,
                30
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestBoundary",
      "category": "unary",
      "title": "mL - 3 lines with common endpoint",
      "id": "19-007",
      "a": {
        "wkt": "MULTILINESTRING ((10 10, 20 20),(20 20, 30 20),(20 20, 30 30))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                10,
                10
              ],
              [
                20,
                20
              ]
            ],
            [
              [
                20,
                20
              ],
              [
                30,
                20
              ]
            ],
            [
              [
                20,
                20
              ],
              [
                30,
                30
              ]
            ]
          ]
        }
      },
      "functions": {
        "getBoundary": {
          "wkt": "MULTIPOINT (10 10, 20 20, 30 20, 30 30)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                10,
                10
              ],
              [
                20,
                20
              ],
              [
                30,
                20
              ],
              [
                30,
                30
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestBoundary",
      "category": "unary",
      "title": "mL - 4 lines with common endpoint",
      "id": "19-008",
      "a": {
        "wkt": "MULTILINESTRING ((10 10, 20 20),(20 20, 30 20),(20 20, 30 30),(20 20, 30 40))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                10,
                10
              ],
              [
                20,
                20
              ]
            ],
            [
              [
                20,
                20
              ],
              [
                30,
                20
              ]
            ],
            [
              [
                20,
                20
              ],
              [
                30,
                30
              ]
            ],
            [
              [
                20,
                20
              ],
              [
                30,
                40
              ]
            ]
          ]
        }
      },
      "functions": {
        "getBoundary": {
          "wkt": "MULTIPOINT (10 10, 30 20, 30 30, 30 40)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                10,
                10
              ],
              [
                30,
                20
              ],
              [
                30,
                30
              ],
              [
                30,
                40
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestBoundary",
      "category": "unary",
      "title": "mL - 2 lines, one closed, with common endpoint",
      "id": "19-009",
      "a": {
        "wkt": "MULTILINESTRING ((10 10, 20 20),(20 20, 20 30, 30 30, 30 20, 20 20))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                10,
                10
              ],
              [
                20,
                20
              ]
            ],
            [
              [
                20,
                20
              ],
              [
                20,
                30
              ],
              [
                30,
                30
              ],
              [
                30,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "functions": {
        "getBoundary": {
          "wkt": "MULTIPOINT (10 10, 20 20)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                10,
                10
              ],
              [
                20,
                20
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestBoundary",
      "category": "unary",
      "title": "L - 1 line, self-intersecting, topologically equal to prev case",
      "id": "19-010",
      "a": {
        "wkt": "MULTILINESTRING ((10 10, 20 20, 20 30, 30 30, 30 20, 20 20))",
        "geometry": {
          "type": "MultiLineString",
          "coordinates": [
            [
              [
                10,
                10
              ],
              [
                20,
                20
              ],
              [
                20,
                30
              ],
              [
                30,
                30
              ],
              [
                30,
                20
              ],
              [
                20,
                20
              ]
            ]
          ]
        }
      },
      "functions": {
        "getBoundary": {
          "wkt": "MULTIPOINT (10 10, 20 20)",
          "geometry": {
            "type": "MultiPoint",
            "coordinates": [
              [
                10,
                10
              ],
              [
                20,
                20
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestBoundary",
      "category": "unary",
      "title": "A - polygon with no holes",
      "id": "19-011",
      "a": {
        "wkt": "POLYGON ((40 60, 420 60, 420 320, 40 320, 40 60))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                40,
                60
              ],
              [
                420,
                60
              ],
              [
                420,
                320
              ],
              [
                40,
                320
              ],
              [
                40,
                60
              ]
            ]
          ]
        }
      },
      "functions": {
        "getBoundary": {
          "wkt": "MULTILINESTRING ((40 60, 420 60, 420 320, 40 320, 40 60))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  40,
                  60
                ],
                [
                  420,
                  60
                ],
                [
                  420,
                  320
                ],
                [
                  40,
                  320
                ],
                [
                  40,
                  60
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestBoundary",
      "category": "unary",
      "title": "A - polygon with 1 hole",
      "id": "19-012",
      "a": {
        "wkt": "POLYGON ((40 60, 420 60, 420 320, 40 320, 40 60),(200 140, 160 220, 260 200, 200 140))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                40,
                60
              ],
              [
                420,
                60
              ],
              [
                420,
                320
              ],
              [
                40,
                320
              ],
              [
                40,
                60
              ]
            ],
            [
              [
                200,
                140
              ],
              [
                160,
                220
              ],
              [
                260,
                200
              ],
              [
                200,
                140
              ]
            ]
          ]
        }
      },
      "functions": {
        "getBoundary": {
          "wkt": "MULTILINESTRING ((40 60, 420 60, 420 320, 40 320, 40 60),(200 140, 160 220, 260 200, 200 140))",
          "geometry": {
            "type": "MultiLineString",
            "coordinates": [
              [
                [
                  40,
                  60
                ],
                [
                  420,
                  60
                ],
                [
                  420,
                  320
                ],
                [
                  40,
                  320
                ],
                [
                  40,
                  60
                ]
              ],
              [
                [
                  200,
                  140
                ],
                [
                  160,
                  220
                ],
                [
                  260,
                  200
                ],
                [
                  200,
                  140
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestConvexHull",
      "category": "unary",
      "title": "Several points collinear and overlapping",
      "id": "20-001",
      "a": {
        "wkt": "MULTIPOINT (130 240, 130 240, 130 240, 570 240, 570 240, 570 240, 650 240)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              130,
              240
            ],
            [
              130,
              240
            ],
            [
              130,
              240
            ],
            [
              570,
              240
            ],
            [
              570,
              240
            ],
            [
              570,
              240
            ],
            [
              650,
              240
            ]
          ]
        }
      },
      "functions": {
        "convexHull": {
          "wkt": "LINESTRING (130 240, 650 240)",
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                130,
                240
              ],
              [
                650,
                240
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestConvexHull",
      "category": "unary",
      "title": "Convex hull",
      "id": "20-002",
      "a": {
        "wkt": "POLYGON ((40 60, 420 60, 420 320, 40 320, 40 60),(200 140, 160 220, 260 200, 200 140))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                40,
                60
              ],
              [
                420,
                60
              ],
              [
                420,
                320
              ],
              [
                40,
                320
              ],
              [
                40,
                60
              ]
            ],
            [
              [
                200,
                140
              ],
              [
                160,
                220
              ],
              [
                260,
                200
              ],
              [
                200,
                140
              ]
            ]
          ]
        }
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((40 60, 40 320, 420 320, 420 60, 40 60))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  40,
                  60
                ],
                [
                  40,
                  320
                ],
                [
                  420,
                  320
                ],
                [
                  420,
                  60
                ],
                [
                  40,
                  60
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestConvexHull",
      "category": "unary",
      "title": "Convex hull",
      "id": "20-003",
      "a": {
        "wkt": "POLYGON ((10 10, 100 10, 100 100, 10 100, 10 10))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                10,
                10
              ],
              [
                100,
                10
              ],
              [
                100,
                100
              ],
              [
                10,
                100
              ],
              [
                10,
                10
              ]
            ]
          ]
        }
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((10 10, 10 100, 100 100, 100 10, 10 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  10,
                  10
                ],
                [
                  10,
                  100
                ],
                [
                  100,
                  100
                ],
                [
                  100,
                  10
                ],
                [
                  10,
                  10
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestConvexHull",
      "category": "unary",
      "title": "Point",
      "id": "20-004",
      "a": {
        "wkt": "POINT (20 20)",
        "geometry": {
          "type": "Point",
          "coordinates": [
            20,
            20
          ]
        }
      },
      "functions": {
        "convexHull": {
          "wkt": "POINT (20 20)",
          "geometry": {
            "type": "Point",
            "coordinates": [
              20,
              20
            ]
          }
        }
      }
    },
    {
      "group": "TestConvexHull",
      "category": "unary",
      "title": "Horizontal Line",
      "id": "20-005",
      "a": {
        "wkt": "LINESTRING (30 220, 240 220, 240 220)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              30,
              220
            ],
            [
              240,
              220
            ],
            [
              240,
              220
            ]
          ]
        }
      },
      "functions": {
        "convexHull": {
          "wkt": "LINESTRING (30 220, 240 220)",
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                30,
                220
              ],
              [
                240,
                220
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestConvexHull",
      "category": "unary",
      "title": "Vertical Line",
      "id": "20-006",
      "a": {
        "wkt": "LINESTRING (110 290, 110 100, 110 100)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              110,
              290
            ],
            [
              110,
              100
            ],
            [
              110,
              100
            ]
          ]
        }
      },
      "functions": {
        "convexHull": {
          "wkt": "LINESTRING (110 290, 110 100)",
          "geometry": {
            "type": "LineString",
            "coordinates": [
              [
                110,
                290
              ],
              [
                110,
                100
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestConvexHull",
      "category": "unary",
      "title": "Spiral",
      "id": "20-007",
      "a": {
        "wkt": "LINESTRING (120 230, 120 200, 150 180, 180 220, 160 260, 90 250, 80 190, 140 110, 230 150, 240 230, 180 320, 60 310, 40 160, 140 50, 280 140)",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              120,
              230
            ],
            [
              120,
              200
            ],
            [
              150,
              180
            ],
            [
              180,
              220
            ],
            [
              160,
              260
            ],
            [
              90,
              250
            ],
            [
              80,
              190
            ],
            [
              140,
              110
            ],
            [
              230,
              150
            ],
            [
              240,
              230
            ],
            [
              180,
              320
            ],
            [
              60,
              310
            ],
            [
              40,
              160
            ],
            [
              140,
              50
            ],
            [
              280,
              140
            ]
          ]
        }
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((140 50, 40 160, 60 310, 180 320, 240 230, 280 140, 140 50))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  140,
                  50
                ],
                [
                  40,
                  160
                ],
                [
                  60,
                  310
                ],
                [
                  180,
                  320
                ],
                [
                  240,
                  230
                ],
                [
                  280,
                  140
                ],
                [
                  140,
                  50
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestConvexHull",
      "category": "unary",
      "title": "Starlike Polygon",
      "id": "20-008",
      "a": {
        "wkt": "POLYGON ((200 360, 230 210, 100 190, 270 150, 360 10, 320 200, 490 230, 280 240, 200 360),(220 300, 250 200, 150 190, 290 150, 330 70, 310 210, 390 230, 280 230, 220 300))",
        "geometry": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                200,
                360
              ],
              [
                230,
                210
              ],
              [
                100,
                190
              ],
              [
                270,
                150
              ],
              [
                360,
                10
              ],
              [
                320,
                200
              ],
              [
                490,
                230
              ],
              [
                280,
                240
              ],
              [
                200,
                360
              ]
            ],
            [
              [
                220,
                300
              ],
              [
                250,
                200
              ],
              [
                150,
                190
              ],
              [
                290,
                150
              ],
              [
                330,
                70
              ],
              [
                310,
                210
              ],
              [
                390,
                230
              ],
              [
                280,
                230
              ],
              [
                220,
                300
              ]
            ]
          ]
        }
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((360 10, 100 190, 200 360, 490 230, 360 10))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  360,
                  10
                ],
                [
                  100,
                  190
                ],
                [
                  200,
                  360
                ],
                [
                  490,
                  230
                ],
                [
                  360,
                  10
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestConvexHull",
      "category": "unary",
      "title": "Most of the points in one area",
      "id": "20-009",
      "a": {
        "wkt": "MULTIPOINT (70 340, 70 50, 430 50, 420 340, 340 120, 390 110, 390 70, 350 100, 350 50, 370 90, 320 80, 360 120, 350 80, 390 90, 420 80, 410 60, 410 100, 370 100, 380 60, 370 80, 380 100, 360 80, 370 80, 380 70, 390 80, 390 70, 410 70, 400 60, 410 60, 410 60, 410 60, 370 70, 410 50, 410 50, 410 50, 410 50, 410 50, 410 50, 410 50)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              70,
              340
            ],
            [
              70,
              50
            ],
            [
              430,
              50
            ],
            [
              420,
              340
            ],
            [
              340,
              120
            ],
            [
              390,
              110
            ],
            [
              390,
              70
            ],
            [
              350,
              100
            ],
            [
              350,
              50
            ],
            [
              370,
              90
            ],
            [
              320,
              80
            ],
            [
              360,
              120
            ],
            [
              350,
              80
            ],
            [
              390,
              90
            ],
            [
              420,
              80
            ],
            [
              410,
              60
            ],
            [
              410,
              100
            ],
            [
              370,
              100
            ],
            [
              380,
              60
            ],
            [
              370,
              80
            ],
            [
              380,
              100
            ],
            [
              360,
              80
            ],
            [
              370,
              80
            ],
            [
              380,
              70
            ],
            [
              390,
              80
            ],
            [
              390,
              70
            ],
            [
              410,
              70
            ],
            [
              400,
              60
            ],
            [
              410,
              60
            ],
            [
              410,
              60
            ],
            [
              410,
              60
            ],
            [
              370,
              70
            ],
            [
              410,
              50
            ],
            [
              410,
              50
            ],
            [
              410,
              50
            ],
            [
              410,
              50
            ],
            [
              410,
              50
            ],
            [
              410,
              50
            ],
            [
              410,
              50
            ]
          ]
        }
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((70 50, 70 340, 420 340, 430 50, 70 50))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  70,
                  50
                ],
                [
                  70,
                  340
                ],
                [
                  420,
                  340
                ],
                [
                  430,
                  50
                ],
                [
                  70,
                  50
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestConvexHull",
      "category": "unary",
      "title": "Multipoint",
      "id": "20-010",
      "a": {
        "wkt": "MULTIPOINT (140 350, 510 140, 110 140, 250 290, 250 50, 300 370, 450 310, 440 160, 290 280, 220 160, 100 260, 320 230, 200 280, 360 130, 330 210, 380 80, 220 210, 380 310, 260 150, 260 110, 170 130)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              140,
              350
            ],
            [
              510,
              140
            ],
            [
              110,
              140
            ],
            [
              250,
              290
            ],
            [
              250,
              50
            ],
            [
              300,
              370
            ],
            [
              450,
              310
            ],
            [
              440,
              160
            ],
            [
              290,
              280
            ],
            [
              220,
              160
            ],
            [
              100,
              260
            ],
            [
              320,
              230
            ],
            [
              200,
              280
            ],
            [
              360,
              130
            ],
            [
              330,
              210
            ],
            [
              380,
              80
            ],
            [
              220,
              210
            ],
            [
              380,
              310
            ],
            [
              260,
              150
            ],
            [
              260,
              110
            ],
            [
              170,
              130
            ]
          ]
        }
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((250 50, 110 140, 100 260, 140 350, 300 370, 450 310, 510 140, 380 80, 250 50))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  250,
                  50
                ],
                [
                  110,
                  140
                ],
                [
                  100,
                  260
                ],
                [
                  140,
                  350
                ],
                [
                  300,
                  370
                ],
                [
                  450,
                  310
                ],
                [
                  510,
                  140
                ],
                [
                  380,
                  80
                ],
                [
                  250,
                  50
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestConvexHull",
      "category": "unary",
      "title": "GeometryCollection",
      "id": "20-011",
      "a": {
        "wkt": "GEOMETRYCOLLECTION (POINT (110 300), POINT (100 110), POINT (130 210), POINT (150 210), POINT (150 180), POINT (130 170), POINT (140 190), POINT (130 200), LINESTRING (240 50, 210 120, 270 80, 250 140, 330 70, 300 160, 340 130, 340 130), POLYGON ((210 340, 220 260, 150 270, 230 220, 230 140, 270 210, 360 240, 260 250, 260 280, 240 270, 210 340),(230 270, 230 250, 200 250, 240 220, 240 190, 260 220, 290 230, 250 230, 230 270)))",
        "geometry": {
          "type": "GeometryCollection",
          "geometries": [
            {
              "type": "Point",
              "coordinates": [
                110,
                300
              ]
            },
            {
              "type": "Point",
              "coordinates": [
                100,
                110
              ]
            },
            {
              "type": "Point",
              "coordinates": [
                130,
                210
              ]
            },
            {
              "type": "Point",
              "coordinates": [
                150,
                210
              ]
            },
            {
              "type": "Point",
              "coordinates": [
                150,
                180
              ]
            },
            {
              "type": "Point",
              "coordinates": [
                130,
                170
              ]
            },
            {
              "type": "Point",
              "coordinates": [
                140,
                190
              ]
            },
            {
              "type": "Point",
              "coordinates": [
                130,
                200
              ]
            },
            {
              "type": "LineString",
              "coordinates": [
                [
                  240,
                  50
                ],
                [
                  210,
                  120
                ],
                [
                  270,
                  80
                ],
                [
                  250,
                  140
                ],
                [
                  330,
                  70
                ],
                [
                  300,
                  160
                ],
                [
                  340,
                  130
                ],
                [
                  340,
                  130
                ]
              ]
            },
            {
              "type": "Polygon",
              "coordinates": [
                [
                  [
                    210,
                    340
                  ],
                  [
                    220,
                    260
                  ],
                  [
                    150,
                    270
                  ],
                  [
                    230,
                    220
                  ],
                  [
                    230,
                    140
                  ],
                  [
                    270,
                    210
                  ],
                  [
                    360,
                    240
                  ],
                  [
                    260,
                    250
                  ],
                  [
                    260,
                    280
                  ],
                  [
                    240,
                    270
                  ],
                  [
                    210,
                    340
                  ]
                ],
                [
                  [
                    230,
                    270
                  ],
                  [
                    230,
                    250
                  ],
                  [
                    200,
                    250
                  ],
                  [
                    240,
                    220
                  ],
                  [
                    240,
                    190
                  ],
                  [
                    260,
                    220
                  ],
                  [
                    290,
                    230
                  ],
                  [
                    250,
                    230
                  ],
                  [
                    230,
                    270
                  ]
                ]
              ]
            }
          ]
        }
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((240 50, 100 110, 110 300, 210 340, 360 240, 330 70, 240 50))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  240,
                  50
                ],
                [
                  100,
                  110
                ],
                [
                  110,
                  300
                ],
                [
                  210,
                  340
                ],
                [
                  360,
                  240
                ],
                [
                  330,
                  70
                ],
                [
                  240,
                  50
                ]
              ]
            ]
          }
        }
      }
    },
    {
      "group": "TestConvexHull",
      "category": "unary",
      "title": "Collinear L",
      "id": "20-012",
      "a": {
        "wkt": "MULTIPOINT (50 320, 50 280, 50 230, 50 160, 50 120, 100 120, 160 120, 210 120, 210 180, 210 150, 180 180, 140 180, 140 210, 140 260, 160 180, 140 300, 140 320, 110 320, 80 320)",
        "geometry": {
          "type": "MultiPoint",
          "coordinates": [
            [
              50,
              320
            ],
            [
              50,
              280
            ],
            [
              50,
              230
            ],
            [
              50,
              160
            ],
            [
              50,
              120
            ],
            [
              100,
              120
            ],
            [
              160,
              120
            ],
            [
              210,
              120
            ],
            [
              210,
              180
            ],
            [
              210,
              150
            ],
            [
              180,
              180
            ],
            [
              140,
              180
            ],
            [
              140,
              210
            ],
            [
              140,
              260
            ],
            [
              160,
              180
            ],
            [
              140,
              300
            ],
            [
              140,
              320
            ],
            [
              110,
              320
            ],
            [
              80,
              320
            ]
          ]
        }
      },
      "functions": {
        "convexHull": {
          "wkt": "POLYGON ((50 120, 50 320, 140 320, 210 180, 210 120, 50 120))",
          "geometry": {
            "type": "Polygon",
            "coordinates": [
              [
                [
                  50,
                  120
                ],
                [
                  50,
                  320
                ],
                [
                  140,
                  320
                ],
                [
                  210,
                  180
                ],
                [
                  210,
                  120
                ],
                [
                  50,
                  120
                ]
              ]
            ]
          }
        }
      }
    }
  ]
}
