Added Douglas-Peucker linestring simplification to OpenLayers.Geometry.LineString. Thanks chrismayer for this excellent patch. p=chrismayer, r=me (closes #2869)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@10969 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -374,7 +374,67 @@
|
||||
t.eq(Math.round(got), Math.round(cases[i].exp), "[case " + i + "] length calculated");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function test_LineString_simplify(t){
|
||||
t.plan(8);
|
||||
var ls1 = new OpenLayers.Geometry.LineString([
|
||||
new OpenLayers.Geometry.Point(0,0),
|
||||
new OpenLayers.Geometry.Point(1,2.1),
|
||||
new OpenLayers.Geometry.Point(1.8,3.8),
|
||||
new OpenLayers.Geometry.Point(2,4),
|
||||
new OpenLayers.Geometry.Point(3,4),
|
||||
new OpenLayers.Geometry.Point(4,4.5),
|
||||
new OpenLayers.Geometry.Point(5,5)
|
||||
|
||||
]);
|
||||
var ls2 = new OpenLayers.Geometry.LineString([
|
||||
new OpenLayers.Geometry.Point(0,0),
|
||||
new OpenLayers.Geometry.Point(1,2.1),
|
||||
new OpenLayers.Geometry.Point(1.8,3.8),
|
||||
new OpenLayers.Geometry.Point(2,4),
|
||||
new OpenLayers.Geometry.Point(3,4),
|
||||
new OpenLayers.Geometry.Point(4,4.5),
|
||||
new OpenLayers.Geometry.Point(5,5),
|
||||
new OpenLayers.Geometry.Point(0,0)
|
||||
|
||||
]);
|
||||
var ls3 = new OpenLayers.Geometry.LineString([
|
||||
new OpenLayers.Geometry.Point(0,0),
|
||||
new OpenLayers.Geometry.Point(1,1)
|
||||
]);
|
||||
var ls5 = new OpenLayers.Geometry.LineString([
|
||||
new OpenLayers.Geometry.Point(0,0),
|
||||
new OpenLayers.Geometry.Point(1,1),
|
||||
new OpenLayers.Geometry.Point(2,2),
|
||||
new OpenLayers.Geometry.Point(3,3),
|
||||
new OpenLayers.Geometry.Point(4,4),
|
||||
new OpenLayers.Geometry.Point(5,5)
|
||||
|
||||
]);
|
||||
var ls6 = new OpenLayers.Geometry.LineString([
|
||||
new OpenLayers.Geometry.Point(0,0),
|
||||
new OpenLayers.Geometry.Point(1,1),
|
||||
new OpenLayers.Geometry.Point(1,1),
|
||||
new OpenLayers.Geometry.Point(3,2)
|
||||
]);
|
||||
|
||||
t.ok(ls1 instanceof OpenLayers.Geometry.LineString, 'LineString is instance of OpenLayers.Geometry.LineString');
|
||||
var simplified1 = ls1.simplify(0.5);
|
||||
t.ok(simplified1 instanceof OpenLayers.Geometry.LineString, 'Simplified LineString is instance of OpenLayers.Geometry.LineString');
|
||||
t.ok(simplified1.getVertices().length <= ls1.getVertices().length, 'Simplified LineString has less or equal number of vertices');
|
||||
// The simplified version is derived from PostGIS function ST_SIMPLIFY()
|
||||
t.ok(simplified1.toString() === 'LINESTRING(0 0,1.8 3.8,5 5)', 'LineString 1 was simplified correctly');
|
||||
var simplified2 = ls2.simplify(0.5);
|
||||
// The simplified version is derived from PostGIS function ST_SIMPLIFY()
|
||||
t.ok(simplified2.toString() === 'LINESTRING(0 0,1.8 3.8,5 5,0 0)', 'LineString 2 was simplified correctly');
|
||||
var simplified3 = ls3.simplify(0.5);
|
||||
t.ok(simplified3.toString() === ls3.toString(), 'LineString with 2 vertices is left untouched');
|
||||
var simplified5 = ls5.simplify(0.0);
|
||||
t.ok(simplified5.toString() === 'LINESTRING(0 0,5 5)', 'A tolerance of 0 returns the optimized version needless vertices');
|
||||
var simplified6 = ls6.simplify(0.0);
|
||||
t.ok(simplified6.toString() === 'LINESTRING(0 0,1 1,3 2)', 'A tolerance of 0 returns the optimized version without doubled vertices');
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
Reference in New Issue
Block a user