ol/geom/flat/simplify export

This commit is contained in:
raiyni
2018-02-13 00:08:20 -06:00
parent 78b418ba9d
commit 837490b4a4
8 changed files with 83 additions and 85 deletions
+30 -32
View File
@@ -28,7 +28,6 @@
// POSSIBILITY OF SUCH DAMAGE.
import {squaredSegmentDistance, squaredDistance} from '../../math.js';
const _ol_geom_flat_simplify_ = {};
/**
@@ -42,23 +41,23 @@ const _ol_geom_flat_simplify_ = {};
* coordinates.
* @return {Array.<number>} Simplified line string.
*/
_ol_geom_flat_simplify_.lineString = function(flatCoordinates, offset, end,
export function simplifyLineString(flatCoordinates, offset, end,
stride, squaredTolerance, highQuality, opt_simplifiedFlatCoordinates) {
const simplifiedFlatCoordinates = opt_simplifiedFlatCoordinates !== undefined ?
opt_simplifiedFlatCoordinates : [];
if (!highQuality) {
end = _ol_geom_flat_simplify_.radialDistance(flatCoordinates, offset, end,
end = radialDistance(flatCoordinates, offset, end,
stride, squaredTolerance,
simplifiedFlatCoordinates, 0);
flatCoordinates = simplifiedFlatCoordinates;
offset = 0;
stride = 2;
}
simplifiedFlatCoordinates.length = _ol_geom_flat_simplify_.douglasPeucker(
simplifiedFlatCoordinates.length = douglasPeucker(
flatCoordinates, offset, end, stride, squaredTolerance,
simplifiedFlatCoordinates, 0);
return simplifiedFlatCoordinates;
};
}
/**
@@ -72,7 +71,7 @@ _ol_geom_flat_simplify_.lineString = function(flatCoordinates, offset, end,
* @param {number} simplifiedOffset Simplified offset.
* @return {number} Simplified offset.
*/
_ol_geom_flat_simplify_.douglasPeucker = function(flatCoordinates, offset, end,
export function douglasPeucker(flatCoordinates, offset, end,
stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) {
const n = (end - offset) / stride;
if (n < 3) {
@@ -128,7 +127,7 @@ _ol_geom_flat_simplify_.douglasPeucker = function(flatCoordinates, offset, end,
}
}
return simplifiedOffset;
};
}
/**
@@ -143,19 +142,19 @@ _ol_geom_flat_simplify_.douglasPeucker = function(flatCoordinates, offset, end,
* @param {Array.<number>} simplifiedEnds Simplified ends.
* @return {number} Simplified offset.
*/
_ol_geom_flat_simplify_.douglasPeuckers = function(flatCoordinates, offset,
export function douglasPeuckerArray(flatCoordinates, offset,
ends, stride, squaredTolerance, simplifiedFlatCoordinates,
simplifiedOffset, simplifiedEnds) {
for (let i = 0, ii = ends.length; i < ii; ++i) {
const end = ends[i];
simplifiedOffset = _ol_geom_flat_simplify_.douglasPeucker(
simplifiedOffset = douglasPeucker(
flatCoordinates, offset, end, stride, squaredTolerance,
simplifiedFlatCoordinates, simplifiedOffset);
simplifiedEnds.push(simplifiedOffset);
offset = end;
}
return simplifiedOffset;
};
}
/**
@@ -170,20 +169,20 @@ _ol_geom_flat_simplify_.douglasPeuckers = function(flatCoordinates, offset,
* @param {Array.<Array.<number>>} simplifiedEndss Simplified endss.
* @return {number} Simplified offset.
*/
_ol_geom_flat_simplify_.douglasPeuckerss = function(
export function douglasPeuckerMultiArray(
flatCoordinates, offset, endss, stride, squaredTolerance,
simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) {
for (let i = 0, ii = endss.length; i < ii; ++i) {
const ends = endss[i];
const simplifiedEnds = [];
simplifiedOffset = _ol_geom_flat_simplify_.douglasPeuckers(
simplifiedOffset = douglasPeuckerArray(
flatCoordinates, offset, ends, stride, squaredTolerance,
simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds);
simplifiedEndss.push(simplifiedEnds);
offset = ends[ends.length - 1];
}
return simplifiedOffset;
};
}
/**
@@ -197,7 +196,7 @@ _ol_geom_flat_simplify_.douglasPeuckerss = function(
* @param {number} simplifiedOffset Simplified offset.
* @return {number} Simplified offset.
*/
_ol_geom_flat_simplify_.radialDistance = function(flatCoordinates, offset, end,
export function radialDistance(flatCoordinates, offset, end,
stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) {
if (end <= offset + stride) {
// zero or one point, no simplification possible, so copy and return
@@ -232,7 +231,7 @@ _ol_geom_flat_simplify_.radialDistance = function(flatCoordinates, offset, end,
simplifiedFlatCoordinates[simplifiedOffset++] = y2;
}
return simplifiedOffset;
};
}
/**
@@ -240,9 +239,9 @@ _ol_geom_flat_simplify_.radialDistance = function(flatCoordinates, offset, end,
* @param {number} tolerance Tolerance.
* @return {number} Rounded value.
*/
_ol_geom_flat_simplify_.snap = function(value, tolerance) {
export function snap(value, tolerance) {
return tolerance * Math.round(value / tolerance);
};
}
/**
@@ -264,15 +263,15 @@ _ol_geom_flat_simplify_.snap = function(value, tolerance) {
* @param {number} simplifiedOffset Simplified offset.
* @return {number} Simplified offset.
*/
_ol_geom_flat_simplify_.quantize = function(flatCoordinates, offset, end, stride,
export function quantize(flatCoordinates, offset, end, stride,
tolerance, simplifiedFlatCoordinates, simplifiedOffset) {
// do nothing if the line is empty
if (offset == end) {
return simplifiedOffset;
}
// snap the first coordinate (P1)
let x1 = _ol_geom_flat_simplify_.snap(flatCoordinates[offset], tolerance);
let y1 = _ol_geom_flat_simplify_.snap(flatCoordinates[offset + 1], tolerance);
let x1 = snap(flatCoordinates[offset], tolerance);
let y1 = snap(flatCoordinates[offset + 1], tolerance);
offset += stride;
// add the first coordinate to the output
simplifiedFlatCoordinates[simplifiedOffset++] = x1;
@@ -281,8 +280,8 @@ _ol_geom_flat_simplify_.quantize = function(flatCoordinates, offset, end, stride
// coordinate (P2)
let x2, y2;
do {
x2 = _ol_geom_flat_simplify_.snap(flatCoordinates[offset], tolerance);
y2 = _ol_geom_flat_simplify_.snap(flatCoordinates[offset + 1], tolerance);
x2 = snap(flatCoordinates[offset], tolerance);
y2 = snap(flatCoordinates[offset + 1], tolerance);
offset += stride;
if (offset == end) {
// all coordinates snap to the same value, the line collapses to a point
@@ -296,8 +295,8 @@ _ol_geom_flat_simplify_.quantize = function(flatCoordinates, offset, end, stride
} while (x2 == x1 && y2 == y1);
while (offset < end) {
// snap the next coordinate (P3)
const x3 = _ol_geom_flat_simplify_.snap(flatCoordinates[offset], tolerance);
const y3 = _ol_geom_flat_simplify_.snap(flatCoordinates[offset + 1], tolerance);
const x3 = snap(flatCoordinates[offset], tolerance);
const y3 = snap(flatCoordinates[offset + 1], tolerance);
offset += stride;
// skip P3 if it is equal to P2
if (x3 == x2 && y3 == y2) {
@@ -334,7 +333,7 @@ _ol_geom_flat_simplify_.quantize = function(flatCoordinates, offset, end, stride
simplifiedFlatCoordinates[simplifiedOffset++] = x2;
simplifiedFlatCoordinates[simplifiedOffset++] = y2;
return simplifiedOffset;
};
}
/**
@@ -349,13 +348,13 @@ _ol_geom_flat_simplify_.quantize = function(flatCoordinates, offset, end, stride
* @param {Array.<number>} simplifiedEnds Simplified ends.
* @return {number} Simplified offset.
*/
_ol_geom_flat_simplify_.quantizes = function(
export function quantizeArray(
flatCoordinates, offset, ends, stride,
tolerance,
simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds) {
for (let i = 0, ii = ends.length; i < ii; ++i) {
const end = ends[i];
simplifiedOffset = _ol_geom_flat_simplify_.quantize(
simplifiedOffset = quantize(
flatCoordinates, offset, end, stride,
tolerance,
simplifiedFlatCoordinates, simplifiedOffset);
@@ -363,7 +362,7 @@ _ol_geom_flat_simplify_.quantizes = function(
offset = end;
}
return simplifiedOffset;
};
}
/**
@@ -378,14 +377,14 @@ _ol_geom_flat_simplify_.quantizes = function(
* @param {Array.<Array.<number>>} simplifiedEndss Simplified endss.
* @return {number} Simplified offset.
*/
_ol_geom_flat_simplify_.quantizess = function(
export function quantizeMultiArray(
flatCoordinates, offset, endss, stride,
tolerance,
simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) {
for (let i = 0, ii = endss.length; i < ii; ++i) {
const ends = endss[i];
const simplifiedEnds = [];
simplifiedOffset = _ol_geom_flat_simplify_.quantizes(
simplifiedOffset = quantizeArray(
flatCoordinates, offset, ends, stride,
tolerance,
simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds);
@@ -393,5 +392,4 @@ _ol_geom_flat_simplify_.quantizess = function(
offset = ends[ends.length - 1];
}
return simplifiedOffset;
};
export default _ol_geom_flat_simplify_;
}