summaryrefslogtreecommitdiff
path: root/misc/openlayers/tests/Geometry/MultiLineString.html
diff options
context:
space:
mode:
Diffstat (limited to 'misc/openlayers/tests/Geometry/MultiLineString.html')
-rw-r--r--misc/openlayers/tests/Geometry/MultiLineString.html267
1 files changed, 267 insertions, 0 deletions
diff --git a/misc/openlayers/tests/Geometry/MultiLineString.html b/misc/openlayers/tests/Geometry/MultiLineString.html
new file mode 100644
index 0000000..34a6e65
--- /dev/null
+++ b/misc/openlayers/tests/Geometry/MultiLineString.html
@@ -0,0 +1,267 @@
+<html>
+<head>
+ <script src="../OLLoader.js"></script>
+ <script type="text/javascript">
+ var line;
+
+ function test_MultiLineString_constructor (t) {
+ t.plan( 3 );
+ mline = new OpenLayers.Geometry.MultiLineString();
+ t.ok( mline instanceof OpenLayers.Geometry.MultiLineString, "new OpenLayers.Geometry.MultiLineString returns mline object" );
+ t.eq( mline.CLASS_NAME, "OpenLayers.Geometry.MultiLineString", "mline.CLASS_NAME is set correctly");
+ t.eq( mline.components, [], "line.components is set correctly");
+ }
+
+ function test_MultiLineString_constructor (t) {
+ t.plan( 3 );
+ line = new OpenLayers.Geometry.LineString();
+ mline = new OpenLayers.Geometry.MultiLineString(line);
+ t.ok( mline instanceof OpenLayers.Geometry.MultiLineString, "new OpenLayers.Geometry.MultiLineString returns mline object" );
+ t.eq( mline.CLASS_NAME, "OpenLayers.Geometry.MultiLineString", "mline.CLASS_NAME is set correctly");
+ t.eq( mline.components.length, 1, "mline.components.length is set correctly");
+ }
+
+ function test_split(t) {
+ var wkt = OpenLayers.Geometry.fromWKT;
+
+ var cases = [{
+ msg: "no intersection",
+ g1: "MULTILINESTRING((0 0, 0 1), (2 2, 3 3))",
+ g2: "MULTILINESTRING((1 0, 1 1), (2 2, 3 2))",
+ exp: null
+ } , {
+ msg: "intersection at midpoint",
+ g1: "MULTILINESTRING((0 0, 1 1))",
+ g2: "MULTILINESTRING((1 0, 0 1))",
+ exp: ["MULTILINESTRING((1 0, 0.5 0.5))", "MULTILINESTRING((0.5 0.5, 0 1))"]
+ }, {
+ msg: "intersection at midpoint (reverse source/target)",
+ g1: "MULTILINESTRING((1 0, 0 1))",
+ g2: "MULTILINESTRING((0 0, 1 1))",
+ exp: ["MULTILINESTRING((0 0, 0.5 0.5))", "MULTILINESTRING((0.5 0.5, 1 1))"]
+ }, {
+ msg: "intersection at endpoint",
+ g1: "MULTILINESTRING((0 0, 1 1))",
+ g2: "MULTILINESTRING((1 0, 1 1))",
+ exp: null
+ }, {
+ msg: "midpoint intersection, no options",
+ g1: "MULTILINESTRING((0 0, 2 2))",
+ g2: "MULTILINESTRING((0 2, 2 0))",
+ exp: ["MULTILINESTRING((0 2, 1 1))", "MULTILINESTRING((1 1, 2 0))"]
+ }, {
+ msg: "midpoint intersection, edge false",
+ opt: {edge: false},
+ g1: "MULTILINESTRING((0 0, 2 2))",
+ g2: "MULTILINESTRING((0 2, 2 0))",
+ exp: null
+ }, {
+ msg: "midpoint intersection, mutual",
+ opt: {mutual: true},
+ g1: "MULTILINESTRING((0 0, 2 2))",
+ g2: "MULTILINESTRING((0 2, 2 0))",
+ exp: [["MULTILINESTRING((0 0, 1 1))", "MULTILINESTRING((1 1, 2 2))"], ["MULTILINESTRING((0 2, 1 1))", "MULTILINESTRING((1 1, 2 0))"]]
+ }, {
+ msg: "close intersection, no tolerance",
+ g1: "MULTILINESTRING((0 0, 0.9 0.9))",
+ g2: "MULTILINESTRING((0 2, 2 0))",
+ exp: null
+ }, {
+ msg: "close intersection, within tolerance",
+ opt: {tolerance: 0.2},
+ g1: "MULTILINESTRING((0 0, 0.9 0.9))",
+ g2: "MULTILINESTRING((0 2, 2 0))",
+ exp: ["MULTILINESTRING((0 2, 0.9 0.9))", "MULTILINESTRING((0.9 0.9, 2 0))"]
+ }, {
+ msg: "multi source, single target",
+ g1: "MULTILINESTRING((0 0, 2 2))",
+ g2: "LINESTRING(0 2, 2 0)",
+ exp: ["LINESTRING(0 2, 1 1)", "LINESTRING(1 1, 2 0)"]
+ }, {
+ msg: "multi source, single target, mutual split",
+ opt: {mutual: true},
+ g1: "MULTILINESTRING((0 0, 2 2))",
+ g2: "LINESTRING(0 2, 2 0)",
+ exp: [["MULTILINESTRING((0 0, 1 1))", "MULTILINESTRING((1 1, 2 2))"], ["LINESTRING(0 2, 1 1)", "LINESTRING(1 1, 2 0)"]]
+ }, {
+ msg: "single source, multi target",
+ g1: "LINESTRING(0 2, 2 0)",
+ g2: "MULTILINESTRING((0 0, 2 2))",
+ exp: ["MULTILINESTRING((0 0, 1 1))", "MULTILINESTRING((1 1, 2 2))"]
+ }, {
+ msg: "partial target split",
+ g1: "MULTILINESTRING((2 0, 0 2))",
+ g2: "MULTILINESTRING((0 0, 2 2), (3 3, 4 4))",
+ exp: ["MULTILINESTRING((0 0, 1 1))", "MULTILINESTRING((1 1, 2 2), (3 3, 4 4))"]
+ }, {
+ msg: "partial target split, mutual true",
+ opt: {mutual: true},
+ g1: "MULTILINESTRING((2 0, 0 2))",
+ g2: "MULTILINESTRING((0 0, 2 2), (3 3, 4 4))",
+ exp: [["MULTILINESTRING((2 0, 1 1))", "MULTILINESTRING((1 1, 0 2))"], ["MULTILINESTRING((0 0, 1 1))", "MULTILINESTRING((1 1, 2 2), (3 3, 4 4))"]]
+ }, {
+ msg: "partial source split, mutual true",
+ opt: {mutual: true},
+ g1: "MULTILINESTRING((0 0, 2 2), (3 3, 4 4))",
+ g2: "MULTILINESTRING((2 0, 0 2))",
+ exp: [["MULTILINESTRING((0 0, 1 1))", "MULTILINESTRING((1 1, 2 2), (3 3, 4 4))"], ["MULTILINESTRING((2 0, 1 1))", "MULTILINESTRING((1 1, 0 2))"]]
+ }, {
+ msg: "partial target split with source endpoint",
+ g1: "MULTILINESTRING((1 0, 1 1))",
+ g2: "MULTILINESTRING((0 0, 2 2), (3 3, 4 4))",
+ exp: ["MULTILINESTRING((0 0, 1 1))", "MULTILINESTRING((1 1, 2 2), (3 3, 4 4))"]
+ }, {
+ msg: "partial target split with source endpoint, mutual true",
+ opt: {mutual: true},
+ g1: "MULTILINESTRING((5 5, 6 6), (1 0, 1 1))",
+ g2: "MULTILINESTRING((0 0, 2 2), (3 3, 4 4))",
+ exp: [[], ["MULTILINESTRING((0 0, 1 1))", "MULTILINESTRING((1 1, 2 2), (3 3, 4 4))"]]
+ }, {
+ msg: "partial source split with target endpoint",
+ g1: "MULTILINESTRING((0 0, 2 2), (3 3, 4 4))",
+ g2: "MULTILINESTRING((1 0, 1 1))",
+ exp: null
+ }, {
+ msg: "partial source split with target endpoint, mutual true",
+ opt: {mutual: true},
+ g1: "MULTILINESTRING((0 0, 2 2), (3 3, 4 4), (5 5, 6 6))",
+ g2: "MULTILINESTRING((1 0, 1 1))",
+ exp: [["MULTILINESTRING((0 0, 1 1))", "MULTILINESTRING((1 1, 2 2), (3 3, 4 4), (5 5, 6 6))"], []]
+ }, {
+ msg: "partial target and source split",
+ g1: "MULTILINESTRING((0 5, 2 5), (4 5, 6 5), (8 5, 10 5))",
+ g2: "MULTILINESTRING((5 0, 5 2), (5 4, 5 6), (5 8, 5 10))",
+ exp: ["MULTILINESTRING((5 0, 5 2), (5 4, 5 5))", "MULTILINESTRING((5 5, 5 6), (5 8, 5 10))"]
+ }, {
+ msg: "partial target and source split, mutual true",
+ opt: {mutual: true},
+ g1: "MULTILINESTRING((0 5, 2 5), (4 5, 6 5), (8 5, 10 5))",
+ g2: "MULTILINESTRING((5 0, 5 2), (5 4, 5 6), (5 8, 5 10))",
+ exp: [["MULTILINESTRING((0 5, 2 5), (4 5, 5 5))", "MULTILINESTRING((5 5, 6 5), (8 5, 10 5))"],
+ ["MULTILINESTRING((5 0, 5 2), (5 4, 5 5))", "MULTILINESTRING((5 5, 5 6), (5 8, 5 10))"]]
+ }, {
+ msg: "partial target and source split with source endpoint, mutual true",
+ opt: {mutual: true},
+ g1: "MULTILINESTRING((0 5, 2 5), (4 5, 6 5), (8 5, 10 5))",
+ g2: "MULTILINESTRING((4 0, 4 2), (4 4, 4 6), (4 8, 4 10))",
+ exp: [[], ["MULTILINESTRING((4 0, 4 2), (4 4, 4 5))", "MULTILINESTRING((4 5, 4 6), (4 8, 4 10))"]]
+ }, {
+ msg: "partial target and source split with target endpoint, mutual true",
+ opt: {mutual: true},
+ g1: "MULTILINESTRING((4 0, 4 2), (4 4, 4 6), (4 8, 4 10))",
+ g2: "MULTILINESTRING((0 5, 2 5), (4 5, 6 5), (8 5, 10 5))",
+ exp: [["MULTILINESTRING((4 0, 4 2), (4 4, 4 5))", "MULTILINESTRING((4 5, 4 6), (4 8, 4 10))"], []]
+ }, {
+ msg: "partial target and source split with source vertex, mutual true",
+ opt: {mutual: true},
+ g1: "MULTILINESTRING((0 5, 2 5), (4 5, 5 5, 6 5), (8 5, 10 5))",
+ g2: "MULTILINESTRING((5 0, 5 2), (5 4, 5 6), (5 8, 5 10))",
+ exp: [["MULTILINESTRING((0 5, 2 5), (4 5, 5 5))", "MULTILINESTRING((5 5, 6 5), (8 5, 10 5))"], ["MULTILINESTRING((5 0, 5 2), (5 4, 5 5))", "MULTILINESTRING((5 5, 5 6), (5 8, 5 10))"]]
+ }, {
+ msg: "partial target and source split with target vertex, mutual true",
+ opt: {mutual: true},
+ g1: "MULTILINESTRING((5 0, 5 2), (5 4, 5 6), (5 8, 5 10))",
+ g2: "MULTILINESTRING((0 5, 2 5), (4 5, 5 5, 6 5), (8 5, 10 5))",
+ exp: [["MULTILINESTRING((5 0, 5 2), (5 4, 5 5))", "MULTILINESTRING((5 5, 5 6), (5 8, 5 10))"], ["MULTILINESTRING((0 5, 2 5), (4 5, 5 5))", "MULTILINESTRING((5 5, 6 5), (8 5, 10 5))"]]
+ }];
+
+
+ t.plan(cases.length);
+ var c, parts, part, midparts;
+ for(var i=0; i<cases.length; ++i) {
+ c = cases[i];
+ var g1 = wkt(c.g1);
+ var g2 = wkt(c.g2);
+ var got = g1.split(g2, c.opt);
+ var exp = c.exp;
+ if(got instanceof Array) {
+ parts = [];
+ for(var j=0; j<got.length; ++j) {
+ part = got[j];
+ if(part instanceof Array) {
+ midparts = [];
+ for(var k=0; k<part.length; ++k) {
+ midparts.push(part[k].toString());
+ }
+ parts.push("[" + midparts.join(", ") + "]");
+ } else {
+ parts.push(got[j].toString());
+ }
+ }
+ got = parts.join(", ");
+ }
+ if(exp instanceof Array) {
+ parts = [];
+ for(var j=0; j<exp.length; ++j) {
+ part = exp[j];
+ if(part instanceof Array) {
+ midparts = [];
+ for(var k=0; k<part.length; ++k) {
+ midparts.push(wkt(part[k]).toString());
+ }
+ parts.push("[" + midparts.join(", ") + "]");
+ } else {
+ parts.push(wkt(exp[j]).toString());
+ }
+ }
+ exp = parts.join(", ");
+ }
+ t.eq(got, exp, "case " + i + ": " + c.msg);
+ }
+
+ }
+
+ function test_getVertices(t) {
+ t.plan(22);
+
+ var points = [
+ new OpenLayers.Geometry.Point(10, 20),
+ new OpenLayers.Geometry.Point(20, 30),
+ new OpenLayers.Geometry.Point(30, 40),
+ new OpenLayers.Geometry.Point(40, 50)
+ ];
+
+ var multi = new OpenLayers.Geometry.MultiLineString([
+ new OpenLayers.Geometry.LineString(points),
+ new OpenLayers.Geometry.LineString(points)
+ ]);
+
+ var verts = multi.getVertices();
+ t.ok(verts instanceof Array, "got back an array");
+ t.eq(verts.length, 2 * points.length, "of correct length length");
+ t.geom_eq(verts[0], points[0], "0: correct geometry");
+ t.geom_eq(verts[1], points[1], "1: correct geometry");
+ t.geom_eq(verts[2], points[2], "2: correct geometry");
+ t.geom_eq(verts[3], points[3], "3: correct geometry");
+ t.geom_eq(verts[4], points[0], "4: correct geometry");
+ t.geom_eq(verts[5], points[1], "5: correct geometry");
+ t.geom_eq(verts[6], points[2], "6: correct geometry");
+ t.geom_eq(verts[7], points[3], "7: correct geometry");
+
+ // nodes only
+ var nodes = multi.getVertices(true);
+ t.ok(nodes instanceof Array, "[nodes only] got back an array");
+ t.eq(nodes.length, 4, "[nodes only] of correct length length");
+ t.geom_eq(nodes[0], points[0], "[nodes only] 0: correct geometry");
+ t.geom_eq(nodes[1], points[3], "[nodes only] 1: correct geometry");
+ t.geom_eq(nodes[2], points[0], "[nodes only] 2: correct geometry");
+ t.geom_eq(nodes[3], points[3], "[nodes only] 3: correct geometry");
+
+ // no nodes
+ var nodes = multi.getVertices(false);
+ t.ok(nodes instanceof Array, "[no nodes] got back an array");
+ t.eq(nodes.length, 4, "[no nodes] of correct length length");
+ t.geom_eq(nodes[0], points[1], "[no nodes] 0: correct geometry");
+ t.geom_eq(nodes[1], points[2], "[no nodes] 1: correct geometry");
+ t.geom_eq(nodes[2], points[1], "[no nodes] 2: correct geometry");
+ t.geom_eq(nodes[3], points[2], "[no nodes] 3: correct geometry");
+
+
+ }
+
+
+ </script>
+</head>
+<body>
+</body>
+</html>