Use Schaub's topology-preserving simplification method for Polygons and MultiPolygons

This commit is contained in:
Tom Payne
2013-12-13 13:52:38 +01:00
parent 5b1bbe15dd
commit 594cee01e4
3 changed files with 13 additions and 12 deletions

View File

@@ -143,10 +143,10 @@ ol.geom.MultiPolygon.prototype.getSimplifiedGeometryInternal =
function(squaredTolerance) {
var simplifiedFlatCoordinates = [];
var simplifiedEndss = [];
simplifiedFlatCoordinates.length =
ol.geom.simplify.douglasPeuckerss(this.flatCoordinates, 0,
this.endss_, this.stride, squaredTolerance, simplifiedFlatCoordinates,
0, simplifiedEndss);
simplifiedFlatCoordinates.length = ol.geom.simplify.schaubss(
this.flatCoordinates, 0, this.endss_, this.stride,
Math.sqrt(squaredTolerance),
simplifiedFlatCoordinates, 0, simplifiedEndss);
var simplifiedMultiPolygon = new ol.geom.MultiPolygon(null);
simplifiedMultiPolygon.setFlatCoordinates(
ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEndss);

View File

@@ -157,8 +157,9 @@ ol.geom.Polygon.prototype.getSimplifiedGeometryInternal =
function(squaredTolerance) {
var simplifiedFlatCoordinates = [];
var simplifiedEnds = [];
simplifiedFlatCoordinates.length = ol.geom.simplify.douglasPeuckers(
this.flatCoordinates, 0, this.ends_, this.stride, squaredTolerance,
simplifiedFlatCoordinates.length = ol.geom.simplify.schaubs(
this.flatCoordinates, 0, this.ends_, this.stride,
Math.sqrt(squaredTolerance),
simplifiedFlatCoordinates, 0, simplifiedEnds);
var simplifiedPolygon = new ol.geom.Polygon(null);
simplifiedPolygon.setFlatCoordinates(

View File

@@ -321,17 +321,17 @@ describe('ol.geom.Polygon', function() {
describe('#getSimplifiedGeometry', function() {
it('returns the expected result', function() {
var simplifiedGeometry = polygon.getSimplifiedGeometry(1);
var simplifiedGeometry = polygon.getSimplifiedGeometry(9);
expect(simplifiedGeometry).to.be.an(ol.geom.Polygon);
expect(simplifiedGeometry.getCoordinates()).to.eql(
[[[3, 0], [0, 6], [6, 6], [4, 3]]]);
[[[3, 0], [0, 3], [0, 6], [6, 6], [3, 3]]]);
});
it('caches multiple simplified geometries', function() {
var simplifiedGeometry1 = polygon.getSimplifiedGeometry(1);
var simplifiedGeometry2 = polygon.getSimplifiedGeometry(2);
var simplifiedGeometry3 = polygon.getSimplifiedGeometry(1);
var simplifiedGeometry4 = polygon.getSimplifiedGeometry(2);
var simplifiedGeometry1 = polygon.getSimplifiedGeometry(4);
var simplifiedGeometry2 = polygon.getSimplifiedGeometry(9);
var simplifiedGeometry3 = polygon.getSimplifiedGeometry(4);
var simplifiedGeometry4 = polygon.getSimplifiedGeometry(9);
expect(simplifiedGeometry1).to.be(simplifiedGeometry3);
expect(simplifiedGeometry2).to.be(simplifiedGeometry4);
});