Use Schaub's topology-preserving simplification method for Polygons and MultiPolygons
This commit is contained in:
@@ -143,10 +143,10 @@ ol.geom.MultiPolygon.prototype.getSimplifiedGeometryInternal =
|
|||||||
function(squaredTolerance) {
|
function(squaredTolerance) {
|
||||||
var simplifiedFlatCoordinates = [];
|
var simplifiedFlatCoordinates = [];
|
||||||
var simplifiedEndss = [];
|
var simplifiedEndss = [];
|
||||||
simplifiedFlatCoordinates.length =
|
simplifiedFlatCoordinates.length = ol.geom.simplify.schaubss(
|
||||||
ol.geom.simplify.douglasPeuckerss(this.flatCoordinates, 0,
|
this.flatCoordinates, 0, this.endss_, this.stride,
|
||||||
this.endss_, this.stride, squaredTolerance, simplifiedFlatCoordinates,
|
Math.sqrt(squaredTolerance),
|
||||||
0, simplifiedEndss);
|
simplifiedFlatCoordinates, 0, simplifiedEndss);
|
||||||
var simplifiedMultiPolygon = new ol.geom.MultiPolygon(null);
|
var simplifiedMultiPolygon = new ol.geom.MultiPolygon(null);
|
||||||
simplifiedMultiPolygon.setFlatCoordinates(
|
simplifiedMultiPolygon.setFlatCoordinates(
|
||||||
ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEndss);
|
ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEndss);
|
||||||
|
|||||||
@@ -157,8 +157,9 @@ ol.geom.Polygon.prototype.getSimplifiedGeometryInternal =
|
|||||||
function(squaredTolerance) {
|
function(squaredTolerance) {
|
||||||
var simplifiedFlatCoordinates = [];
|
var simplifiedFlatCoordinates = [];
|
||||||
var simplifiedEnds = [];
|
var simplifiedEnds = [];
|
||||||
simplifiedFlatCoordinates.length = ol.geom.simplify.douglasPeuckers(
|
simplifiedFlatCoordinates.length = ol.geom.simplify.schaubs(
|
||||||
this.flatCoordinates, 0, this.ends_, this.stride, squaredTolerance,
|
this.flatCoordinates, 0, this.ends_, this.stride,
|
||||||
|
Math.sqrt(squaredTolerance),
|
||||||
simplifiedFlatCoordinates, 0, simplifiedEnds);
|
simplifiedFlatCoordinates, 0, simplifiedEnds);
|
||||||
var simplifiedPolygon = new ol.geom.Polygon(null);
|
var simplifiedPolygon = new ol.geom.Polygon(null);
|
||||||
simplifiedPolygon.setFlatCoordinates(
|
simplifiedPolygon.setFlatCoordinates(
|
||||||
|
|||||||
@@ -321,17 +321,17 @@ describe('ol.geom.Polygon', function() {
|
|||||||
describe('#getSimplifiedGeometry', function() {
|
describe('#getSimplifiedGeometry', function() {
|
||||||
|
|
||||||
it('returns the expected result', 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).to.be.an(ol.geom.Polygon);
|
||||||
expect(simplifiedGeometry.getCoordinates()).to.eql(
|
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() {
|
it('caches multiple simplified geometries', function() {
|
||||||
var simplifiedGeometry1 = polygon.getSimplifiedGeometry(1);
|
var simplifiedGeometry1 = polygon.getSimplifiedGeometry(4);
|
||||||
var simplifiedGeometry2 = polygon.getSimplifiedGeometry(2);
|
var simplifiedGeometry2 = polygon.getSimplifiedGeometry(9);
|
||||||
var simplifiedGeometry3 = polygon.getSimplifiedGeometry(1);
|
var simplifiedGeometry3 = polygon.getSimplifiedGeometry(4);
|
||||||
var simplifiedGeometry4 = polygon.getSimplifiedGeometry(2);
|
var simplifiedGeometry4 = polygon.getSimplifiedGeometry(9);
|
||||||
expect(simplifiedGeometry1).to.be(simplifiedGeometry3);
|
expect(simplifiedGeometry1).to.be(simplifiedGeometry3);
|
||||||
expect(simplifiedGeometry2).to.be(simplifiedGeometry4);
|
expect(simplifiedGeometry2).to.be(simplifiedGeometry4);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user